From 1720d3e11cd8be727a535aa09be2284f3a4019d3 Mon Sep 17 00:00:00 2001 From: albertony <12441419+albertony@users.noreply.github.com> Date: Fri, 3 Nov 2023 23:35:48 +0100 Subject: [PATCH] help: global flags help command extended filtering --- cmd/help.go | 18 +++++++++++++----- fs/config/flags/flags.go | 17 +++++++++-------- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/cmd/help.go b/cmd/help.go index ee01b7840..e6106d2f7 100644 --- a/cmd/help.go +++ b/cmd/help.go @@ -59,20 +59,25 @@ var helpCommand = &cobra.Command{ } // to filter the flags with -var flagsRe *regexp.Regexp +var ( + filterFlagsGroup string + filterFlagsRe *regexp.Regexp + filterFlagsNamesOnly bool +) // Show the flags var helpFlags = &cobra.Command{ Use: "flags []", Short: "Show the global flags for rclone", Run: func(command *cobra.Command, args []string) { + command.Flags() if len(args) > 0 { re, err := filter.GlobStringToRegexp(args[0], false) if err != nil { - log.Fatalf("Failed to compile flags regexp: %v", err) + log.Fatalf("Invalid flag filter: %v", err) } - fs.Debugf(nil, "Flags filter: %s", re.String()) - flagsRe = re + fs.Debugf(nil, "Flag filter: %s", re.String()) + filterFlagsRe = re } if GeneratingDocs { Root.SetUsageTemplate(docFlagsTemplate) @@ -159,7 +164,7 @@ func setupRootCommand(rootCmd *cobra.Command) { fs.Errorf(nil, "Flag --%s is unknown", flag.Name) } }) - groups := flags.All.Filter(flagsRe).Include(cmd.Annotations["groups"]) + groups := flags.All.Filter(filterFlagsGroup, filterFlagsRe, filterFlagsNamesOnly).Include(cmd.Annotations["groups"]) return groups.Groups }) rootCmd.SetUsageTemplate(usageTemplate) @@ -171,6 +176,9 @@ func setupRootCommand(rootCmd *cobra.Command) { rootCmd.AddCommand(helpCommand) helpCommand.AddCommand(helpFlags) + helpFlagsFlags := helpFlags.Flags() + flags.StringVarP(helpFlagsFlags, &filterFlagsGroup, "group", "", "", "Only include flags from specific group", "") + flags.BoolVarP(helpFlagsFlags, &filterFlagsNamesOnly, "name", "", false, "Apply filter only on flag names", "") helpCommand.AddCommand(helpBackends) helpCommand.AddCommand(helpBackend) diff --git a/fs/config/flags/flags.go b/fs/config/flags/flags.go index 25183fa0f..10b1fd77f 100644 --- a/fs/config/flags/flags.go +++ b/fs/config/flags/flags.go @@ -50,16 +50,17 @@ func (gs *Groups) NewGroup(name, help string) *Group { } // Filter makes a copy of groups filtered by flagsRe -func (gs *Groups) Filter(flagsRe *regexp.Regexp) *Groups { +func (gs *Groups) Filter(group string, filterRe *regexp.Regexp, filterNamesOnly bool) *Groups { newGs := NewGroups() for _, g := range gs.Groups { - newG := newGs.NewGroup(g.Name, g.Help) - g.Flags.VisitAll(func(f *pflag.Flag) { - matched := flagsRe == nil || flagsRe.MatchString(f.Name) || flagsRe.MatchString(f.Usage) - if matched { - newG.Flags.AddFlag(f) - } - }) + if group == "" || strings.EqualFold(g.Name, group) { + newG := newGs.NewGroup(g.Name, g.Help) + g.Flags.VisitAll(func(f *pflag.Flag) { + if filterRe == nil || filterRe.MatchString(f.Name) || (!filterNamesOnly && filterRe.MatchString(f.Usage)) { + newG.Flags.AddFlag(f) + } + }) + } } return newGs }