Skip to content
This repository has been archived by the owner on Oct 13, 2023. It is now read-only.

Commit

Permalink
Merge pull request #89 from tonistiigi/fix-add-remote
Browse files Browse the repository at this point in the history
[17.06] build: fix add from remote url
  • Loading branch information
andrewhsu authored Jul 12, 2017
2 parents cb9b544 + d0546cf commit 2e99eed
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 4 deletions.
11 changes: 7 additions & 4 deletions components/engine/builder/dockerfile/copy.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,10 @@ type pathCache interface {
// copyInfo is a data object which stores the metadata about each source file in
// a copyInstruction
type copyInfo struct {
root string
path string
hash string
root string
path string
hash string
noDecompress bool
}

func newCopyInfoFromSource(source builder.Source, path string, hash string) copyInfo {
Expand Down Expand Up @@ -118,7 +119,9 @@ func (o *copier) getCopyInfoForSourcePath(orig string) ([]copyInfo, error) {
o.tmpPaths = append(o.tmpPaths, remote.Root())

hash, err := remote.Hash(path)
return newCopyInfos(newCopyInfoFromSource(remote, path, hash)), err
ci := newCopyInfoFromSource(remote, path, hash)
ci.noDecompress = true // data from http shouldn't be extracted even on ADD
return newCopyInfos(ci), err
}

// Cleanup removes any temporary directories created as part of downloading
Expand Down
5 changes: 5 additions & 0 deletions components/engine/builder/dockerfile/dispatchers.go
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,11 @@ func add(req dispatchRequest) error {
return err
}
copyInstruction.allowLocalDecompression = true
for _, ci := range copyInstruction.infos {
if ci.noDecompress {
copyInstruction.allowLocalDecompression = false
}
}

return req.builder.performCopy(req.state, copyInstruction)
}
Expand Down
45 changes: 45 additions & 0 deletions components/engine/integration-cli/docker_api_build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"archive/tar"
"bytes"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"regexp"
Expand Down Expand Up @@ -322,6 +323,50 @@ func (s *DockerSuite) TestBuildOnBuildCache(c *check.C) {
assert.Equal(c, parentID, image.Parent)
}

func (s *DockerSuite) TestBuildAddRemoteNoDecompress(c *check.C) {
buffer := new(bytes.Buffer)
tw := tar.NewWriter(buffer)
dt := []byte("contents")
err := tw.WriteHeader(&tar.Header{
Name: "foo",
Size: int64(len(dt)),
Mode: 0600,
Typeflag: tar.TypeReg,
})
require.NoError(c, err)
_, err = tw.Write(dt)
require.NoError(c, err)
err = tw.Close()
require.NoError(c, err)

server := fakestorage.New(c, "", fakecontext.WithBinaryFiles(map[string]*bytes.Buffer{
"test.tar": buffer,
}))
defer server.Close()

dockerfile := fmt.Sprintf(`
FROM busybox
ADD %s/test.tar /
RUN [ -f test.tar ]
`, server.URL())

ctx := fakecontext.New(c, "",
fakecontext.WithDockerfile(dockerfile),
)
defer ctx.Close()

res, body, err := request.Post(
"/build",
request.RawContent(ctx.AsTarReader(c)),
request.ContentType("application/x-tar"))
require.NoError(c, err)
assert.Equal(c, http.StatusOK, res.StatusCode)

out, err := testutil.ReadBody(body)
require.NoError(c, err)
assert.Contains(c, string(out), "Successfully built")
}

type buildLine struct {
Stream string
Aux struct {
Expand Down

0 comments on commit 2e99eed

Please sign in to comment.