google / subcommands

Go subcommand library.
Apache License 2.0
749 stars 48 forks source link

Commander misses initializing flagset output #38

Open fgm opened 2 years ago

fgm commented 2 years ago

Description

In the *Commander.Execute method, a new flag.FlagSet is initialized for the command to run. However, the FlagSet.output of that FlagSet is not initialized, which causes potential errors to be reported by f.failf(), which in turn invokes f.Output(), which falls back to os.Stderr because the field is not initialized.

This causes the error output not to match the commander .Error property, preventing capture/redirection especially during tests.

What should happen

The output of the newly created FieldSet should be set to either the cdr.topFlags output, or to cdr.Error during initialization, with the latter slightly being more logical.