Merge pull request #12031 from jlhawn/build_cache_ignore_mtime
Make build cache ignore mtime
This commit is contained in:
commit
90259fed2e
4 changed files with 13 additions and 29 deletions
|
@ -50,7 +50,7 @@ func (b *Builder) readContext(context io.Reader) error {
|
|||
return err
|
||||
}
|
||||
|
||||
if b.context, err = tarsum.NewTarSum(decompressedStream, true, tarsum.Version0); err != nil {
|
||||
if b.context, err = tarsum.NewTarSum(decompressedStream, true, tarsum.Version1); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
|
@ -345,7 +345,7 @@ func calcCopyInfo(b *Builder, cmdName string, cInfos *[]*copyInfo, origPath stri
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
tarSum, err := tarsum.NewTarSum(r, true, tarsum.Version0)
|
||||
tarSum, err := tarsum.NewTarSum(r, true, tarsum.Version1)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -103,7 +103,8 @@ a little more examination and explanation.
|
|||
being put into the image are examined. Specifically, a checksum is done
|
||||
of the file(s) and then that checksum is used during the cache lookup.
|
||||
If anything has changed in the file(s), including its metadata,
|
||||
then the cache is invalidated.
|
||||
then the cache is invalidated. The last-modified and last-accessed times of the
|
||||
file(s) are not considered in these checksums.
|
||||
|
||||
* Aside from the `ADD` and `COPY` commands cache checking will not look at the
|
||||
files in the container to determine a cache match. For example, when processing
|
||||
|
|
|
@ -519,8 +519,8 @@ All new files and directories are created with a UID and GID of 0.
|
|||
In the case where `<src>` is a remote file URL, the destination will
|
||||
have permissions of 600. If the remote file being retrieved has an HTTP
|
||||
`Last-Modified` header, the timestamp from that header will be used
|
||||
to set the `mtime` on the destination file. Then, like any other file
|
||||
processed during an `ADD`, `mtime` will be included in the determination
|
||||
to set the `mtime` on the destination file. However, like any other file
|
||||
processed during an `ADD`, `mtime` will not be included in the determination
|
||||
of whether or not the file has changed and the cache should be updated.
|
||||
|
||||
> **Note**:
|
||||
|
|
|
@ -2768,7 +2768,6 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithCache(c *check.C) {
|
|||
name2 := name + "2"
|
||||
name3 := name + "3"
|
||||
name4 := name + "4"
|
||||
name5 := name + "5"
|
||||
dockerfile := `
|
||||
FROM scratch
|
||||
MAINTAINER dockerio
|
||||
|
@ -2806,7 +2805,8 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithCache(c *check.C) {
|
|||
if id2 == id3 {
|
||||
c.Fatal("The cache should have been invalided but hasn't.")
|
||||
}
|
||||
// Check that changing file to same content invalidate cache of "ADD ."
|
||||
// Check that changing file to same content with different mtime does not
|
||||
// invalidate cache of "ADD ."
|
||||
time.Sleep(1 * time.Second) // wait second because of mtime precision
|
||||
if err := ctx.Add("foo", "hello1"); err != nil {
|
||||
c.Fatal(err)
|
||||
|
@ -2815,14 +2815,7 @@ func (s *DockerSuite) TestBuildAddCurrentDirWithCache(c *check.C) {
|
|||
if err != nil {
|
||||
c.Fatal(err)
|
||||
}
|
||||
if id3 == id4 {
|
||||
c.Fatal("The cache should have been invalided but hasn't.")
|
||||
}
|
||||
id5, err := buildImageFromContext(name5, ctx, true)
|
||||
if err != nil {
|
||||
c.Fatal(err)
|
||||
}
|
||||
if id4 != id5 {
|
||||
if id3 != id4 {
|
||||
c.Fatal("The cache should have been used but hasn't.")
|
||||
}
|
||||
}
|
||||
|
@ -2921,7 +2914,6 @@ func (s *DockerSuite) TestBuildAddRemoteFileMTime(c *check.C) {
|
|||
name := "testbuildaddremotefilemtime"
|
||||
name2 := name + "2"
|
||||
name3 := name + "3"
|
||||
name4 := name + "4"
|
||||
|
||||
files := map[string]string{"baz": "hello"}
|
||||
server, err := fakeStorage(files)
|
||||
|
@ -2951,8 +2943,8 @@ func (s *DockerSuite) TestBuildAddRemoteFileMTime(c *check.C) {
|
|||
c.Fatal("The cache should have been used but wasn't - #1")
|
||||
}
|
||||
|
||||
// Now create a different server withsame contents (causes different mtim)
|
||||
// This time the cache should not be used
|
||||
// Now create a different server with same contents (causes different mtime)
|
||||
// The cache should still be used
|
||||
|
||||
// allow some time for clock to pass as mtime precision is only 1s
|
||||
time.Sleep(2 * time.Second)
|
||||
|
@ -2974,17 +2966,8 @@ func (s *DockerSuite) TestBuildAddRemoteFileMTime(c *check.C) {
|
|||
if err != nil {
|
||||
c.Fatal(err)
|
||||
}
|
||||
if id1 == id3 {
|
||||
c.Fatal("The cache should not have been used but was")
|
||||
}
|
||||
|
||||
// And for good measure do it again and make sure cache is used this time
|
||||
id4, err := buildImageFromContext(name4, ctx2, true)
|
||||
if err != nil {
|
||||
c.Fatal(err)
|
||||
}
|
||||
if id3 != id4 {
|
||||
c.Fatal("The cache should have been used but wasn't - #2")
|
||||
if id1 != id3 {
|
||||
c.Fatal("The cache should have been used but wasn't")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue