Skip to content
This repository was archived by the owner on Feb 8, 2021. It is now read-only.

Commit 491deae

Browse files
author
Solomon Hykes
committed
Move "build" to daemon/build.go
Signed-off-by: Solomon Hykes <solomon@docker.com>
1 parent 64579f5 commit 491deae

File tree

4 files changed

+90
-111
lines changed

4 files changed

+90
-111
lines changed
Lines changed: 88 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package builder
1+
package daemon
22

33
import (
44
"crypto/sha256"
@@ -10,6 +10,7 @@ import (
1010
"io/ioutil"
1111
"net/url"
1212
"os"
13+
"os/exec"
1314
"path"
1415
"path/filepath"
1516
"reflect"
@@ -20,7 +21,6 @@ import (
2021
"time"
2122

2223
"github.com/docker/docker/archive"
23-
"github.com/docker/docker/daemon"
2424
"github.com/docker/docker/engine"
2525
"github.com/docker/docker/nat"
2626
"github.com/docker/docker/pkg/parsers"
@@ -32,6 +32,86 @@ import (
3232
"github.com/docker/docker/utils"
3333
)
3434

35+
func (daemon *Daemon) CmdBuild(job *engine.Job) engine.Status {
36+
if len(job.Args) != 0 {
37+
return job.Errorf("Usage: %s\n", job.Name)
38+
}
39+
var (
40+
remoteURL = job.Getenv("remote")
41+
repoName = job.Getenv("t")
42+
suppressOutput = job.GetenvBool("q")
43+
noCache = job.GetenvBool("nocache")
44+
rm = job.GetenvBool("rm")
45+
forceRm = job.GetenvBool("forcerm")
46+
authConfig = &registry.AuthConfig{}
47+
configFile = &registry.ConfigFile{}
48+
tag string
49+
context io.ReadCloser
50+
)
51+
job.GetenvJson("authConfig", authConfig)
52+
job.GetenvJson("configFile", configFile)
53+
repoName, tag = parsers.ParseRepositoryTag(repoName)
54+
55+
if remoteURL == "" {
56+
context = ioutil.NopCloser(job.Stdin)
57+
} else if utils.IsGIT(remoteURL) {
58+
if !strings.HasPrefix(remoteURL, "git://") {
59+
remoteURL = "https://" + remoteURL
60+
}
61+
root, err := ioutil.TempDir("", "docker-build-git")
62+
if err != nil {
63+
return job.Error(err)
64+
}
65+
defer os.RemoveAll(root)
66+
67+
if output, err := exec.Command("git", "clone", "--recursive", remoteURL, root).CombinedOutput(); err != nil {
68+
return job.Errorf("Error trying to use git: %s (%s)", err, output)
69+
}
70+
71+
c, err := archive.Tar(root, archive.Uncompressed)
72+
if err != nil {
73+
return job.Error(err)
74+
}
75+
context = c
76+
} else if utils.IsURL(remoteURL) {
77+
f, err := utils.Download(remoteURL)
78+
if err != nil {
79+
return job.Error(err)
80+
}
81+
defer f.Body.Close()
82+
dockerFile, err := ioutil.ReadAll(f.Body)
83+
if err != nil {
84+
return job.Error(err)
85+
}
86+
c, err := archive.Generate("Dockerfile", string(dockerFile))
87+
if err != nil {
88+
return job.Error(err)
89+
}
90+
context = c
91+
}
92+
defer context.Close()
93+
94+
sf := utils.NewStreamFormatter(job.GetenvBool("json"))
95+
b := NewBuildFile(daemon, daemon.eng,
96+
&utils.StdoutFormater{
97+
Writer: job.Stdout,
98+
StreamFormatter: sf,
99+
},
100+
&utils.StderrFormater{
101+
Writer: job.Stdout,
102+
StreamFormatter: sf,
103+
},
104+
!suppressOutput, !noCache, rm, forceRm, job.Stdout, sf, authConfig, configFile)
105+
id, err := b.Build(context)
106+
if err != nil {
107+
return job.Error(err)
108+
}
109+
if repoName != "" {
110+
daemon.Repositories().Set(repoName, tag, id, false)
111+
}
112+
return engine.StatusOK
113+
}
114+
35115
var (
36116
ErrDockerfileEmpty = errors.New("Dockerfile cannot be empty")
37117
)
@@ -43,7 +123,7 @@ type BuildFile interface {
43123
}
44124

45125
type buildFile struct {
46-
daemon *daemon.Daemon
126+
daemon *Daemon
47127
eng *engine.Engine
48128

49129
image string
@@ -124,7 +204,7 @@ func (b *buildFile) CmdFrom(name string) error {
124204
b.config = image.Config
125205
}
126206
if b.config.Env == nil || len(b.config.Env) == 0 {
127-
b.config.Env = append(b.config.Env, "PATH="+daemon.DefaultPathEnv)
207+
b.config.Env = append(b.config.Env, "PATH="+DefaultPathEnv)
128208
}
129209
// Process ONBUILD triggers if they exist
130210
if nTriggers := len(b.config.OnBuild); nTriggers != 0 {
@@ -416,7 +496,7 @@ func (b *buildFile) checkPathForAddition(orig string) error {
416496
return nil
417497
}
418498

419-
func (b *buildFile) addContext(container *daemon.Container, orig, dest string, decompress bool) error {
499+
func (b *buildFile) addContext(container *Container, orig, dest string, decompress bool) error {
420500
var (
421501
err error
422502
destExists = true
@@ -668,7 +748,7 @@ func (b *buildFile) CmdAdd(args string) error {
668748
return b.runContextCommand(args, true, true, "ADD")
669749
}
670750

671-
func (b *buildFile) create() (*daemon.Container, error) {
751+
func (b *buildFile) create() (*Container, error) {
672752
if b.image == "" {
673753
return nil, fmt.Errorf("Please provide a source image with `from` prior to run")
674754
}
@@ -689,7 +769,7 @@ func (b *buildFile) create() (*daemon.Container, error) {
689769
return c, nil
690770
}
691771

692-
func (b *buildFile) run(c *daemon.Container) error {
772+
func (b *buildFile) run(c *Container) error {
693773
var errCh chan error
694774
if b.verbose {
695775
errCh = utils.Go(func() error {
@@ -906,7 +986,7 @@ func fixPermissions(destination string, uid, gid int) error {
906986
})
907987
}
908988

909-
func NewBuildFile(d *daemon.Daemon, eng *engine.Engine, outStream, errStream io.Writer, verbose, utilizeCache, rm bool, forceRm bool, outOld io.Writer, sf *utils.StreamFormatter, auth *registry.AuthConfig, authConfigFile *registry.ConfigFile) BuildFile {
989+
func NewBuildFile(d *Daemon, eng *engine.Engine, outStream, errStream io.Writer, verbose, utilizeCache, rm bool, forceRm bool, outOld io.Writer, sf *utils.StreamFormatter, auth *registry.AuthConfig, authConfigFile *registry.ConfigFile) BuildFile {
910990
return &buildFile{
911991
daemon: d,
912992
eng: eng,

daemon/daemon.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ func (daemon *Daemon) Install(eng *engine.Engine) error {
109109
// FIXME: remove ImageDelete's dependency on Daemon, then move to graph/
110110
for name, method := range map[string]engine.Handler{
111111
"attach": daemon.ContainerAttach,
112+
"build": daemon.CmdBuild,
112113
"commit": daemon.ContainerCommit,
113114
"container_changes": daemon.ContainerChanges,
114115
"container_copy": daemon.ContainerCopy,

server/image.go

Lines changed: 0 additions & 100 deletions
This file was deleted.

server/init.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,7 @@ func InitServer(job *engine.Job) engine.Status {
3131
job.Eng.Hack_SetGlobalVar("httpapi.server", srv)
3232
job.Eng.Hack_SetGlobalVar("httpapi.daemon", srv.daemon)
3333

34-
for name, handler := range map[string]engine.Handler{
35-
"build": srv.Build,
36-
} {
34+
for name, handler := range map[string]engine.Handler{} {
3735
if err := job.Eng.Register(name, srv.handlerWrap(handler)); err != nil {
3836
return job.Error(err)
3937
}

0 commit comments

Comments
 (0)