diff --git a/api/client/commands.go b/api/client/commands.go index 6c4e5c55fe..ab8ac96f03 100644 --- a/api/client/commands.go +++ b/api/client/commands.go @@ -116,7 +116,7 @@ func (cli *DockerCli) CmdBuild(args ...string) error { root := cmd.Arg(0) if utils.IsGIT(root) { remoteURL := cmd.Arg(0) - if !strings.HasPrefix(remoteURL, "git://") && !strings.HasPrefix(remoteURL, "git@") && !utils.IsURL(remoteURL) { + if !utils.ValidGitTransport(remoteURL) { remoteURL = "https://" + remoteURL } diff --git a/builder/job.go b/builder/job.go index 555232c9ae..4ce8cbe020 100644 --- a/builder/job.go +++ b/builder/job.go @@ -5,7 +5,6 @@ import ( "io/ioutil" "os" "os/exec" - "strings" "github.com/docker/docker/daemon" "github.com/docker/docker/engine" @@ -59,7 +58,7 @@ func (b *BuilderJob) CmdBuild(job *engine.Job) engine.Status { if remoteURL == "" { context = ioutil.NopCloser(job.Stdin) } else if utils.IsGIT(remoteURL) { - if !strings.HasPrefix(remoteURL, "git://") { + if !utils.ValidGitTransport(remoteURL) { remoteURL = "https://" + remoteURL } root, err := ioutil.TempDir("", "docker-build-git") diff --git a/utils/utils.go b/utils/utils.go index 792b80bd51..70ab420791 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -304,6 +304,10 @@ func IsGIT(str string) bool { return strings.HasPrefix(str, "git://") || strings.HasPrefix(str, "github.com/") || strings.HasPrefix(str, "git@github.com:") || (strings.HasSuffix(str, ".git") && IsURL(str)) } +func ValidGitTransport(str string) bool { + return strings.HasPrefix(str, "git://") || strings.HasPrefix(str, "git@") || IsURL(str) +} + var ( localHostRx = regexp.MustCompile(`(?m)^nameserver 127[^\n]+\n*`) ) diff --git a/utils/utils_test.go b/utils/utils_test.go index ce304482b8..6e2de7e041 100644 --- a/utils/utils_test.go +++ b/utils/utils_test.go @@ -97,3 +97,24 @@ func TestReadSymlinkedDirectoryToFile(t *testing.T) { t.Errorf("failed to remove symlink: %s", err) } } + +func TestValidGitTransport(t *testing.T) { + for _, url := range []string{ + "git://github.com/docker/docker", + "git@github.com:docker/docker.git", + "https://github.com/docker/docker.git", + "http://github.com/docker/docker.git", + } { + if ValidGitTransport(url) == false { + t.Fatalf("%q should be detected as valid Git prefix", url) + } + } + + for _, url := range []string{ + "github.com/docker/docker", + } { + if ValidGitTransport(url) == true { + t.Fatalf("%q should not be detected as valid Git prefix", url) + } + } +}