summaryrefslogtreecommitdiff
path: root/api
diff options
context:
space:
mode:
Diffstat (limited to 'api')
-rw-r--r--api/client.go25
-rw-r--r--api/server.go4
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)