From 6607e6b8603f56adb027298ee6695e06ffb3a819 Mon Sep 17 00:00:00 2001 From: Joshua Harshman Date: Fri, 27 Mar 2020 14:38:32 -0600 Subject: [PATCH] Partial Revert of #922 (#1068) Issue Reference: https://github.com/spf13/cobra/issues/1056 https://github.com/spf13/cobra/pull/922 introduced a new error type that emitted when a command was not runnable. This caused all commands w/o a run function set to error w/ that message and a status code of 1. This change reverts the addition of that new error. Similar functionality can be accomplished by leveraging RunE. --- command.go | 13 +------------ command_test.go | 4 ++-- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/command.go b/command.go index 55ddc50..fdac9d2 100644 --- a/command.go +++ b/command.go @@ -18,7 +18,6 @@ package cobra import ( "bytes" "context" - "errors" "fmt" "io" "os" @@ -29,8 +28,6 @@ import ( flag "github.com/spf13/pflag" ) -var ErrSubCommandRequired = errors.New("subcommand is required") - // FParseErrWhitelist configures Flag parse errors to be ignored type FParseErrWhitelist flag.ParseErrorsWhitelist @@ -801,7 +798,7 @@ func (c *Command) execute(a []string) (err error) { } if !c.Runnable() { - return ErrSubCommandRequired + return flag.ErrHelp } c.preRun() @@ -952,14 +949,6 @@ func (c *Command) ExecuteC() (cmd *Command, err error) { return cmd, nil } - // If command wasn't runnable, show full help, but do return the error. - // This will result in apps by default returning a non-success exit code, but also gives them the option to - // handle specially. - if err == ErrSubCommandRequired { - cmd.HelpFunc()(cmd, args) - return cmd, err - } - // If root command has SilentErrors flagged, // all subcommands should respect it if !cmd.SilenceErrors && !c.SilenceErrors { diff --git a/command_test.go b/command_test.go index 1215593..abee7ba 100644 --- a/command_test.go +++ b/command_test.go @@ -903,8 +903,8 @@ func TestHelpExecutedOnNonRunnableChild(t *testing.T) { rootCmd.AddCommand(childCmd) output, err := executeCommand(rootCmd, "child") - if err != ErrSubCommandRequired { - t.Errorf("Expected error") + if err != nil { + t.Errorf("Unexpected error: %v", err) } checkStringContains(t, output, childCmd.Long)