diff --git a/pkg/giturl/giturl.go b/pkg/giturl/giturl.go index a4f1c49c1..facd3ec7f 100644 --- a/pkg/giturl/giturl.go +++ b/pkg/giturl/giturl.go @@ -7,12 +7,20 @@ import ( "github.com/pkg/errors" ) +type provider string + +const ( + providerGithub provider = "Github" + providerGitlab provider = "Gitlab" + providerBitbucket provider = "Bitbucket" +) + func NormalizeBitbucketRepo(repoURL string) (string, error) { if !strings.HasPrefix(repoURL, "https") { return "", errors.New("Bitbucket requires https repo urls: e.g. https://bitbucket.org/org/repo.git") } - return NormalizeOrgRepoURL("Bitbucket", repoURL) + return NormalizeOrgRepoURL(providerBitbucket, repoURL) } func NormalizeGerritProject(project string) (string, error) { @@ -20,7 +28,7 @@ func NormalizeGerritProject(project string) (string, error) { } func NormalizeGithubRepo(repoURL string) (string, error) { - return NormalizeOrgRepoURL("Github", repoURL) + return NormalizeOrgRepoURL(providerGithub, repoURL) } func NormalizeGitlabRepo(repoURL string) (string, error) { @@ -28,12 +36,12 @@ func NormalizeGitlabRepo(repoURL string) (string, error) { return "", errors.New("Gitlab requires http/https repo urls: e.g. https://gitlab.com/org/repo.git") } - return NormalizeOrgRepoURL("Gitlab", repoURL) + return NormalizeOrgRepoURL(providerGitlab, repoURL) } // NormalizeOrgRepoURL attempts to normalize repos for any provider using the example.com/org/repo style. // e.g. %s, Gitlab and Bitbucket -func NormalizeOrgRepoURL(provider, repoURL string) (string, error) { +func NormalizeOrgRepoURL(provider provider, repoURL string) (string, error) { if strings.HasSuffix(repoURL, ".git") { return repoURL, nil } diff --git a/pkg/giturl/giturl_test.go b/pkg/giturl/giturl_test.go index c68ac8ead..1d8a450a1 100644 --- a/pkg/giturl/giturl_test.go +++ b/pkg/giturl/giturl_test.go @@ -8,22 +8,22 @@ import ( func Test_NormalizeOrgRepoURL(t *testing.T) { tests := map[string]struct { - Provider string + Provider provider Repo string Out string Err error }{ - "github is good": {Provider: "Github", Repo: "https://github.com/org/repo", Out: "https://github.com/org/repo.git", Err: nil}, - "gitlab is good": {Provider: "Gitlab", Repo: "https://gitlab.com/org/repo", Out: "https://gitlab.com/org/repo.git", Err: nil}, - "bitbucket is good": {Provider: "Bitbucket", Repo: "https://bitbucket.com/org/repo", Out: "https://bitbucket.com/org/repo.git", Err: nil}, + "github is good": {Provider: providerGithub, Repo: "https://github.com/org/repo", Out: "https://github.com/org/repo.git", Err: nil}, + "gitlab is good": {Provider: providerGitlab, Repo: "https://gitlab.com/org/repo", Out: "https://gitlab.com/org/repo.git", Err: nil}, + "bitbucket is good": {Provider: providerBitbucket, Repo: "https://bitbucket.com/org/repo", Out: "https://bitbucket.com/org/repo.git", Err: nil}, "example provider is good": {Provider: "example", Repo: "https://example.com/org/repo", Out: "https://example.com/org/repo.git", Err: nil}, "example provider problem": {Provider: "example", Repo: "https://example.com/org", Out: "", Err: errors.Errorf("example repo appears to be missing the repo name. Org: %q Repo url: %q", "org", "https://example.com/org")}, - "no path": {Provider: "Github", Repo: "https://github.com", Out: "", Err: errors.Errorf("Github repo appears to be missing the path. Repo url: %q", "https://github.com")}, - "org but no repo": {Provider: "Github", Repo: "https://github.com/org", Out: "", Err: errors.Errorf("Github repo appears to be missing the repo name. Org: %q Repo url: %q", "org", "https://github.com/org")}, - "org but no repo with slash": {Provider: "Github", Repo: "https://github.com/org/", Out: "", Err: errors.Errorf("Github repo appears to be missing the repo name. Org: %q Repo url: %q", "org", "https://github.com/org/")}, - "two slashes": {Provider: "Github", Repo: "https://github.com//", Out: "", Err: errors.Errorf("Github repo appears to be missing the org name. Repo url: %q", "https://github.com//")}, - "repo with trailing slash": {Provider: "Github", Repo: "https://github.com/org/repo/", Out: "", Err: errors.Errorf("Github repo contains a trailing slash. Repo url: %q", "https://github.com/org/repo/")}, - "too many url path parts": {Provider: "Github", Repo: "https://github.com/org/repo/unknown/", Out: "", Err: errors.Errorf("Github repo contains a trailing slash. Repo url: %q", "https://github.com/org/repo/unknown/")}, + "no path": {Provider: providerGithub, Repo: "https://github.com", Out: "", Err: errors.Errorf("Github repo appears to be missing the path. Repo url: %q", "https://github.com")}, + "org but no repo": {Provider: providerGithub, Repo: "https://github.com/org", Out: "", Err: errors.Errorf("Github repo appears to be missing the repo name. Org: %q Repo url: %q", "org", "https://github.com/org")}, + "org but no repo with slash": {Provider: providerGithub, Repo: "https://github.com/org/", Out: "", Err: errors.Errorf("Github repo appears to be missing the repo name. Org: %q Repo url: %q", "org", "https://github.com/org/")}, + "two slashes": {Provider: providerGithub, Repo: "https://github.com//", Out: "", Err: errors.Errorf("Github repo appears to be missing the org name. Repo url: %q", "https://github.com//")}, + "repo with trailing slash": {Provider: providerGithub, Repo: "https://github.com/org/repo/", Out: "", Err: errors.Errorf("Github repo contains a trailing slash. Repo url: %q", "https://github.com/org/repo/")}, + "too many url path parts": {Provider: providerGithub, Repo: "https://github.com/org/repo/unknown/", Out: "", Err: errors.Errorf("Github repo contains a trailing slash. Repo url: %q", "https://github.com/org/repo/unknown/")}, } for name, tt := range tests {