mirror of
https://github.com/rclone/rclone.git
synced 2025-08-09 13:55:15 +02:00
docs: group the global flags and make them appear on command and flags pages
This adds an additional parameter to the creation of each flag. This specifies one or more flag groups. This **must** be set for global flags and **must not** be set for local flags. This causes flags.md to be built with sections to aid comprehension and it causes the documentation pages for each command (and the `--help`) to be built showing the flags groups as specified in the `groups` annotation on the command. See: https://forum.rclone.org/t/make-docs-for-mortals-not-only-rclone-gurus/39476/
This commit is contained in:
51
cmd/help.go
51
cmd/help.go
@ -11,6 +11,7 @@ import (
|
||||
|
||||
"github.com/rclone/rclone/fs"
|
||||
"github.com/rclone/rclone/fs/config/configflags"
|
||||
"github.com/rclone/rclone/fs/config/flags"
|
||||
"github.com/rclone/rclone/fs/filter/filterflags"
|
||||
"github.com/rclone/rclone/fs/log/logflags"
|
||||
"github.com/rclone/rclone/fs/rc/rcflags"
|
||||
@ -113,7 +114,7 @@ var helpFlags = &cobra.Command{
|
||||
Short: "Show the global flags for rclone",
|
||||
Run: func(command *cobra.Command, args []string) {
|
||||
if len(args) > 0 {
|
||||
re, err := regexp.Compile(args[0])
|
||||
re, err := regexp.Compile(`(?i)` + args[0])
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to compile flags regexp: %v", err)
|
||||
}
|
||||
@ -181,7 +182,7 @@ func setupRootCommand(rootCmd *cobra.Command) {
|
||||
Root.Flags().BoolVarP(&version, "version", "V", false, "Print the version number")
|
||||
|
||||
cobra.AddTemplateFunc("showGlobalFlags", func(cmd *cobra.Command) bool {
|
||||
return cmd.CalledAs() == "flags"
|
||||
return cmd.CalledAs() == "flags" || cmd.Annotations["groups"] != ""
|
||||
})
|
||||
cobra.AddTemplateFunc("showCommands", func(cmd *cobra.Command) bool {
|
||||
return cmd.CalledAs() != "flags"
|
||||
@ -191,15 +192,21 @@ func setupRootCommand(rootCmd *cobra.Command) {
|
||||
// "rclone help" (which shows the global help)
|
||||
return cmd.CalledAs() != "rclone" && cmd.CalledAs() != ""
|
||||
})
|
||||
cobra.AddTemplateFunc("backendFlags", func(cmd *cobra.Command, include bool) *pflag.FlagSet {
|
||||
backendFlagSet := pflag.NewFlagSet("Backend Flags", pflag.ExitOnError)
|
||||
cobra.AddTemplateFunc("flagGroups", func(cmd *cobra.Command) []*flags.Group {
|
||||
// Add the backend flags and check all flags
|
||||
backendGroup := flags.All.NewGroup("Backend", "Backend only flags. These can be set in the config file also.")
|
||||
allRegistered := flags.All.AllRegistered()
|
||||
cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) {
|
||||
matched := flagsRe == nil || flagsRe.MatchString(flag.Name)
|
||||
if _, ok := backendFlags[flag.Name]; matched && ok == include {
|
||||
backendFlagSet.AddFlag(flag)
|
||||
if _, ok := backendFlags[flag.Name]; ok {
|
||||
backendGroup.Add(flag)
|
||||
} else if _, ok := allRegistered[flag]; ok {
|
||||
// flag is in a group already
|
||||
} else {
|
||||
fs.Errorf(nil, "Flag --%s is unknown", flag.Name)
|
||||
}
|
||||
})
|
||||
return backendFlagSet
|
||||
groups := flags.All.Filter(flagsRe).Include(cmd.Annotations["groups"])
|
||||
return groups.Groups
|
||||
})
|
||||
rootCmd.SetUsageTemplate(usageTemplate)
|
||||
// rootCmd.SetHelpTemplate(helpTemplate)
|
||||
@ -233,11 +240,13 @@ Available Commands:{{range .Commands}}{{if (or .IsAvailableCommand (eq .Name "he
|
||||
Flags:
|
||||
{{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if and (showGlobalFlags .) .HasAvailableInheritedFlags}}
|
||||
|
||||
Global Flags:
|
||||
{{(backendFlags . false).FlagUsages | trimTrailingWhitespaces}}
|
||||
{{ range flagGroups . }}{{ if .Flags.HasFlags }}
|
||||
# {{ .Name }} Flags
|
||||
|
||||
Backend Flags:
|
||||
{{(backendFlags . true).FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}}
|
||||
{{ .Help }}
|
||||
|
||||
{{ .Flags.FlagUsages | trimTrailingWhitespaces}}
|
||||
{{ end }}{{ end }}
|
||||
|
||||
Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}}
|
||||
{{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}
|
||||
@ -255,24 +264,18 @@ description: "Rclone Global Flags"
|
||||
# Global Flags
|
||||
|
||||
This describes the global flags available to every rclone command
|
||||
split into two groups, non backend and backend flags.
|
||||
split into groups.
|
||||
|
||||
## Non Backend Flags
|
||||
{{ range flagGroups . }}{{ if .Flags.HasFlags }}
|
||||
## {{ .Name }}
|
||||
|
||||
These flags are available for every command.
|
||||
{{ .Help }}
|
||||
|
||||
` + "```" + `
|
||||
{{(backendFlags . false).FlagUsages | trimTrailingWhitespaces}}
|
||||
{{ .Flags.FlagUsages | trimTrailingWhitespaces}}
|
||||
` + "```" + `
|
||||
|
||||
## Backend Flags
|
||||
|
||||
These flags are available for every command. They control the backends
|
||||
and may be set in the config file.
|
||||
|
||||
` + "```" + `
|
||||
{{(backendFlags . true).FlagUsages | trimTrailingWhitespaces}}
|
||||
` + "```" + `
|
||||
{{ end }}{{ end }}
|
||||
`
|
||||
|
||||
// show all the backends
|
||||
|
Reference in New Issue
Block a user