99 "fmt"
1010 "io"
1111 "os"
12- "slices"
1312
1413 "github.com/spf13/cobra"
1514
@@ -33,8 +32,7 @@ func setupFilterCommand() *cobraext.Command {
3332 filter .SetFilterFlags (cmd )
3433
3534 // add the output package name and absolute path flags to the command
36- cmd .Flags ().BoolP (cobraext .FilterOutputPackageNameFlagName , "" , false , cobraext .FilterOutputPackageNameFlagDescription )
37- cmd .Flags ().BoolP (cobraext .FilterOutputAbsolutePathFlagName , "" , false , cobraext .FilterOutputAbsolutePathFlagDescription )
35+ cmd .Flags ().StringP (cobraext .FilterOutputFlagName , cobraext .FilterOutputFlagShorthand , cobraext .FilterOutputFlagDefault , cobraext .FilterOutputFlagDescription )
3836
3937 return cobraext .NewCommand (cmd , cobraext .ContextPackage )
4038}
@@ -45,17 +43,17 @@ func filterCommandAction(cmd *cobra.Command, args []string) error {
4543 return fmt .Errorf ("filtering packages failed: %w" , err )
4644 }
4745
48- printPackageName , err := cmd .Flags ().GetBool (cobraext .FilterOutputPackageNameFlagName )
46+ outputFormatStr , err := cmd .Flags ().GetString (cobraext .FilterOutputFlagName )
4947 if err != nil {
50- return fmt .Errorf ("getting output package name flag failed: %w" , err )
48+ return fmt .Errorf ("getting output format flag failed: %w" , err )
5149 }
5250
53- outputAbsolutePath , err := cmd . Flags (). GetBool ( "output-absolute-path" )
51+ outputFormat , err := filter . NewOutputFormat ( outputFormatStr )
5452 if err != nil {
55- return fmt .Errorf ("getting output absolute path flag failed : %w" , err )
53+ return fmt .Errorf ("invalid output format : %w" , err )
5654 }
5755
58- if err = printPkgList (filtered , printPackageName , outputAbsolutePath , os .Stdout ); err != nil {
56+ if err = printPkgList (filtered , outputFormat , os .Stdout ); err != nil {
5957 return fmt .Errorf ("printing JSON failed: %w" , err )
6058 }
6159
@@ -91,28 +89,14 @@ func filterPackage(cmd *cobra.Command) ([]packages.PackageDirNameAndManifest, er
9189 return filtered , nil
9290}
9391
94- func printPkgList (pkgs []packages.PackageDirNameAndManifest , printPackageName bool , outputAbsolutePath bool , w io.Writer ) error {
92+ func printPkgList (pkgs []packages.PackageDirNameAndManifest , outputFormat filter. OutputFormat , w io.Writer ) error {
9593 enc := json .NewEncoder (w )
9694 enc .SetEscapeHTML (false )
97- if len (pkgs ) == 0 {
98- return nil
99- }
10095
101- names := make ([]string , 0 , len (pkgs ))
102- if printPackageName {
103- for _ , pkg := range pkgs {
104- names = append (names , pkg .Manifest .Name )
105- }
106- } else if outputAbsolutePath {
107- for _ , pkg := range pkgs {
108- names = append (names , pkg .Path )
109- }
110- } else {
111- for _ , pkg := range pkgs {
112- names = append (names , pkg .DirName )
113- }
96+ names , err := outputFormat .ApplyTo (pkgs )
97+ if err != nil {
98+ return fmt .Errorf ("applying output format failed: %w" , err )
11499 }
115100
116- slices .Sort (names )
117101 return enc .Encode (names )
118102}
0 commit comments