From 1c320a8382edaba5415c8085fd222bdc902d6497 Mon Sep 17 00:00:00 2001 From: Alex Goodman Date: Tue, 6 Oct 2020 11:23:54 -0400 Subject: [PATCH] defer to GenericCataloger instances for pkg catalogers Signed-off-by: Alex Goodman --- syft/cataloger/apkdb/cataloger.go | 31 ++------------ syft/cataloger/bundler/cataloger.go | 39 +++++------------ syft/cataloger/cataloger.go | 18 ++++---- syft/cataloger/common/generic_cataloger.go | 35 +++++++++------- .../common/generic_cataloger_test.go | 7 ++-- syft/cataloger/deb/cataloger.go | 17 ++++++++ .../{dpkg => deb}/parse_dpkg_status.go | 2 +- .../{dpkg => deb}/parse_dpkg_status_test.go | 2 +- .../{dpkg => deb}/test-fixtures/multiple | 0 .../{dpkg => deb}/test-fixtures/single | 0 syft/cataloger/dpkg/cataloger.go | 42 ------------------- syft/cataloger/golang/cataloger.go | 31 ++------------ syft/cataloger/java/cataloger.go | 31 ++------------ syft/cataloger/javascript/cataloger.go | 31 ++------------ syft/cataloger/python/cataloger.go | 31 ++------------ syft/cataloger/rpmdb/cataloger.go | 32 ++------------ 16 files changed, 81 insertions(+), 268 deletions(-) create mode 100644 syft/cataloger/deb/cataloger.go rename syft/cataloger/{dpkg => deb}/parse_dpkg_status.go (99%) rename syft/cataloger/{dpkg => deb}/parse_dpkg_status_test.go (99%) rename syft/cataloger/{dpkg => deb}/test-fixtures/multiple (100%) rename syft/cataloger/{dpkg => deb}/test-fixtures/single (100%) delete mode 100644 syft/cataloger/dpkg/cataloger.go diff --git a/syft/cataloger/apkdb/cataloger.go b/syft/cataloger/apkdb/cataloger.go index 8f33709f6..4511e9d57 100644 --- a/syft/cataloger/apkdb/cataloger.go +++ b/syft/cataloger/apkdb/cataloger.go @@ -4,39 +4,14 @@ Package apkdb provides a concrete Cataloger implementation for Alpine DB files. package apkdb import ( - "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" ) -// Cataloger catalogs pkg.ApkPkg Package Types defined in Alpine DB files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new Alpine DB cataloger object. -func New() *Cataloger { +// NewApkdbCataloger returns a new Alpine DB cataloger object. +func NewApkdbCataloger() *common.GenericCataloger { globParsers := map[string]common.ParserFn{ "**/lib/apk/db/installed": parseApkDB, } - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), - } -} - -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "apkdb-cataloger" -} - -// SelectFiles returns a set of discovered Alpine DB files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all Alpine DB files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) + return common.NewGenericCataloger(nil, globParsers, "apkdb-cataloger") } diff --git a/syft/cataloger/bundler/cataloger.go b/syft/cataloger/bundler/cataloger.go index aabc4ca42..dcaced018 100644 --- a/syft/cataloger/bundler/cataloger.go +++ b/syft/cataloger/bundler/cataloger.go @@ -4,40 +4,23 @@ Package bundler provides a concrete Cataloger implementation for Ruby Gemfile.lo package bundler import ( - "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" ) -// Cataloger catalogs pkg.GemPkg Package Types defined in Bundler Gemfile.lock files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new Bundler cataloger object. -func New() *Cataloger { +// NewGemfileLockCataloger returns a new Bundler cataloger object tailored for parsing index-oriented files (e.g. Gemfile.lock). +func NewGemfileLockCataloger() *common.GenericCataloger { globParsers := map[string]common.ParserFn{ - "**/Gemfile.lock": parseGemfileLockEntries, // valid in a dir context - //"**/specification/*.gemspec": parseGemSpecEntries, // valid in an image context (against installed gems) + "**/Gemfile.lock": parseGemfileLockEntries, } - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), + return common.NewGenericCataloger(nil, globParsers, "ruby-gemfile-cataloger") +} + +// NewGemspecCataloger returns a new Bundler cataloger object tailored for detecting installations of gems (e.g. Gemspec). +func NewGemspecCataloger() *common.GenericCataloger { + globParsers := map[string]common.ParserFn{ + "**/specification/*.gemspec": parseGemspecEntries, } -} -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "bundler-cataloger" -} - -// SelectFiles returns a set of discovered Gemfile.lock files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all Gemfile.lock files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) + return common.NewGenericCataloger(nil, globParsers, "ruby-gemspec-cataloger") } diff --git a/syft/cataloger/cataloger.go b/syft/cataloger/cataloger.go index 098445abb..48c1bc341 100644 --- a/syft/cataloger/cataloger.go +++ b/syft/cataloger/cataloger.go @@ -9,7 +9,7 @@ import ( "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/apkdb" "github.com/anchore/syft/syft/cataloger/bundler" - "github.com/anchore/syft/syft/cataloger/dpkg" + "github.com/anchore/syft/syft/cataloger/deb" "github.com/anchore/syft/syft/cataloger/golang" "github.com/anchore/syft/syft/cataloger/java" "github.com/anchore/syft/syft/cataloger/javascript" @@ -36,13 +36,13 @@ type Cataloger interface { // All returns a slice of all locally defined catalogers (defined in child packages). func All() []Cataloger { return []Cataloger{ - dpkg.New(), - bundler.New(), - python.New(), - rpmdb.New(), - java.New(), - apkdb.New(), - golang.New(), - javascript.New(), + deb.NewDpkgdbCataloger(), + bundler.NewGemfileLockCataloger(), + python.NewPythonCataloger(), + rpmdb.NewRpmdbCataloger(), + java.NewJavaCataloger(), + apkdb.NewApkdbCataloger(), + golang.NewGoModCataloger(), + javascript.NewJavascriptCataloger(), } } diff --git a/syft/cataloger/common/generic_cataloger.go b/syft/cataloger/common/generic_cataloger.go index 69b2a7fef..1255f0794 100644 --- a/syft/cataloger/common/generic_cataloger.go +++ b/syft/cataloger/common/generic_cataloger.go @@ -15,22 +15,29 @@ import ( // GenericCataloger implements the Catalog interface and is responsible for dispatching the proper parser function for // a given path or glob pattern. This is intended to be reusable across many package cataloger types. type GenericCataloger struct { - globParsers map[string]ParserFn - pathParsers map[string]ParserFn - selectedFiles []file.Reference - parsers map[file.Reference]ParserFn + globParsers map[string]ParserFn + pathParsers map[string]ParserFn + selectedFiles []file.Reference + parsers map[file.Reference]ParserFn + upstreamMatcher string } // NewGenericCataloger if provided path-to-parser-function and glob-to-parser-function lookups creates a GenericCataloger -func NewGenericCataloger(pathParsers map[string]ParserFn, globParsers map[string]ParserFn) GenericCataloger { - return GenericCataloger{ - globParsers: globParsers, - pathParsers: pathParsers, - selectedFiles: make([]file.Reference, 0), - parsers: make(map[file.Reference]ParserFn), +func NewGenericCataloger(pathParsers map[string]ParserFn, globParsers map[string]ParserFn, upstreamMatcher string) *GenericCataloger { + return &GenericCataloger{ + globParsers: globParsers, + pathParsers: pathParsers, + selectedFiles: make([]file.Reference, 0), + parsers: make(map[file.Reference]ParserFn), + upstreamMatcher: upstreamMatcher, } } +// Name returns a string that uniquely describes the upstream cataloger that this Generic Cataloger represents. +func (a *GenericCataloger) Name() string { + return a.upstreamMatcher +} + // register pairs a set of file references with a parser function for future cataloging (when the file contents are resolved) func (a *GenericCataloger) register(files []file.Reference, parser ParserFn) { a.selectedFiles = append(a.selectedFiles, files...) @@ -73,7 +80,7 @@ func (a *GenericCataloger) SelectFiles(resolver scope.FileResolver) []file.Refer } // Catalog takes a set of file contents and uses any configured parser functions to resolve and return discovered packages -func (a *GenericCataloger) Catalog(contents map[file.Reference]string, upstreamMatcher string) ([]pkg.Package, error) { +func (a *GenericCataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { defer a.clear() packages := make([]pkg.Package, 0) @@ -81,19 +88,19 @@ func (a *GenericCataloger) Catalog(contents map[file.Reference]string, upstreamM for reference, parser := range a.parsers { content, ok := contents[reference] if !ok { - log.Errorf("cataloger '%s' missing file content: %+v", upstreamMatcher, reference) + log.Errorf("cataloger '%s' missing file content: %+v", a.upstreamMatcher, reference) continue } entries, err := parser(string(reference.Path), strings.NewReader(content)) if err != nil { // TODO: should we fail? or only log? - log.Errorf("cataloger '%s' failed to parse entries (reference=%+v): %+v", upstreamMatcher, reference, err) + log.Errorf("cataloger '%s' failed to parse entries (reference=%+v): %+v", a.upstreamMatcher, reference, err) continue } for _, entry := range entries { - entry.FoundBy = upstreamMatcher + entry.FoundBy = a.upstreamMatcher entry.Source = []file.Reference{reference} packages = append(packages, entry) diff --git a/syft/cataloger/common/generic_cataloger_test.go b/syft/cataloger/common/generic_cataloger_test.go index 849c0e820..57c724f07 100644 --- a/syft/cataloger/common/generic_cataloger_test.go +++ b/syft/cataloger/common/generic_cataloger_test.go @@ -60,9 +60,9 @@ func TestGenericCataloger(t *testing.T) { "/another-path.txt": parser, "/last/path.txt": parser, } - + upstream := "some-other-cataloger" resolver := newTestResolver() - cataloger := NewGenericCataloger(pathParsers, globParsers) + cataloger := NewGenericCataloger(pathParsers, globParsers, upstream) selected := cataloger.SelectFiles(resolver) @@ -79,7 +79,6 @@ func TestGenericCataloger(t *testing.T) { selectionByPath[string(s.Path)] = s } - upstream := "some-other-cataloger" expectedPkgs := make(map[file.Reference]pkg.Package) for path, ref := range selectionByPath { expectedPkgs[ref] = pkg.Package{ @@ -89,7 +88,7 @@ func TestGenericCataloger(t *testing.T) { } } - actualPkgs, err := cataloger.Catalog(resolver.contents, upstream) + actualPkgs, err := cataloger.Catalog(resolver.contents) if err != nil { t.Fatalf("cataloger catalog action failed: %+v", err) } diff --git a/syft/cataloger/deb/cataloger.go b/syft/cataloger/deb/cataloger.go new file mode 100644 index 000000000..b1332c572 --- /dev/null +++ b/syft/cataloger/deb/cataloger.go @@ -0,0 +1,17 @@ +/* +Package dpkg provides a concrete Cataloger implementation for Debian package DB status files. +*/ +package deb + +import ( + "github.com/anchore/syft/syft/cataloger/common" +) + +// NewDpkgdbCataloger returns a new Deb package cataloger object. +func NewDpkgdbCataloger() *common.GenericCataloger { + globParsers := map[string]common.ParserFn{ + "**/var/lib/dpkg/status": parseDpkgStatus, + } + + return common.NewGenericCataloger(nil, globParsers, "dpkgdb-cataloger") +} diff --git a/syft/cataloger/dpkg/parse_dpkg_status.go b/syft/cataloger/deb/parse_dpkg_status.go similarity index 99% rename from syft/cataloger/dpkg/parse_dpkg_status.go rename to syft/cataloger/deb/parse_dpkg_status.go index ded470170..20c3b205d 100644 --- a/syft/cataloger/dpkg/parse_dpkg_status.go +++ b/syft/cataloger/deb/parse_dpkg_status.go @@ -1,4 +1,4 @@ -package dpkg +package deb import ( "bufio" diff --git a/syft/cataloger/dpkg/parse_dpkg_status_test.go b/syft/cataloger/deb/parse_dpkg_status_test.go similarity index 99% rename from syft/cataloger/dpkg/parse_dpkg_status_test.go rename to syft/cataloger/deb/parse_dpkg_status_test.go index 1532650a4..f08e69374 100644 --- a/syft/cataloger/dpkg/parse_dpkg_status_test.go +++ b/syft/cataloger/deb/parse_dpkg_status_test.go @@ -1,4 +1,4 @@ -package dpkg +package deb import ( "bufio" diff --git a/syft/cataloger/dpkg/test-fixtures/multiple b/syft/cataloger/deb/test-fixtures/multiple similarity index 100% rename from syft/cataloger/dpkg/test-fixtures/multiple rename to syft/cataloger/deb/test-fixtures/multiple diff --git a/syft/cataloger/dpkg/test-fixtures/single b/syft/cataloger/deb/test-fixtures/single similarity index 100% rename from syft/cataloger/dpkg/test-fixtures/single rename to syft/cataloger/deb/test-fixtures/single diff --git a/syft/cataloger/dpkg/cataloger.go b/syft/cataloger/dpkg/cataloger.go deleted file mode 100644 index e45ab5aa6..000000000 --- a/syft/cataloger/dpkg/cataloger.go +++ /dev/null @@ -1,42 +0,0 @@ -/* -Package dpkg provides a concrete Cataloger implementation for Debian package DB status files. -*/ -package dpkg - -import ( - "github.com/anchore/stereoscope/pkg/file" - "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" -) - -// Cataloger catalogs pkg.DebPkg Package Types defined in DPKG status files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new Deb package cataloger object. -func New() *Cataloger { - globParsers := map[string]common.ParserFn{ - "**/var/lib/dpkg/status": parseDpkgStatus, - } - - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), - } -} - -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "dpkg-cataloger" -} - -// SelectFiles returns a set of discovered DPKG status files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all DPKG status files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) -} diff --git a/syft/cataloger/golang/cataloger.go b/syft/cataloger/golang/cataloger.go index 8616f4468..268bc1cd0 100644 --- a/syft/cataloger/golang/cataloger.go +++ b/syft/cataloger/golang/cataloger.go @@ -4,39 +4,14 @@ Package golang provides a concrete Cataloger implementation for go.mod files. package golang import ( - "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" ) -// Cataloger catalogs pkg.GoModulePkg Package Types defined in go.mod files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new Go module cataloger object. -func New() *Cataloger { +// NewGoModCataloger returns a new Go module cataloger object. +func NewGoModCataloger() *common.GenericCataloger { globParsers := map[string]common.ParserFn{ "**/go.mod": parseGoMod, } - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), - } -} - -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "go-cataloger" -} - -// SelectFiles returns a set of discovered go.mod files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all go.mod files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) + return common.NewGenericCataloger(nil, globParsers, "go-cataloger") } diff --git a/syft/cataloger/java/cataloger.go b/syft/cataloger/java/cataloger.go index eaa5b19f9..35d776e93 100644 --- a/syft/cataloger/java/cataloger.go +++ b/syft/cataloger/java/cataloger.go @@ -4,40 +4,15 @@ Package java provides a concrete Cataloger implementation for Java archives (jar package java import ( - "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" ) -// Cataloger catalogs pkg.JavaPkg and pkg.JenkinsPluginPkg Package Types defined in java archive files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new Java archive cataloger object. -func New() *Cataloger { +// NewJavaCataloger returns a new Java archive cataloger object. +func NewJavaCataloger() *common.GenericCataloger { globParsers := make(map[string]common.ParserFn) for _, pattern := range archiveFormatGlobs { globParsers[pattern] = parseJavaArchive } - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), - } -} - -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "java-cataloger" -} - -// SelectFiles returns a set of discovered Java archive files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all Java archive files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) + return common.NewGenericCataloger(nil, globParsers, "java-cataloger") } diff --git a/syft/cataloger/javascript/cataloger.go b/syft/cataloger/javascript/cataloger.go index e09bdf485..86aeb1acd 100644 --- a/syft/cataloger/javascript/cataloger.go +++ b/syft/cataloger/javascript/cataloger.go @@ -4,40 +4,15 @@ Package javascript provides a concrete Cataloger implementation for JavaScript e package javascript import ( - "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" ) -// Cataloger catalogs pkg.YarnPkg and pkg.NpmPkg Package Types defined in package-lock.json and yarn.lock files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new JavaScript cataloger object. -func New() *Cataloger { +// NewJavascriptCataloger returns a new JavaScript cataloger object. +func NewJavascriptCataloger() *common.GenericCataloger { globParsers := map[string]common.ParserFn{ "**/package-lock.json": parsePackageLock, "**/yarn.lock": parseYarnLock, } - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), - } -} - -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "javascript-cataloger" -} - -// SelectFiles returns a set of discovered Javascript ecosystem files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all Javascript ecosystem files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) + return common.NewGenericCataloger(nil, globParsers, "javascript-cataloger") } diff --git a/syft/cataloger/python/cataloger.go b/syft/cataloger/python/cataloger.go index 12675b3ed..b4e9f1329 100644 --- a/syft/cataloger/python/cataloger.go +++ b/syft/cataloger/python/cataloger.go @@ -4,19 +4,11 @@ Package python provides a concrete Cataloger implementation for Python ecosystem package python import ( - "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" ) -// Cataloger catalogs pkg.WheelPkg, pkg.EggPkg, and pkg.PythonRequirementsPkg Package Types defined in Python ecosystem files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new Python cataloger object. -func New() *Cataloger { +// NewPythonCataloger returns a new Python cataloger object. +func NewPythonCataloger() *common.GenericCataloger { globParsers := map[string]common.ParserFn{ "**/*egg-info/PKG-INFO": parseEggMetadata, "**/*dist-info/METADATA": parseWheelMetadata, @@ -25,22 +17,5 @@ func New() *Cataloger { "**/setup.py": parseSetup, } - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), - } -} - -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "python-cataloger" -} - -// SelectFiles returns a set of discovered Python ecosystem files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all Python ecosystem files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) + return common.NewGenericCataloger(nil, globParsers, "python-cataloger") } diff --git a/syft/cataloger/rpmdb/cataloger.go b/syft/cataloger/rpmdb/cataloger.go index db9a5e867..7c331dade 100644 --- a/syft/cataloger/rpmdb/cataloger.go +++ b/syft/cataloger/rpmdb/cataloger.go @@ -4,39 +4,13 @@ Package rpmdb provides a concrete Cataloger implementation for RPM "Package" DB package rpmdb import ( - "github.com/anchore/stereoscope/pkg/file" "github.com/anchore/syft/syft/cataloger/common" - "github.com/anchore/syft/syft/pkg" - "github.com/anchore/syft/syft/scope" ) -// Cataloger catalogs pkg.RpmPkg Package Types defined in RPM DB files. -type Cataloger struct { - cataloger common.GenericCataloger -} - -// New returns a new RPM DB cataloger object. -func New() *Cataloger { +// NewRpmdbCataloger returns a new RPM DB cataloger object. +func NewRpmdbCataloger() *common.GenericCataloger { globParsers := map[string]common.ParserFn{ "**/var/lib/rpm/Packages": parseRpmDB, } - - return &Cataloger{ - cataloger: common.NewGenericCataloger(nil, globParsers), - } -} - -// Name returns a string that uniquely describes this cataloger. -func (a *Cataloger) Name() string { - return "rpmdb-cataloger" -} - -// SelectFiles returns a set of discovered RPM DB files from the user content source. -func (a *Cataloger) SelectFiles(resolver scope.FileResolver) []file.Reference { - return a.cataloger.SelectFiles(resolver) -} - -// Catalog returns the Packages indexed from all RPM DB files discovered. -func (a *Cataloger) Catalog(contents map[file.Reference]string) ([]pkg.Package, error) { - return a.cataloger.Catalog(contents, a.Name()) + return common.NewGenericCataloger(nil, globParsers, "rpmdb-cataloger") }