From 5fde7d8b128bd16c8ddd19c1c6ff460323e22fa5 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Thu, 13 Sep 2018 08:30:16 +0100 Subject: [PATCH] cmd: split flags up into global and backend flags #2541 --- cmd/cmd.go | 4 ++++ cmd/help.go | 14 +++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index ac2b7e8b7..43f69f6d3 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -432,8 +432,11 @@ func resolveExitCode(err error) { } } +var backendFlags map[string]struct{} + // AddBackendFlags creates flags for all the backend options func AddBackendFlags() { + backendFlags = map[string]struct{}{} for _, fsInfo := range fs.Registry { done := map[string]struct{}{} for i := range fsInfo.Options { @@ -464,6 +467,7 @@ func AddBackendFlags() { if opt.Hide&fs.OptionHideCommandLine != 0 { flag.Hidden = true } + backendFlags[name] = struct{}{} } else { fs.Errorf(nil, "Not adding duplicate flag --%s", name) } diff --git a/cmd/help.go b/cmd/help.go index 88fc4a255..bdd768c81 100644 --- a/cmd/help.go +++ b/cmd/help.go @@ -83,6 +83,15 @@ func setupRootCommand(rootCmd *cobra.Command) { cobra.AddTemplateFunc("showLocalFlags", func(cmd *cobra.Command) bool { return cmd.CalledAs() != "rclone" }) + cobra.AddTemplateFunc("backendFlags", func(cmd *cobra.Command, include bool) *pflag.FlagSet { + backendFlagSet := pflag.NewFlagSet("Backend Flags", pflag.ExitOnError) + cmd.InheritedFlags().VisitAll(func(flag *pflag.Flag) { + if _, ok := backendFlags[flag.Name]; ok == include { + backendFlagSet.AddFlag(flag) + } + }) + return backendFlagSet + }) rootCmd.SetUsageTemplate(usageTemplate) // rootCmd.SetHelpTemplate(helpTemplate) // rootCmd.SetFlagErrorFunc(FlagErrorFunc) @@ -116,7 +125,10 @@ Flags: {{.LocalFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if and (showGlobalFlags .) .HasAvailableInheritedFlags}} Global Flags: -{{.InheritedFlags.FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} +{{(backendFlags . false).FlagUsages | trimTrailingWhitespaces}} + +Backend Flags: +{{(backendFlags . true).FlagUsages | trimTrailingWhitespaces}}{{end}}{{if .HasHelpSubCommands}} Additional help topics:{{range .Commands}}{{if .IsAdditionalHelpTopicCommand}} {{rpad .CommandPath .CommandPathPadding}} {{.Short}}{{end}}{{end}}{{end}}