cmd/root: Work around Cobra 1.1.2's handling of usage functions
In version 1.1.2 of Cobra has been included a change[0] that changes how custom usage functions are handled. Example of the wrong behaviour: $ toolbox --foo Error: unknown flag: --foo Run 'toolbox --help' for usage.Error: Run 'toolbox --help' for usage. Desired behaviour: $ toolbox --foo Error: unknown flag: --foo Run 'toolbox --help' for usage. A workaround is to define a template string for the usage instead. The template uses the templating language of Go[1]. See the default template string in version 1.2.1[2]. Because the template is set only once, the executableBase needs to be set before the template is applied. That required the move of setUpGlobals() into init() of the cmd package. This is a better place for the function call as init() is called earlier than Execute()[3]. Upstream issue: https://github.com/spf13/cobra/issues/1532 [0] https://github.com/spf13/cobra/pull/1044 [1] https://pkg.go.dev/text/template [2] https://github.com/spf13/cobra/blob/v1.2.1/command.go#L491 [3] https://golang.org/doc/effective_go#init https://github.com/containers/toolbox/pull/917
This commit is contained in:
parent
b49149f0c5
commit
e598e21603
1 changed files with 8 additions and 12 deletions
|
@ -62,11 +62,6 @@ var (
|
|||
)
|
||||
|
||||
func Execute() {
|
||||
if err := setUpGlobals(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Error: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
if err := rootCmd.Execute(); err != nil {
|
||||
os.Exit(1)
|
||||
}
|
||||
|
@ -75,6 +70,11 @@ func Execute() {
|
|||
}
|
||||
|
||||
func init() {
|
||||
if err := setUpGlobals(); err != nil {
|
||||
fmt.Fprintf(os.Stderr, "Error: %s\n", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
persistentFlags := rootCmd.PersistentFlags()
|
||||
|
||||
persistentFlags.BoolVarP(&rootFlags.assumeYes,
|
||||
|
@ -96,7 +96,9 @@ func init() {
|
|||
persistentFlags.CountVarP(&rootFlags.verbose, "verbose", "v", "Set log-level to 'debug'")
|
||||
|
||||
rootCmd.SetHelpFunc(rootHelp)
|
||||
rootCmd.SetUsageFunc(rootUsage)
|
||||
|
||||
usageTemplate := fmt.Sprintf("Run '%s --help' for usage.", executableBase)
|
||||
rootCmd.SetUsageTemplate(usageTemplate)
|
||||
}
|
||||
|
||||
func preRun(cmd *cobra.Command, args []string) error {
|
||||
|
@ -188,12 +190,6 @@ func rootRun(cmd *cobra.Command, args []string) error {
|
|||
return rootRunImpl(cmd, args)
|
||||
}
|
||||
|
||||
func rootUsage(cmd *cobra.Command) error {
|
||||
err := fmt.Errorf("Run '%s --help' for usage.", executableBase)
|
||||
fmt.Fprintf(os.Stderr, "%s", err)
|
||||
return err
|
||||
}
|
||||
|
||||
func migrate() error {
|
||||
logrus.Debug("Migrating to newer Podman")
|
||||
|
||||
|
|
Loading…
Reference in a new issue