From dea404ca8410e958263c8ed59fbb1c0aaec5cc94 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Mart=C3=AD?= Date: Sat, 26 Jan 2019 23:22:27 +0000 Subject: [PATCH] cmd/fdroidcl: fix usage printing of subcommands Fixes #31. --- cmd/fdroidcl/main.go | 13 +++++++++---- cmd/fdroidcl/search.go | 43 ++++++++++++++++++++---------------------- 2 files changed, 29 insertions(+), 27 deletions(-) diff --git a/cmd/fdroidcl/main.go b/cmd/fdroidcl/main.go index bed17da..dfca959 100644 --- a/cmd/fdroidcl/main.go +++ b/cmd/fdroidcl/main.go @@ -115,6 +115,8 @@ type Command struct { // Short is the short description. Short string + + Fset flag.FlagSet } // Name returns the command's name: the first word in the usage line. @@ -127,13 +129,13 @@ func (c *Command) Name() string { return name } -func (c *Command) usage(flagSet *flag.FlagSet) { +func (c *Command) usage() { fmt.Fprintf(stderr, "Usage: %s %s [-h]\n", cmdName, c.UsageLine) anyFlags := false - flagSet.VisitAll(func(f *flag.Flag) { anyFlags = true }) + c.Fset.VisitAll(func(f *flag.Flag) { anyFlags = true }) if anyFlags { fmt.Fprintf(stderr, "\nAvailable options:\n") - flagSet.PrintDefaults() + c.Fset.PrintDefaults() } os.Exit(2) } @@ -197,8 +199,11 @@ func main() { if cmd.Name() != cmdName { continue } + cmd.Fset.Init(cmdName, flag.ExitOnError) + cmd.Fset.Usage = cmd.usage + cmd.Fset.Parse(args[1:]) readConfig() - if err := cmd.Run(args[1:]); err != nil { + if err := cmd.Run(cmd.Fset.Args()); err != nil { errExit("%s: %v\n", cmdName, err) } return diff --git a/cmd/fdroidcl/search.go b/cmd/fdroidcl/search.go index 2b6c73b..bf2f441 100644 --- a/cmd/fdroidcl/search.go +++ b/cmd/fdroidcl/search.go @@ -4,7 +4,6 @@ package main import ( - "flag" "fmt" "regexp" "sort" @@ -20,26 +19,24 @@ var cmdSearch = &Command{ Short: "Search available apps", } +var ( + searchQuiet = cmdSearch.Fset.Bool("q", false, "Print package names only") + searchInstalled = cmdSearch.Fset.Bool("i", false, "Filter installed apps") + searchUpdates = cmdSearch.Fset.Bool("u", false, "Filter apps with updates") + searchDays = cmdSearch.Fset.Int("d", 0, "Select apps last updated in the last days; a negative value drops them instead") + searchCategory = cmdSearch.Fset.String("c", "", "Filter apps by category") + searchSortBy = cmdSearch.Fset.String("o", "", "Sort order (added, updated)") +) + func init() { cmdSearch.Run = runSearch } func runSearch(args []string) error { - var fset flag.FlagSet - var ( - quiet = fset.Bool("q", false, "Print package names only") - installed = fset.Bool("i", false, "Filter installed apps") - updates = fset.Bool("u", false, "Filter apps with updates") - days = fset.Int("d", 0, "Select apps last updated in the last days; a negative value drops them instead") - category = fset.String("c", "", "Filter apps by category") - sortBy = fset.String("o", "", "Sort order (added, updated)") - ) - fset.Parse(args) - args = fset.Args() - if *installed && *updates { + if *searchInstalled && *searchUpdates { return fmt.Errorf("-i is redundant if -u is specified") } - sfunc, err := sortFunc(*sortBy) + sfunc, err := sortFunc(*searchSortBy) if err != nil { return err } @@ -47,10 +44,10 @@ func runSearch(args []string) error { if err != nil { return err } - if len(apps) > 0 && *category != "" { - apps = filterAppsCategory(apps, *category) + if len(apps) > 0 && *searchCategory != "" { + apps = filterAppsCategory(apps, *searchCategory) if apps == nil { - return fmt.Errorf("no such category: %s", *category) + return fmt.Errorf("no such category: %s", *searchCategory) } } if len(apps) > 0 && len(args) > 0 { @@ -58,7 +55,7 @@ func runSearch(args []string) error { } var device *adb.Device var inst map[string]adb.Package - if *installed || *updates { + if *searchInstalled || *searchUpdates { if device, err = oneDevice(); err != nil { return err } @@ -66,19 +63,19 @@ func runSearch(args []string) error { return err } } - if len(apps) > 0 && *installed { + if len(apps) > 0 && *searchInstalled { apps = filterAppsInstalled(apps, inst) } - if len(apps) > 0 && *updates { + if len(apps) > 0 && *searchUpdates { apps = filterAppsUpdates(apps, inst, device) } - if len(apps) > 0 && *days != 0 { - apps = filterAppsLastUpdated(apps, *days) + if len(apps) > 0 && *searchDays != 0 { + apps = filterAppsLastUpdated(apps, *searchDays) } if sfunc != nil { apps = sortApps(apps, sfunc) } - if *quiet { + if *searchQuiet { for _, app := range apps { fmt.Fprintln(stdout, app.PackageName) }