diff options
Diffstat (limited to 'api')
| -rw-r--r-- | api/client.go | 25 | ||||
| -rw-r--r-- | api/server.go | 4 |
2 files changed, 25 insertions, 4 deletions
diff --git a/api/client.go b/api/client.go index 2ea2dc44ea..2dce8eba33 100644 --- a/api/client.go +++ b/api/client.go @@ -161,17 +161,34 @@ func (cli *DockerCli) CmdBuild(args ...string) error { return err } context, err = archive.Generate("Dockerfile", string(dockerfile)) - } else if utils.IsURL(cmd.Arg(0)) || utils.IsGIT(cmd.Arg(0)) { + } else if utils.IsURL(cmd.Arg(0)) { isRemote = true } else { - if _, err := os.Stat(cmd.Arg(0)); err != nil { + root := cmd.Arg(0) + if utils.IsGIT(root) { + remoteURL := cmd.Arg(0) + if !strings.HasPrefix(remoteURL, "git://") && !strings.HasPrefix(remoteURL, "git@") { + remoteURL = "https://" + remoteURL + } + + root, err = ioutil.TempDir("", "docker-build-git") + if err != nil { + return err + } + defer os.RemoveAll(root) + + if output, err := exec.Command("git", "clone", remoteURL, root).CombinedOutput(); err != nil { + return fmt.Errorf("Error trying to use git: %s (%s)", err, output) + } + } + if _, err := os.Stat(root); err != nil { return err } - filename := path.Join(cmd.Arg(0), "Dockerfile") + filename := path.Join(root, "Dockerfile") if _, err = os.Stat(filename); os.IsNotExist(err) { return fmt.Errorf("no Dockerfile found in %s", cmd.Arg(0)) } - context, err = archive.Tar(cmd.Arg(0), archive.Uncompressed) + context, err = archive.Tar(root, archive.Uncompressed) } var body io.Reader // Setup an upload progress bar diff --git a/api/server.go b/api/server.go index b6beb45403..b0601c71c1 100644 --- a/api/server.go +++ b/api/server.go @@ -850,6 +850,10 @@ func postBuild(eng *engine.Engine, version version.Version, w http.ResponseWrite } } + if version.CreaterThanOrEqualTo("1.10") && utils.IsGIT(r.FormValue("remote")) { + return fmt.Errorf("Please clone locally and build using context") + } + if version.GreaterThanOrEqualTo("1.8") { job.SetenvBool("json", true) streamJSON(job, w, true) |
