diff --git a/command.go b/command.go index fddc203fa..812b08608 100644 --- a/command.go +++ b/command.go @@ -18,13 +18,14 @@ package cobra import ( "bytes" "fmt" - "github.com/inconshreveable/mousetrap" - flag "github.com/spf13/pflag" "io" "os" "runtime" "strings" "time" + + "github.com/inconshreveable/mousetrap" + flag "github.com/spf13/pflag" ) // Command is just that, a command for your application. @@ -790,6 +791,13 @@ func (c *Command) HasParent() bool { return c.parent != nil } +func (c *Command) assureHelpFlag() { + if c.Flags().Lookup("help") == nil && c.PersistentFlags().Lookup("help") == nil { + c.PersistentFlags().BoolVarP(&c.helpFlagVal, "help", "h", false, "help for "+c.Name()) + } + c.mergePersistentFlags() +} + // Get the complete FlagSet that applies to this command (local and persistent declared here and by all parents) func (c *Command) Flags() *flag.FlagSet { if c.flags == nil { @@ -798,7 +806,7 @@ func (c *Command) Flags() *flag.FlagSet { c.flagErrorBuf = new(bytes.Buffer) } c.flags.SetOutput(c.flagErrorBuf) - c.PersistentFlags().BoolVarP(&c.helpFlagVal, "help", "h", false, "help for "+c.Name()) + c.assureHelpFlag() } return c.flags } @@ -934,7 +942,9 @@ func (c *Command) mergePersistentFlags() { } c.lflags.SetOutput(c.flagErrorBuf) addtolocal := func(f *flag.Flag) { - c.lflags.AddFlag(f) + if c.lflags.Lookup(f.Name) == nil { + c.lflags.AddFlag(f) + } } c.Flags().VisitAll(addtolocal) c.PersistentFlags().VisitAll(addtolocal)