mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #9973 from duglin/Issue9880
Make sure that ADD/COPY still populate the cache even if they don't use it
This commit is contained in:
commit
99a15ec8bd
2 changed files with 53 additions and 21 deletions
|
@ -308,22 +308,20 @@ func calcCopyInfo(b *Builder, cmdName string, cInfos *[]*copyInfo, origPath stri
|
||||||
ci.destPath = ci.destPath + filename
|
ci.destPath = ci.destPath + filename
|
||||||
}
|
}
|
||||||
|
|
||||||
// Calc the checksum, only if we're using the cache
|
// Calc the checksum, even if we're using the cache
|
||||||
if b.UtilizeCache {
|
r, err := archive.Tar(tmpFileName, archive.Uncompressed)
|
||||||
r, err := archive.Tar(tmpFileName, archive.Uncompressed)
|
if err != nil {
|
||||||
if err != nil {
|
return err
|
||||||
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()
|
|
||||||
}
|
}
|
||||||
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -358,12 +356,6 @@ func calcCopyInfo(b *Builder, cmdName string, cInfos *[]*copyInfo, origPath stri
|
||||||
ci.decompress = allowDecompression
|
ci.decompress = allowDecompression
|
||||||
*cInfos = append(*cInfos, &ci)
|
*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
|
// Deal with the single file case
|
||||||
if !fi.IsDir() {
|
if !fi.IsDir() {
|
||||||
// This will match first file in sums of the archive
|
// This will match first file in sums of the archive
|
||||||
|
|
|
@ -2302,6 +2302,46 @@ func TestBuildWithoutCache(t *testing.T) {
|
||||||
logDone("build - without cache")
|
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) {
|
func TestBuildADDLocalFileWithCache(t *testing.T) {
|
||||||
name := "testbuildaddlocalfilewithcache"
|
name := "testbuildaddlocalfilewithcache"
|
||||||
name2 := "testbuildaddlocalfilewithcache2"
|
name2 := "testbuildaddlocalfilewithcache2"
|
||||||
|
|
Loading…
Reference in a new issue