diff --git a/app.go b/app.go index edf02fb..deb8e7f 100644 --- a/app.go +++ b/app.go @@ -94,7 +94,9 @@ func (a *App) Run(arguments []string) error { // append help to commands if a.Command(helpCommand.Name) == nil && !a.HideHelp { a.Commands = append(a.Commands, helpCommand) - a.appendFlag(HelpFlag) + if (HelpFlag != BoolFlag{}) { + a.appendFlag(HelpFlag) + } } //append version/help flags @@ -174,7 +176,9 @@ func (a *App) RunAsSubcommand(ctx *Context) error { if len(a.Commands) > 0 { if a.Command(helpCommand.Name) == nil && !a.HideHelp { a.Commands = append(a.Commands, helpCommand) - a.appendFlag(HelpFlag) + if (HelpFlag != BoolFlag{}) { + a.appendFlag(HelpFlag) + } } } diff --git a/app_test.go b/app_test.go index 1413199..c609a06 100644 --- a/app_test.go +++ b/app_test.go @@ -1,6 +1,7 @@ package cli_test import ( + "flag" "fmt" "os" "testing" @@ -375,6 +376,22 @@ func TestApp_BeforeFunc(t *testing.T) { } +func TestAppNoHelpFlag(t *testing.T) { + oldFlag := cli.HelpFlag + defer func() { + cli.HelpFlag = oldFlag + }() + + cli.HelpFlag = cli.BoolFlag{} + + app := cli.NewApp() + err := app.Run([]string{"test", "-h"}) + + if err != flag.ErrHelp { + t.Errorf("expected error about missing help flag, but got: %s (%T)", err, err) + } +} + func TestAppHelpPrinter(t *testing.T) { oldPrinter := cli.HelpPrinter defer func() { diff --git a/command.go b/command.go index 1536b15..0c50629 100644 --- a/command.go +++ b/command.go @@ -40,7 +40,7 @@ func (c Command) Run(ctx *Context) error { return c.startApp(ctx) } - if !c.HideHelp { + if !c.HideHelp && (HelpFlag != BoolFlag{}) { // append help to flags c.Flags = append( c.Flags, diff --git a/flag.go b/flag.go index ddd6ef8..4ccd37f 100644 --- a/flag.go +++ b/flag.go @@ -21,6 +21,8 @@ var VersionFlag = BoolFlag{ } // This flag prints the help for all commands and subcommands +// Set to the zero value (BoolFlag{}) to disable flag -- keeps subcommand +// unless HideHelp is set to true) var HelpFlag = BoolFlag{ Name: "help, h", Usage: "show help",