replace presenter.Option with format.Option

Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
This commit is contained in:
Alex Goodman 2021-10-10 18:35:02 -07:00
parent 12b44af471
commit 124cfd86c7
No known key found for this signature in database
GPG Key ID: 5CB45AE22BAB7EA7
5 changed files with 27 additions and 62 deletions

View File

@ -6,6 +6,8 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"github.com/anchore/syft/syft/format"
"github.com/anchore/stereoscope" "github.com/anchore/stereoscope"
"github.com/anchore/syft/internal" "github.com/anchore/syft/internal"
"github.com/anchore/syft/internal/anchore" "github.com/anchore/syft/internal/anchore"
@ -48,7 +50,7 @@ const (
) )
var ( var (
packagesPresenterOpt packages.PresenterOption packagesPresenterOpt format.Option
packagesArgs = cobra.MaximumNArgs(1) packagesArgs = cobra.MaximumNArgs(1)
packagesCmd = &cobra.Command{ packagesCmd = &cobra.Command{
Use: "packages [SOURCE]", Use: "packages [SOURCE]",
@ -71,8 +73,8 @@ var (
} }
// set the presenter // set the presenter
presenterOption := packages.ParsePresenterOption(appConfig.Output) presenterOption := format.ParseOption(appConfig.Output)
if presenterOption == packages.UnknownPresenterOption { if presenterOption == format.UnknownOption {
return fmt.Errorf("bad --output value '%s'", appConfig.Output) return fmt.Errorf("bad --output value '%s'", appConfig.Output)
} }
packagesPresenterOpt = presenterOption packagesPresenterOpt = presenterOption
@ -109,8 +111,8 @@ func setPackageFlags(flags *pflag.FlagSet) {
fmt.Sprintf("selection of layers to catalog, options=%v", source.AllScopes)) fmt.Sprintf("selection of layers to catalog, options=%v", source.AllScopes))
flags.StringP( flags.StringP(
"output", "o", string(packages.TablePresenterOption), "output", "o", string(format.TableOption),
fmt.Sprintf("report output formatter, options=%v", packages.AllPresenters), fmt.Sprintf("report output formatter, options=%v", format.AllOptions),
) )
flags.StringP( flags.StringP(
@ -247,7 +249,7 @@ func packagesExecWorker(userInput string) <-chan error {
bus.Publish(partybus.Event{ bus.Publish(partybus.Event{
Type: event.PresenterReady, Type: event.PresenterReady,
Value: packages.Presenter(packagesPresenterOpt, packages.PresenterConfig{ Value: packages.Presenter(packagesPresenterOpt, packages.Config{
SourceMetadata: src.Metadata, SourceMetadata: src.Metadata,
Catalog: catalog, Catalog: catalog,
Distro: d, Distro: d,

View File

@ -6,7 +6,7 @@ import (
"github.com/anchore/syft/syft/source" "github.com/anchore/syft/syft/source"
) )
type PresenterConfig struct { type Config struct {
SourceMetadata source.Metadata SourceMetadata source.Metadata
Catalog *pkg.Catalog Catalog *pkg.Catalog
Distro *distro.Distro Distro *distro.Distro

View File

@ -5,26 +5,30 @@ a specific Presenter implementation given user configuration.
package packages package packages
import ( import (
"github.com/anchore/syft/internal/formats"
"github.com/anchore/syft/internal/presenter/packages" "github.com/anchore/syft/internal/presenter/packages"
"github.com/anchore/syft/syft/format"
"github.com/anchore/syft/syft/presenter" "github.com/anchore/syft/syft/presenter"
) )
// Presenter returns a presenter for images or directories // Presenter returns a presenter for images or directories
func Presenter(option PresenterOption, config PresenterConfig) presenter.Presenter { func Presenter(o format.Option, config Config) presenter.Presenter {
switch option { // TODO: This function will be removed in the future
case JSONPresenterOption: switch o {
return packages.NewJSONPresenter(config.Catalog, config.SourceMetadata, config.Distro, config.Scope) case format.TextOption:
case TextPresenterOption:
return packages.NewTextPresenter(config.Catalog, config.SourceMetadata) return packages.NewTextPresenter(config.Catalog, config.SourceMetadata)
case TablePresenterOption: case format.TableOption:
return packages.NewTablePresenter(config.Catalog) return packages.NewTablePresenter(config.Catalog)
case CycloneDxPresenterOption: case format.CycloneDxOption:
return packages.NewCycloneDxPresenter(config.Catalog, config.SourceMetadata) return packages.NewCycloneDxPresenter(config.Catalog, config.SourceMetadata)
case SPDXTagValuePresenterOption: case format.SPDXTagValueOption:
return packages.NewSPDXTagValuePresenter(config.Catalog, config.SourceMetadata) return packages.NewSPDXTagValuePresenter(config.Catalog, config.SourceMetadata)
case SPDXJSONPresenterOption:
return packages.NewSPDXJSONPresenter(config.Catalog, config.SourceMetadata)
default: default:
// TODO: this is the new way of getting presenters from formats
f := formats.ByOption(o)
if f == nil {
return nil return nil
} }
return f.Presenter(config.Catalog, &config.SourceMetadata, config.Distro)
}
} }

View File

@ -1,43 +0,0 @@
package packages
import "strings"
const (
UnknownPresenterOption PresenterOption = "UnknownPresenterOption"
JSONPresenterOption PresenterOption = "json"
TextPresenterOption PresenterOption = "text"
TablePresenterOption PresenterOption = "table"
CycloneDxPresenterOption PresenterOption = "cyclonedx"
SPDXTagValuePresenterOption PresenterOption = "spdx-tag-value"
SPDXJSONPresenterOption PresenterOption = "spdx-json"
)
var AllPresenters = []PresenterOption{
JSONPresenterOption,
TextPresenterOption,
TablePresenterOption,
CycloneDxPresenterOption,
SPDXTagValuePresenterOption,
SPDXJSONPresenterOption,
}
type PresenterOption string
func ParsePresenterOption(userStr string) PresenterOption {
switch strings.ToLower(userStr) {
case string(JSONPresenterOption):
return JSONPresenterOption
case string(TextPresenterOption):
return TextPresenterOption
case string(TablePresenterOption):
return TablePresenterOption
case string(CycloneDxPresenterOption), "cyclone", "cyclone-dx":
return CycloneDxPresenterOption
case string(SPDXTagValuePresenterOption), "spdx", "spdx-tagvalue", "spdxtagvalue", "spdx-tv":
return SPDXTagValuePresenterOption
case string(SPDXJSONPresenterOption), "spdxjson":
return SPDXJSONPresenterOption
default:
return UnknownPresenterOption
}
}

View File

@ -1,6 +1,8 @@
package presenter package presenter
import "io" import (
"io"
)
// Presenter defines the expected behavior for an object responsible for displaying arbitrary input and processed data // Presenter defines the expected behavior for an object responsible for displaying arbitrary input and processed data
// to a given io.Writer. // to a given io.Writer.