From 03bbcfa08d7f0ff87eea4ddcfa9d9cbcc746cce8 Mon Sep 17 00:00:00 2001 From: Alfredo Deza Date: Mon, 20 Jul 2020 15:53:45 -0400 Subject: [PATCH] cataloger: add ability to recurse with doublestar Signed-off-by: Alfredo Deza --- imgbom/scope/resolvers/directory_resolver.go | 4 ++-- .../scope/resolvers/directory_resolver_test.go | 17 +++++++++++++++++ .../image-symlinks/nested/nested/file-3.txt | 1 + 3 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 imgbom/scope/resolvers/test-fixtures/image-symlinks/nested/nested/file-3.txt diff --git a/imgbom/scope/resolvers/directory_resolver.go b/imgbom/scope/resolvers/directory_resolver.go index 32ddfd0bb..7d01f1122 100644 --- a/imgbom/scope/resolvers/directory_resolver.go +++ b/imgbom/scope/resolvers/directory_resolver.go @@ -5,10 +5,10 @@ import ( "io/ioutil" "os" "path" - "path/filepath" "github.com/anchore/imgbom/internal/log" "github.com/anchore/stereoscope/pkg/file" + "github.com/bmatcuk/doublestar" ) type DirectoryResolver struct { @@ -51,7 +51,7 @@ func (s DirectoryResolver) FilesByGlob(patterns ...string) ([]file.Reference, er for _, pattern := range patterns { pathPattern := path.Join(s.Path, pattern) - matches, err := filepath.Glob(pathPattern) + matches, err := doublestar.Glob(pathPattern) if err != nil { return result, err } diff --git a/imgbom/scope/resolvers/directory_resolver_test.go b/imgbom/scope/resolvers/directory_resolver_test.go index 1825e87c6..c70f8a4ff 100644 --- a/imgbom/scope/resolvers/directory_resolver_test.go +++ b/imgbom/scope/resolvers/directory_resolver_test.go @@ -138,6 +138,7 @@ func TestDirectoryResolver_FilesByGlobMultiple(t *testing.T) { t.Run("finds multiple matching files", func(t *testing.T) { resolver := DirectoryResolver{"test-fixtures"} refs, err := resolver.FilesByGlob("image-symlinks/file*") + if err != nil { t.Fatalf("could not use resolver: %+v, %+v", err, refs) } @@ -149,6 +150,22 @@ func TestDirectoryResolver_FilesByGlobMultiple(t *testing.T) { }) } +func TestDirectoryResolver_FilesByGlobRecursive(t *testing.T) { + t.Run("finds multiple matching files", func(t *testing.T) { + resolver := DirectoryResolver{"test-fixtures"} + refs, err := resolver.FilesByGlob("**/*.txt") + + if err != nil { + t.Fatalf("could not use resolver: %+v, %+v", err, refs) + } + + if len(refs) != 4 { + t.Errorf("unexpected number of refs: %d != 4", len(refs)) + } + + }) +} + func TestDirectoryResolver_FilesByGlobSingle(t *testing.T) { t.Run("finds multiple matching files", func(t *testing.T) { resolver := DirectoryResolver{"test-fixtures"} diff --git a/imgbom/scope/resolvers/test-fixtures/image-symlinks/nested/nested/file-3.txt b/imgbom/scope/resolvers/test-fixtures/image-symlinks/nested/nested/file-3.txt new file mode 100644 index 000000000..dc43ed866 --- /dev/null +++ b/imgbom/scope/resolvers/test-fixtures/image-symlinks/nested/nested/file-3.txt @@ -0,0 +1 @@ +file 3