diff --git a/api/client/commands.go b/api/client/commands.go index 610e06452d..3ecef0f40c 100644 --- a/api/client/commands.go +++ b/api/client/commands.go @@ -117,7 +117,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 ae501acb5d..c86ccb0e3c 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 061e3bc638..ef587bb77c 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) + } + } +}