From fb5c0827a34daf6d602fa5a8d369e70c1f315eac Mon Sep 17 00:00:00 2001 From: Alexandr Morozov Date: Fri, 18 Jul 2014 09:35:54 +0400 Subject: [PATCH] Skip whole dir dockerignoring with warning Fixes #7093 Docker-DCO-1.1-Signed-off-by: Alexandr Morozov (github: LK4D4) Upstream-commit: 7d97a5f4760da388c22a5a29ed95888b89a23d57 Component: engine --- components/engine/archive/archive.go | 4 ++++ .../integration-cli/docker_cli_build_test.go | 23 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/components/engine/archive/archive.go b/components/engine/archive/archive.go index bf6e0b7797..3de3b09a25 100644 --- a/components/engine/archive/archive.go +++ b/components/engine/archive/archive.go @@ -347,6 +347,10 @@ func TarWithOptions(srcPath string, options *TarOptions) (io.ReadCloser, error) return err } if matched { + if filepath.Clean(relFilePath) == "." { + utils.Errorf("Can't exclude whole path, excluding pattern: %s", exclude) + continue + } utils.Debugf("Skipping excluded path: %s", relFilePath) if f.IsDir() { return filepath.SkipDir diff --git a/components/engine/integration-cli/docker_cli_build_test.go b/components/engine/integration-cli/docker_cli_build_test.go index 64264cd813..d3d01d43e8 100644 --- a/components/engine/integration-cli/docker_cli_build_test.go +++ b/components/engine/integration-cli/docker_cli_build_test.go @@ -1565,6 +1565,29 @@ func TestDockerignoringDockerfile(t *testing.T) { logDone("build - test .dockerignore of Dockerfile") } +func TestDockerignoringWholeDir(t *testing.T) { + name := "testbuilddockerignorewholedir" + defer deleteImages(name) + dockerfile := ` + FROM busybox + COPY . / + RUN [[ ! -e /.gitignore ]] + RUN [[ -f /Makefile ]]` + ctx, err := fakeContext(dockerfile, map[string]string{ + "Dockerfile": "FROM scratch", + "Makefile": "all:", + ".dockerignore": ".*\n", + }) + defer ctx.Close() + if err != nil { + t.Fatal(err) + } + if _, err = buildImageFromContext(name, ctx, true); err != nil { + t.Fatal(err) + } + logDone("build - test .dockerignore whole dir with .*") +} + func TestBuildLineBreak(t *testing.T) { name := "testbuildlinebreak" defer deleteImages(name)