зеркало из https://github.com/microsoft/docker.git
Make sure COPY/ADD on dirs doesn't grab too many files
Add check for / first - per LK4D4's comment. Add a comment to explain why we're adding a / Signed-off-by: Doug Davis <dug@us.ibm.com>
This commit is contained in:
Родитель
7e461915a6
Коммит
cd329d062b
|
@ -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)
|
||||
|
|
Загрузка…
Ссылка в новой задаче