replace dockerfile/dockerignore with patternmatcher/ignorefile

The BuildKit dockerignore package was migrated to the patternmatcher
repository / module. This patch updates our uses of the BuildKit package
with its new location.

A small local change was made to keep the format of the existing error message,
because the "ignorefile" package is slightly more agnostic in that respect
and doesn't include ".dockerignore" in the error message.

Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
(cherry picked from commit 5bff12354d)
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
This commit is contained in:
Sebastiaan van Stijn 2023-08-23 00:05:32 +02:00
parent bf632329d2
commit 710dd00e95
No known key found for this signature in database
GPG Key ID: 76698F39D527CE8C
3 changed files with 25 additions and 12 deletions

View File

@ -1,11 +1,12 @@
package build package build
import ( import (
"fmt"
"os" "os"
"path/filepath" "path/filepath"
"github.com/moby/buildkit/frontend/dockerfile/dockerignore"
"github.com/moby/patternmatcher" "github.com/moby/patternmatcher"
"github.com/moby/patternmatcher/ignorefile"
) )
// ReadDockerignore reads the .dockerignore file in the context directory and // ReadDockerignore reads the .dockerignore file in the context directory and
@ -22,7 +23,11 @@ func ReadDockerignore(contextDir string) ([]string, error) {
} }
defer f.Close() defer f.Close()
return dockerignore.ReadAll(f) patterns, err := ignorefile.ReadAll(f)
if err != nil {
return nil, fmt.Errorf("error reading .dockerignore: %w", err)
}
return patterns, nil
} }
// TrimBuildFilesFromExcludes removes the named Dockerfile and .dockerignore from // TrimBuildFilesFromExcludes removes the named Dockerfile and .dockerignore from

View File

@ -1,4 +1,4 @@
package dockerignore package ignorefile
import ( import (
"bufio" "bufio"
@ -6,23 +6,31 @@ import (
"io" "io"
"path/filepath" "path/filepath"
"strings" "strings"
"github.com/pkg/errors"
) )
// ReadAll reads a .dockerignore file and returns the list of file patterns // ReadAll reads an ignore file from a reader and returns the list of file
// to ignore. Note this will trim whitespace from each line as well // patterns to ignore, applying the following rules:
// as use GO's "clean" func to get the shortest/cleanest path for each. //
// - An UTF8 BOM header (if present) is stripped.
// - Lines starting with "#" are considered comments and are skipped.
//
// For remaining lines:
//
// - Leading and trailing whitespace is removed from each ignore pattern.
// - It uses [filepath.Clean] to get the shortest/cleanest path for
// ignore patterns.
// - Leading forward-slashes ("/") are removed from ignore patterns,
// so "/some/path" and "some/path" are considered equivalent.
func ReadAll(reader io.Reader) ([]string, error) { func ReadAll(reader io.Reader) ([]string, error) {
if reader == nil { if reader == nil {
return nil, nil return nil, nil
} }
scanner := bufio.NewScanner(reader)
var excludes []string var excludes []string
currentLine := 0 currentLine := 0
utf8bom := []byte{0xEF, 0xBB, 0xBF} utf8bom := []byte{0xEF, 0xBB, 0xBF}
scanner := bufio.NewScanner(reader)
for scanner.Scan() { for scanner.Scan() {
scannedBytes := scanner.Bytes() scannedBytes := scanner.Bytes()
// We trim UTF8 BOM // We trim UTF8 BOM
@ -59,7 +67,7 @@ func ReadAll(reader io.Reader) ([]string, error) {
excludes = append(excludes, pattern) excludes = append(excludes, pattern)
} }
if err := scanner.Err(); err != nil { if err := scanner.Err(); err != nil {
return nil, errors.Wrap(err, "error reading .dockerignore") return nil, err
} }
return excludes, nil return excludes, nil
} }

2
vendor/modules.txt vendored
View File

@ -161,11 +161,11 @@ github.com/miekg/pkcs11
github.com/mitchellh/mapstructure github.com/mitchellh/mapstructure
# github.com/moby/buildkit v0.11.6 # github.com/moby/buildkit v0.11.6
## explicit; go 1.18 ## explicit; go 1.18
github.com/moby/buildkit/frontend/dockerfile/dockerignore
github.com/moby/buildkit/util/appcontext github.com/moby/buildkit/util/appcontext
# github.com/moby/patternmatcher v0.6.0 # github.com/moby/patternmatcher v0.6.0
## explicit; go 1.19 ## explicit; go 1.19
github.com/moby/patternmatcher github.com/moby/patternmatcher
github.com/moby/patternmatcher/ignorefile
# github.com/moby/swarmkit/v2 v2.0.0-20230531205928-01bb7a41396b # github.com/moby/swarmkit/v2 v2.0.0-20230531205928-01bb7a41396b
## explicit; go 1.18 ## explicit; go 1.18
github.com/moby/swarmkit/v2/api github.com/moby/swarmkit/v2/api