mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	Merge pull request #8186 from duglin/ErrInCopyCache
Make sure COPY/ADD on dirs doesn't grab too many files
This commit is contained in:
		
						commit
						81a643211b
					
				
					 2 changed files with 40 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -293,9 +293,17 @@ func calcCopyInfo(b *Builder, cmdName string, ci *copyInfo, allowRemote bool, al
 | 
			
		|||
			return err
 | 
			
		||||
		} else if fi.IsDir() {
 | 
			
		||||
			var subfiles []string
 | 
			
		||||
			absOrigPath := path.Join(b.contextPath, ci.origPath)
 | 
			
		||||
 | 
			
		||||
			// Add a trailing / to make sure we only
 | 
			
		||||
			// pick up nested files under the dir and
 | 
			
		||||
			// not sibling files of the dir that just
 | 
			
		||||
			// happen to start with the same chars
 | 
			
		||||
			if !strings.HasSuffix(absOrigPath, "/") {
 | 
			
		||||
				absOrigPath += "/"
 | 
			
		||||
			}
 | 
			
		||||
			for _, fileInfo := range sums {
 | 
			
		||||
				absFile := path.Join(b.contextPath, fileInfo.Name())
 | 
			
		||||
				absOrigPath := path.Join(b.contextPath, ci.origPath)
 | 
			
		||||
				if strings.HasPrefix(absFile, absOrigPath) {
 | 
			
		||||
					subfiles = append(subfiles, fileInfo.Sum())
 | 
			
		||||
				}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1175,6 +1175,37 @@ func TestBuildADDLocalFileWithoutCache(t *testing.T) {
 | 
			
		|||
	logDone("build - add local file without cache")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestBuildCopyDirButNotFile(t *testing.T) {
 | 
			
		||||
	name := "testbuildcopydirbutnotfile"
 | 
			
		||||
	defer deleteImages(name)
 | 
			
		||||
	dockerfile := `
 | 
			
		||||
        FROM scratch
 | 
			
		||||
        COPY dir /tmp/`
 | 
			
		||||
	ctx, err := fakeContext(dockerfile, map[string]string{
 | 
			
		||||
		"dir/foo": "hello",
 | 
			
		||||
	})
 | 
			
		||||
	defer ctx.Close()
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	id1, err := buildImageFromContext(name, ctx, true)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	// Check that adding file with similar name doesn't mess with cache
 | 
			
		||||
	if err := ctx.Add("dir_file", "hello2"); err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	id2, err := buildImageFromContext(name, ctx, true)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	if id1 != id2 {
 | 
			
		||||
		t.Fatal("The cache should have been used but wasn't")
 | 
			
		||||
	}
 | 
			
		||||
	logDone("build - add current directory but not file")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestBuildADDCurrentDirWithCache(t *testing.T) {
 | 
			
		||||
	name := "testbuildaddcurrentdirwithcache"
 | 
			
		||||
	defer deleteImages(name)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue