From 82ea6ed2bc33ac1ec2ad2bd8d4a098031dd77095 Mon Sep 17 00:00:00 2001 From: Doug Davis Date: Fri, 29 May 2015 19:38:56 -0700 Subject: [PATCH] Allow .dockerignore to ignore everything Change CLI error msg because it was too specific and didn't make sense when there were errors not related to inaccessible files. Removed some log.Error() calls since they're not really errors we should log. Returning the error will be enough. Closes: #13417 Signed-off-by: Doug Davis --- api/client/build.go | 2 +- integration-cli/docker_cli_build_test.go | 51 ++++++++++++++++++++---- pkg/fileutils/fileutils.go | 3 +- 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/api/client/build.go b/api/client/build.go index b09597152a..23424c4c0f 100644 --- a/api/client/build.go +++ b/api/client/build.go @@ -175,7 +175,7 @@ func (cli *DockerCli) CmdBuild(args ...string) error { } if err := utils.ValidateContextDirectory(root, excludes); err != nil { - return fmt.Errorf("Error checking context is accessible: '%s'. Please check permissions and try again.", err) + return fmt.Errorf("Error checking context: '%s'.", err) } options := &archive.TarOptions{ Compression: archive.Uncompressed, diff --git a/integration-cli/docker_cli_build_test.go b/integration-cli/docker_cli_build_test.go index 7be8c862c3..c39eaab065 100644 --- a/integration-cli/docker_cli_build_test.go +++ b/integration-cli/docker_cli_build_test.go @@ -1722,8 +1722,8 @@ func (s *DockerSuite) TestBuildWithInaccessibleFilesInContext(c *check.C) { c.Fatalf("output should've contained the string: no permission to read from but contained: %s", out) } - if !strings.Contains(out, "Error checking context is accessible") { - c.Fatalf("output should've contained the string: Error checking context is accessible") + if !strings.Contains(out, "Error checking context") { + c.Fatalf("output should've contained the string: Error checking context") } } { @@ -1759,8 +1759,8 @@ func (s *DockerSuite) TestBuildWithInaccessibleFilesInContext(c *check.C) { c.Fatalf("output should've contained the string: can't access %s", out) } - if !strings.Contains(out, "Error checking context is accessible") { - c.Fatalf("output should've contained the string: Error checking context is accessible") + if !strings.Contains(out, "Error checking context") { + c.Fatalf("output should've contained the string: Error checking context\ngot:%s", out) } } @@ -3676,13 +3676,50 @@ func (s *DockerSuite) TestBuildDockerignoringWholeDir(c *check.C) { ".gitignore": "", ".dockerignore": ".*\n", }) + c.Assert(err, check.IsNil) defer ctx.Close() - if err != nil { - c.Fatal(err) - } if _, err = buildImageFromContext(name, ctx, true); err != nil { c.Fatal(err) } + + c.Assert(ctx.Add(".dockerfile", "*"), check.IsNil) + if _, err = buildImageFromContext(name, ctx, true); err != nil { + c.Fatal(err) + } + + c.Assert(ctx.Add(".dockerfile", "."), check.IsNil) + if _, err = buildImageFromContext(name, ctx, true); err != nil { + c.Fatal(err) + } + + c.Assert(ctx.Add(".dockerfile", "?"), check.IsNil) + if _, err = buildImageFromContext(name, ctx, true); err != nil { + c.Fatal(err) + } +} + +func (s *DockerSuite) TestBuildDockerignoringBadExclusion(c *check.C) { + name := "testbuilddockerignorewholedir" + dockerfile := ` + FROM busybox + COPY . / + RUN [[ ! -e /.gitignore ]] + RUN [[ -f /Makefile ]]` + ctx, err := fakeContext(dockerfile, map[string]string{ + "Dockerfile": "FROM scratch", + "Makefile": "all:", + ".gitignore": "", + ".dockerignore": "!\n", + }) + c.Assert(err, check.IsNil) + defer ctx.Close() + if _, err = buildImageFromContext(name, ctx, true); err == nil { + c.Fatalf("Build was supposed to fail but didn't") + } + + if err.Error() != "failed to build the image: Error checking context: 'Illegal exclusion pattern: !'.\n" { + c.Fatalf("Incorrect output, got:%q", err.Error()) + } } func (s *DockerSuite) TestBuildLineBreak(c *check.C) { diff --git a/pkg/fileutils/fileutils.go b/pkg/fileutils/fileutils.go index fdafb53c7f..633fbefc35 100644 --- a/pkg/fileutils/fileutils.go +++ b/pkg/fileutils/fileutils.go @@ -40,7 +40,6 @@ func CleanPatterns(patterns []string) ([]string, [][]string, bool, error) { } if Exclusion(pattern) { if len(pattern) == 1 { - logrus.Errorf("Illegal exclusion pattern: %s", pattern) return nil, nil, false, errors.New("Illegal exclusion pattern: !") } exceptions = true @@ -94,7 +93,6 @@ func OptimizedMatches(file string, patterns []string, patDirs [][]string) (bool, match, err := filepath.Match(pattern, file) if err != nil { - logrus.Errorf("Error matching: %s (pattern: %s)", file, pattern) return false, err } @@ -114,6 +112,7 @@ func OptimizedMatches(file string, patterns []string, patDirs [][]string) (bool, if matched { logrus.Debugf("Skipping excluded path: %s", file) } + return matched, nil }