use errors.Is() to check for errors (#1730)
Since go 1.13 you can wrap errors. This make it no longer possible to compare with `==`, instead you have to compare with `errors.Is()`. I noticed this problem because -h was no longer working after I stared wrapping the errors in my custom FlagErrorFunc function. Note that this is only a problem when a custom help flag is defined. Signed-off-by: Paul Holzinger <pholzing@redhat.com>
This commit is contained in:
parent
ea94a3db55
commit
b9ca5949e2
@ -18,6 +18,7 @@ package cobra
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"context"
|
"context"
|
||||||
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
@ -990,7 +991,7 @@ func (c *Command) ExecuteC() (cmd *Command, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
// Always show help if requested, even if SilenceErrors is in
|
// Always show help if requested, even if SilenceErrors is in
|
||||||
// effect
|
// effect
|
||||||
if err == flag.ErrHelp {
|
if errors.Is(err, flag.ErrHelp) {
|
||||||
cmd.HelpFunc()(cmd, args)
|
cmd.HelpFunc()(cmd, args)
|
||||||
return cmd, nil
|
return cmd, nil
|
||||||
}
|
}
|
||||||
|
@ -1723,6 +1723,38 @@ func TestFlagErrorFunc(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFlagErrorFuncHelp(t *testing.T) {
|
||||||
|
c := &Command{Use: "c", Run: emptyRun}
|
||||||
|
c.PersistentFlags().Bool("help", false, "help for c")
|
||||||
|
c.SetFlagErrorFunc(func(_ *Command, err error) error {
|
||||||
|
return fmt.Errorf("wrap error: %w", err)
|
||||||
|
})
|
||||||
|
|
||||||
|
out, err := executeCommand(c, "--help")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("--help should not fail: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
expected := `Usage:
|
||||||
|
c [flags]
|
||||||
|
|
||||||
|
Flags:
|
||||||
|
--help help for c
|
||||||
|
`
|
||||||
|
if out != expected {
|
||||||
|
t.Errorf("Expected: %v, got: %v", expected, out)
|
||||||
|
}
|
||||||
|
|
||||||
|
out, err = executeCommand(c, "-h")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("-h should not fail: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if out != expected {
|
||||||
|
t.Errorf("Expected: %v, got: %v", expected, out)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// TestSortedFlags checks,
|
// TestSortedFlags checks,
|
||||||
// if cmd.LocalFlags() is unsorted when cmd.Flags().SortFlags set to false.
|
// if cmd.LocalFlags() is unsorted when cmd.Flags().SortFlags set to false.
|
||||||
// Related to https://github.com/spf13/cobra/issues/404.
|
// Related to https://github.com/spf13/cobra/issues/404.
|
||||||
|
Loading…
Reference in New Issue
Block a user