diff --git a/internal/formats/formats.go b/internal/formats/formats.go index 5c82bd653..f8cb24b22 100644 --- a/internal/formats/formats.go +++ b/internal/formats/formats.go @@ -3,6 +3,8 @@ package formats import ( "bytes" + "github.com/anchore/syft/internal/formats/table" + "github.com/anchore/syft/internal/formats/syftjson" "github.com/anchore/syft/syft/format" ) @@ -11,6 +13,7 @@ import ( func All() []format.Format { return []format.Format{ syftjson.Format(), + table.Format(), } } diff --git a/internal/presenter/packages/table_presenter.go b/internal/formats/table/encoder.go similarity index 77% rename from internal/presenter/packages/table_presenter.go rename to internal/formats/table/encoder.go index 87256da77..8f910be3f 100644 --- a/internal/presenter/packages/table_presenter.go +++ b/internal/formats/table/encoder.go @@ -1,4 +1,4 @@ -package packages +package table import ( "fmt" @@ -8,24 +8,16 @@ import ( "github.com/olekukonko/tablewriter" + "github.com/anchore/syft/syft/distro" "github.com/anchore/syft/syft/pkg" + "github.com/anchore/syft/syft/source" ) -type TablePresenter struct { - catalog *pkg.Catalog -} - -func NewTablePresenter(catalog *pkg.Catalog) *TablePresenter { - return &TablePresenter{ - catalog: catalog, - } -} - -func (pres *TablePresenter) Present(output io.Writer) error { - rows := make([][]string, 0) +func encoder(output io.Writer, catalog *pkg.Catalog, _ *source.Metadata, _ *distro.Distro, _ source.Scope) error { + var rows [][]string columns := []string{"Name", "Version", "Type"} - for _, p := range pres.catalog.Sorted() { + for _, p := range catalog.Sorted() { row := []string{ p.Name, p.Version, @@ -35,8 +27,8 @@ func (pres *TablePresenter) Present(output io.Writer) error { } if len(rows) == 0 { - fmt.Fprintln(output, "No packages discovered") - return nil + _, err := fmt.Fprintln(output, "No packages discovered") + return err } // sort by name, version, then type diff --git a/internal/presenter/packages/table_presenter_test.go b/internal/formats/table/encoder_test.go similarity index 61% rename from internal/presenter/packages/table_presenter_test.go rename to internal/formats/table/encoder_test.go index 01ebdaca8..99ee26431 100644 --- a/internal/presenter/packages/table_presenter_test.go +++ b/internal/formats/table/encoder_test.go @@ -1,23 +1,22 @@ -package packages +package table import ( "flag" "testing" "github.com/anchore/syft/internal/formats/common/testutils" - + "github.com/anchore/syft/syft/format" + "github.com/anchore/syft/syft/source" "github.com/go-test/deep" ) -var updateTablePresenterGoldenFiles = flag.Bool("update-table", false, "update the *.golden files for table presenters") +var updateTableGoldenFiles = flag.Bool("update-table", false, "update the *.golden files for table format") func TestTablePresenter(t *testing.T) { - testImage := "image-simple" - catalog, _, _ := testutils.ImageInput(t, testImage) - testutils.AssertPresenterAgainstGoldenImageSnapshot(t, - NewTablePresenter(catalog), - testImage, - *updateTablePresenterGoldenFiles, + catalog, metadata, distro := testutils.DirectoryInput(t) + testutils.AssertPresenterAgainstGoldenSnapshot(t, + format.NewPresenter(encoder, catalog, &metadata, distro, source.SquashedScope), + *updateTableGoldenFiles, ) } diff --git a/internal/formats/table/format.go b/internal/formats/table/format.go new file mode 100644 index 000000000..750b13031 --- /dev/null +++ b/internal/formats/table/format.go @@ -0,0 +1,12 @@ +package table + +import "github.com/anchore/syft/syft/format" + +func Format() format.Format { + return format.NewFormat( + format.TableOption, + encoder, + nil, + nil, + ) +} diff --git a/internal/presenter/packages/test-fixtures/snapshot/TestTablePresenter.golden b/internal/formats/table/test-fixtures/snapshot/TestTablePresenter.golden similarity index 100% rename from internal/presenter/packages/test-fixtures/snapshot/TestTablePresenter.golden rename to internal/formats/table/test-fixtures/snapshot/TestTablePresenter.golden diff --git a/syft/presenter/packages/presenter.go b/syft/presenter/packages/presenter.go index e6dcc1077..117533121 100644 --- a/syft/presenter/packages/presenter.go +++ b/syft/presenter/packages/presenter.go @@ -16,8 +16,6 @@ func Presenter(option format.Option, config PresenterConfig) presenter.Presenter switch option { case format.TextOption: return packages.NewTextPresenter(config.Catalog, config.SourceMetadata) - case format.TableOption: - return packages.NewTablePresenter(config.Catalog) case format.CycloneDxOption: return packages.NewCycloneDxPresenter(config.Catalog, config.SourceMetadata) case format.SPDXTagValueOption: