arrange power-user tasks ahead of parsing the source image

Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
This commit is contained in:
Alex Goodman 2021-03-23 10:29:38 -04:00
parent 77e4c89a5a
commit 0e9c1c1d86
No known key found for this signature in database
GPG Key ID: 5CB45AE22BAB7EA7
2 changed files with 42 additions and 44 deletions

View File

@ -72,6 +72,12 @@ func powerUserExecWorker(userInput string) <-chan error {
go func() { go func() {
defer close(errs) defer close(errs)
tasks, err := powerUserTasks()
if err != nil {
errs <- err
return
}
checkForApplicationUpdate() checkForApplicationUpdate()
src, cleanup, err := source.New(userInput) src, cleanup, err := source.New(userInput)
@ -90,14 +96,9 @@ func powerUserExecWorker(userInput string) <-chan error {
SourceMetadata: src.Metadata, SourceMetadata: src.Metadata,
ApplicationConfig: *appConfig, ApplicationConfig: *appConfig,
} }
tasks, err := powerUserTasks(src)
if err != nil {
errs <- err
return
}
for _, task := range tasks { for _, task := range tasks {
if err = task(&analysisResults); err != nil { if err = task(&analysisResults, src); err != nil {
errs <- err errs <- err
return return
} }

View File

@ -7,41 +7,36 @@ import (
"github.com/anchore/syft/syft/source" "github.com/anchore/syft/syft/source"
) )
type powerUserTask func(*poweruser.JSONDocumentConfig) error type powerUserTask func(*poweruser.JSONDocumentConfig, source.Source) error
func powerUserTasks(src source.Source) ([]powerUserTask, error) { func powerUserTasks() ([]powerUserTask, error) {
var tasks []powerUserTask var tasks []powerUserTask
var err error
var task powerUserTask
task = catalogPackagesTask(src) generators := []func() (powerUserTask, error){
catalogPackagesTask,
catalogFileMetadataTask,
catalogFileDigestTask,
}
for _, generator := range generators {
task, err := generator()
if err != nil {
return nil, err
}
if task != nil { if task != nil {
tasks = append(tasks, task) tasks = append(tasks, task)
} }
task, err = catalogFileMetadataTask(src)
if err != nil {
return nil, err
} else if task != nil {
tasks = append(tasks, task)
}
task, err = catalogFileDigestTask(src)
if err != nil {
return nil, err
} else if task != nil {
tasks = append(tasks, task)
} }
return tasks, nil return tasks, nil
} }
func catalogPackagesTask(src source.Source) powerUserTask { func catalogPackagesTask() (powerUserTask, error) {
if !appConfig.Package.Cataloger.Enabled { if !appConfig.Package.Cataloger.Enabled {
return nil return nil, nil
} }
task := func(results *poweruser.JSONDocumentConfig) error { task := func(results *poweruser.JSONDocumentConfig, src source.Source) error {
packageCatalog, theDistro, err := syft.CatalogPackages(src, appConfig.Package.Cataloger.ScopeOpt) packageCatalog, theDistro, err := syft.CatalogPackages(src, appConfig.Package.Cataloger.ScopeOpt)
if err != nil { if err != nil {
return err return err
@ -53,21 +48,23 @@ func catalogPackagesTask(src source.Source) powerUserTask {
return nil return nil
} }
return task return task, nil
} }
func catalogFileMetadataTask(src source.Source) (powerUserTask, error) { func catalogFileMetadataTask() (powerUserTask, error) {
if !appConfig.FileMetadata.Cataloger.Enabled { if !appConfig.FileMetadata.Cataloger.Enabled {
return nil, nil return nil, nil
} }
metadataCataloger := file.NewMetadataCataloger()
task := func(results *poweruser.JSONDocumentConfig, src source.Source) error {
resolver, err := src.FileResolver(appConfig.FileMetadata.Cataloger.ScopeOpt) resolver, err := src.FileResolver(appConfig.FileMetadata.Cataloger.ScopeOpt)
if err != nil { if err != nil {
return nil, err return err
} }
task := func(results *poweruser.JSONDocumentConfig) error { result, err := metadataCataloger.Catalog(resolver)
result, err := file.NewMetadataCataloger(resolver).Catalog()
if err != nil { if err != nil {
return err return err
} }
@ -78,23 +75,23 @@ func catalogFileMetadataTask(src source.Source) (powerUserTask, error) {
return task, nil return task, nil
} }
func catalogFileDigestTask(src source.Source) (powerUserTask, error) { func catalogFileDigestTask() (powerUserTask, error) {
if !appConfig.FileMetadata.Cataloger.Enabled { if !appConfig.FileMetadata.Cataloger.Enabled {
return nil, nil return nil, nil
} }
digestsCataloger, err := file.NewDigestsCataloger(appConfig.FileMetadata.Digests)
if err != nil {
return nil, err
}
task := func(results *poweruser.JSONDocumentConfig, src source.Source) error {
resolver, err := src.FileResolver(appConfig.FileMetadata.Cataloger.ScopeOpt) resolver, err := src.FileResolver(appConfig.FileMetadata.Cataloger.ScopeOpt)
if err != nil { if err != nil {
return nil, err return err
} }
cataloger, err := file.NewDigestsCataloger(resolver, appConfig.FileMetadata.Digests) result, err := digestsCataloger.Catalog(resolver)
if err != nil {
return nil, err
}
task := func(results *poweruser.JSONDocumentConfig) error {
result, err := cataloger.Catalog()
if err != nil { if err != nil {
return err return err
} }