@@ -14,6 +14,8 @@ import (
1414 "runtime"
1515 "strings"
1616
17+ "github.com/docker/engine-api/types"
18+ "github.com/docker/go-units"
1719 "github.com/hyperhq/hypercli/api"
1820 "github.com/hyperhq/hypercli/builder/dockerignore"
1921 Cli "github.com/hyperhq/hypercli/cli"
@@ -30,12 +32,10 @@ import (
3032 "github.com/hyperhq/hypercli/pkg/urlutil"
3133 "github.com/hyperhq/hypercli/reference"
3234 runconfigopts "github.com/hyperhq/hypercli/runconfig/opts"
33- "github.com/docker/engine-api/types"
34- "github.com/docker/engine-api/types/container"
35- "github.com/docker/go-units"
35+ "golang.org/x/net/context"
3636)
3737
38- type translatorFunc func (reference.NamedTagged ) (reference.Canonical , error )
38+ type translatorFunc func (context. Context , reference.NamedTagged ) (reference.Canonical , error )
3939
4040// CmdBuild builds a new image from the source code at a given path.
4141//
@@ -63,7 +63,6 @@ func (cli *DockerCli) Build(args ...string) error {
6363 flCgroupParent := cmd .String ([]string {"-cgroup-parent" }, "" , "Optional parent cgroup for the container" )
6464 flBuildArg := opts .NewListOpts (runconfigopts .ValidateEnv )
6565 cmd .Var (& flBuildArg , []string {"-build-arg" }, "Set build-time variables" )
66- isolation := cmd .String ([]string {"-isolation" }, "" , "Container isolation level" )
6766
6867 ulimits := make (map [string ]* units.Ulimit )
6968 flUlimits := runconfigopts .NewUlimitOpt (& ulimits )
@@ -77,8 +76,8 @@ func (cli *DockerCli) Build(args ...string) error {
7776 cmd .ParseFlags (args , true )
7877
7978 var (
80- context io.ReadCloser
81- err error
79+ buildCtx io.ReadCloser
80+ err error
8281 )
8382
8483 specifiedContext := cmd .Arg (0 )
@@ -100,11 +99,11 @@ func (cli *DockerCli) Build(args ...string) error {
10099
101100 switch {
102101 case specifiedContext == "-" :
103- context , relDockerfile , err = getContextFromReader (cli .in , * dockerfileName )
102+ buildCtx , relDockerfile , err = getContextFromReader (cli .in , * dockerfileName )
104103 case urlutil .IsGitURL (specifiedContext ):
105104 tempDir , relDockerfile , err = getContextFromGitURL (specifiedContext , * dockerfileName )
106105 case urlutil .IsURL (specifiedContext ):
107- context , relDockerfile , err = getContextFromURL (progBuff , specifiedContext , * dockerfileName )
106+ buildCtx , relDockerfile , err = getContextFromURL (progBuff , specifiedContext , * dockerfileName )
108107 default :
109108 contextDir , relDockerfile , err = getContextFromLocalDir (specifiedContext , * dockerfileName )
110109 }
@@ -121,7 +120,7 @@ func (cli *DockerCli) Build(args ...string) error {
121120 contextDir = tempDir
122121 }
123122
124- if context == nil {
123+ if buildCtx == nil {
125124 // And canonicalize dockerfile name to a platform-independent one
126125 relDockerfile , err = archive .CanonicalTarNameForPath (relDockerfile )
127126 if err != nil {
@@ -159,7 +158,7 @@ func (cli *DockerCli) Build(args ...string) error {
159158 includes = append (includes , ".dockerignore" , relDockerfile )
160159 }
161160
162- context , err = archive .TarWithOptions (contextDir , & archive.TarOptions {
161+ buildCtx , err = archive .TarWithOptions (contextDir , & archive.TarOptions {
163162 Compression : archive .Uncompressed ,
164163 ExcludePatterns : excludes ,
165164 IncludeFiles : includes ,
@@ -169,17 +168,19 @@ func (cli *DockerCli) Build(args ...string) error {
169168 }
170169 }
171170
171+ ctx := context .Background ()
172+
172173 var resolvedTags []* resolvedTag
173174 if isTrusted () {
174175 // Wrap the tar archive to replace the Dockerfile entry with the rewritten
175176 // Dockerfile which uses trusted pulls.
176- context = replaceDockerfileTarWrapper (context , relDockerfile , cli .trustedReference , & resolvedTags )
177+ buildCtx = replaceDockerfileTarWrapper (ctx , buildCtx , relDockerfile , cli .trustedReference , & resolvedTags )
177178 }
178179
179180 // Setup an upload progress bar
180181 progressOutput := streamformatter .NewStreamFormatter ().NewProgressOutput (progBuff , true )
181182
182- var body io.Reader = progress .NewProgressReader (context , progressOutput , 0 , "" , "Sending build context to Docker daemon" )
183+ var body io.Reader = progress .NewProgressReader (buildCtx , progressOutput , 0 , "" , "Sending build context to Docker daemon" )
183184
184185 var memory int64
185186 if * flMemoryString != "" {
@@ -212,7 +213,6 @@ func (cli *DockerCli) Build(args ...string) error {
212213 }
213214
214215 options := types.ImageBuildOptions {
215- Context : body ,
216216 Memory : memory ,
217217 MemorySwap : memorySwap ,
218218 Tags : flTags .GetAll (),
@@ -221,7 +221,6 @@ func (cli *DockerCli) Build(args ...string) error {
221221 Remove : * rm ,
222222 ForceRemove : * forceRm ,
223223 PullParent : * pull ,
224- IsolationLevel : container .IsolationLevel (* isolation ),
225224 CPUSetCPUs : * flCPUSetCpus ,
226225 CPUSetMems : * flCPUSetMems ,
227226 CPUShares : * flCPUShares ,
@@ -235,7 +234,7 @@ func (cli *DockerCli) Build(args ...string) error {
235234 AuthConfigs : cli .configFile .AuthConfigs ,
236235 }
237236
238- response , err := cli .client .ImageBuild (options )
237+ response , err := cli .client .ImageBuild (ctx , body , options )
239238 if err != nil {
240239 return err
241240 }
@@ -270,7 +269,7 @@ func (cli *DockerCli) Build(args ...string) error {
270269 // Since the build was successful, now we must tag any of the resolved
271270 // images from the above Dockerfile rewrite.
272271 for _ , resolved := range resolvedTags {
273- if err := cli .tagTrusted (resolved .digestRef , resolved .tagRef ); err != nil {
272+ if err := cli .tagTrusted (ctx , resolved .digestRef , resolved .tagRef ); err != nil {
274273 return err
275274 }
276275 }
@@ -557,7 +556,7 @@ type resolvedTag struct {
557556// "FROM <image>" instructions to a digest reference. `translator` is a
558557// function that takes a repository name and tag reference and returns a
559558// trusted digest reference.
560- func rewriteDockerfileFrom (dockerfile io.Reader , translator translatorFunc ) (newDockerfile []byte , resolvedTags []* resolvedTag , err error ) {
559+ func rewriteDockerfileFrom (ctx context. Context , dockerfile io.Reader , translator translatorFunc ) (newDockerfile []byte , resolvedTags []* resolvedTag , err error ) {
561560 scanner := bufio .NewScanner (dockerfile )
562561 buf := bytes .NewBuffer (nil )
563562
@@ -574,7 +573,7 @@ func rewriteDockerfileFrom(dockerfile io.Reader, translator translatorFunc) (new
574573 }
575574 ref = reference .WithDefaultTag (ref )
576575 if ref , ok := ref .(reference.NamedTagged ); ok && isTrusted () {
577- trustedRef , err := translator (ref )
576+ trustedRef , err := translator (ctx , ref )
578577 if err != nil {
579578 return nil , nil , err
580579 }
@@ -600,7 +599,7 @@ func rewriteDockerfileFrom(dockerfile io.Reader, translator translatorFunc) (new
600599// replaces the entry with the given Dockerfile name with the contents of the
601600// new Dockerfile. Returns a new tar archive stream with the replaced
602601// Dockerfile.
603- func replaceDockerfileTarWrapper (inputTarStream io.ReadCloser , dockerfileName string , translator translatorFunc , resolvedTags * []* resolvedTag ) io.ReadCloser {
602+ func replaceDockerfileTarWrapper (ctx context. Context , inputTarStream io.ReadCloser , dockerfileName string , translator translatorFunc , resolvedTags * []* resolvedTag ) io.ReadCloser {
604603 pipeReader , pipeWriter := io .Pipe ()
605604 go func () {
606605 tarReader := tar .NewReader (inputTarStream )
@@ -627,7 +626,7 @@ func replaceDockerfileTarWrapper(inputTarStream io.ReadCloser, dockerfileName st
627626 // generated from a directory on the local filesystem, the
628627 // Dockerfile will only appear once in the archive.
629628 var newDockerfile []byte
630- newDockerfile , * resolvedTags , err = rewriteDockerfileFrom (content , translator )
629+ newDockerfile , * resolvedTags , err = rewriteDockerfileFrom (ctx , content , translator )
631630 if err != nil {
632631 pipeWriter .CloseWithError (err )
633632 return
0 commit comments