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 }