Skip to content

Commit

Permalink
Merge pull request #9973 from duglin/Issue9880
Browse files Browse the repository at this point in the history
Make sure that ADD/COPY still populate the cache even if they don't use it
  • Loading branch information
LK4D4 committed Jan 13, 2015
2 parents eaeaf0d + 6f20b95 commit 99a15ec
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 21 deletions.
34 changes: 13 additions & 21 deletions builder/internals.go
Original file line number Diff line number Diff line change
Expand Up @@ -308,22 +308,20 @@ func calcCopyInfo(b *Builder, cmdName string, cInfos *[]*copyInfo, origPath stri
ci.destPath = ci.destPath + filename
}

// Calc the checksum, only if we're using the cache
if b.UtilizeCache {
r, err := archive.Tar(tmpFileName, archive.Uncompressed)
if err != nil {
return err
}
tarSum, err := tarsum.NewTarSum(r, true, tarsum.Version0)
if err != nil {
return err
}
if _, err := io.Copy(ioutil.Discard, tarSum); err != nil {
return err
}
ci.hash = tarSum.Sum(nil)
r.Close()
// Calc the checksum, even if we're using the cache
r, err := archive.Tar(tmpFileName, archive.Uncompressed)
if err != nil {
return err
}
tarSum, err := tarsum.NewTarSum(r, true, tarsum.Version0)
if err != nil {
return err
}
if _, err := io.Copy(ioutil.Discard, tarSum); err != nil {
return err
}
ci.hash = tarSum.Sum(nil)
r.Close()

return nil
}
Expand Down Expand Up @@ -358,12 +356,6 @@ func calcCopyInfo(b *Builder, cmdName string, cInfos *[]*copyInfo, origPath stri
ci.decompress = allowDecompression
*cInfos = append(*cInfos, &ci)

// If not using cache don't need to do anything else.
// If we are using a cache then calc the hash for the src file/dir
if !b.UtilizeCache {
return nil
}

// Deal with the single file case
if !fi.IsDir() {
// This will match first file in sums of the archive
Expand Down
40 changes: 40 additions & 0 deletions integration-cli/docker_cli_build_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2302,6 +2302,46 @@ func TestBuildWithoutCache(t *testing.T) {
logDone("build - without cache")
}

func TestBuildConditionalCache(t *testing.T) {
name := "testbuildconditionalcache"
name2 := "testbuildconditionalcache2"
defer deleteImages(name, name2)

dockerfile := `
FROM busybox
ADD foo /tmp/`
ctx, err := fakeContext(dockerfile, map[string]string{
"foo": "hello",
})

id1, err := buildImageFromContext(name, ctx, true)
if err != nil {
t.Fatalf("Error building #1: %s", err)
}

if err := ctx.Add("foo", "bye"); err != nil {
t.Fatalf("Error modifying foo: %s", err)
}

id2, err := buildImageFromContext(name, ctx, false)
if err != nil {
t.Fatalf("Error building #2: %s", err)
}
if id2 == id1 {
t.Fatal("Should not have used the cache")
}

id3, err := buildImageFromContext(name, ctx, true)
if err != nil {
t.Fatalf("Error building #3: %s", err)
}
if id3 != id2 {
t.Fatal("Should have used the cache")
}

logDone("build - conditional cache")
}

func TestBuildADDLocalFileWithCache(t *testing.T) {
name := "testbuildaddlocalfilewithcache"
name2 := "testbuildaddlocalfilewithcache2"
Expand Down

0 comments on commit 99a15ec

Please sign in to comment.