mirror of
https://github.com/rclone/rclone.git
synced 2024-11-22 12:36:38 +08:00
help: global flags help command extended filtering
This commit is contained in:
parent
c6352231e4
commit
1720d3e11c
18
cmd/help.go
18
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 [<filter>]",
|
||||
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)
|
||||
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user