diff --git a/cmd/stbak/cmd/find.go b/cmd/stbak/cmd/find.go index 337f9bd..53029fb 100644 --- a/cmd/stbak/cmd/find.go +++ b/cmd/stbak/cmd/find.go @@ -1,12 +1,7 @@ package cmd import ( - "context" - "regexp" - - "github.com/pojntfx/stfs/internal/converters" - "github.com/pojntfx/stfs/internal/formatting" - "github.com/pojntfx/stfs/internal/persisters" + "github.com/pojntfx/stfs/pkg/inventory" "github.com/spf13/cobra" "github.com/spf13/viper" "github.com/volatiletech/sqlboiler/v4/boil" @@ -29,38 +24,16 @@ var findCmd = &cobra.Command{ boil.DebugMode = true } - metadataPersister := persisters.NewMetadataPersister(viper.GetString(metadataFlag)) - if err := metadataPersister.Open(); err != nil { + if _, err := inventory.Find( + inventory.MetadataConfig{ + Metadata: viper.GetString(metadataFlag), + }, + + viper.GetString(expressionFlag), + ); err != nil { return err } - headers, err := metadataPersister.GetHeaders(context.Background()) - if err != nil { - return err - } - - first := true - for _, dbhdr := range headers { - if regexp.MustCompile(viper.GetString(expressionFlag)).Match([]byte(dbhdr.Name)) { - if first { - if err := formatting.PrintCSV(formatting.TARHeaderCSV); err != nil { - return err - } - - first = false - } - - hdr, err := converters.DBHeaderToTarHeader(dbhdr) - if err != nil { - return err - } - - if err := formatting.PrintCSV(formatting.GetTARHeaderAsCSV(dbhdr.Record, dbhdr.Block, hdr)); err != nil { - return err - } - } - } - return nil }, } diff --git a/pkg/inventory/find.go b/pkg/inventory/find.go index 8a02afb..a46eb40 100644 --- a/pkg/inventory/find.go +++ b/pkg/inventory/find.go @@ -1,11 +1,54 @@ package inventory -import "archive/tar" +import ( + "archive/tar" + "context" + "regexp" + + "github.com/pojntfx/stfs/internal/converters" + "github.com/pojntfx/stfs/internal/formatting" + "github.com/pojntfx/stfs/internal/persisters" +) func Find( state MetadataConfig, expression string, ) ([]*tar.Header, error) { - return nil, nil + metadataPersister := persisters.NewMetadataPersister(state.Metadata) + if err := metadataPersister.Open(); err != nil { + return []*tar.Header{}, err + } + + dbHdrs, err := metadataPersister.GetHeaders(context.Background()) + if err != nil { + return []*tar.Header{}, err + } + + headers := []*tar.Header{} + first := true + for _, dbhdr := range dbHdrs { + if regexp.MustCompile(expression).Match([]byte(dbhdr.Name)) { + if first { + if err := formatting.PrintCSV(formatting.TARHeaderCSV); err != nil { + return []*tar.Header{}, err + } + + first = false + } + + hdr, err := converters.DBHeaderToTarHeader(dbhdr) + if err != nil { + return []*tar.Header{}, err + } + + if err := formatting.PrintCSV(formatting.GetTARHeaderAsCSV(dbhdr.Record, dbhdr.Block, hdr)); err != nil { + return []*tar.Header{}, err + } + + headers = append(headers, hdr) + } + } + + return headers, nil }