From 3e07cbd8ba54b574e35e763467111d229f199b35 Mon Sep 17 00:00:00 2001 From: Casey McTaggart Date: Wed, 4 Sep 2013 13:58:31 -0600 Subject: [PATCH] Show usage and exit with error whenever arguments parsing fails Signed-off-by: Damien Le Berrigaud --- app.go | 9 ++++++++- command.go | 16 +++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app.go b/app.go index 50a13e9..2655b6f 100644 --- a/app.go +++ b/app.go @@ -2,6 +2,8 @@ package cli import ( "os" + "io/ioutil" + "fmt" ) type App struct { @@ -40,12 +42,17 @@ func (a *App) Run(arguments []string) { // parse flags set := flagSet(a.Name, a.Flags) + set.SetOutput(ioutil.Discard) err := set.Parse(arguments[1:]) + context := NewContext(a, set, set) + if err != nil { + fmt.Println("Incorrect Usage.\n") + ShowAppHelp(context) + fmt.Println("") os.Exit(1) } - context := NewContext(a, set, set) checkHelp(context) checkVersion(context) diff --git a/command.go b/command.go index 6844855..f2ad467 100644 --- a/command.go +++ b/command.go @@ -1,5 +1,11 @@ package cli +import ( + "io/ioutil" + "os" + "fmt" +) + type Command struct { Name string ShortName string @@ -17,7 +23,15 @@ func (c Command) Run(ctx *Context) { ) set := flagSet(c.Name, c.Flags) - set.Parse(ctx.Args()[1:]) + set.SetOutput(ioutil.Discard) + err := set.Parse(ctx.Args()[1:]) + + if err != nil { + fmt.Println("Incorrect Usage.\n") + ShowCommandHelp(ctx, c.Name) + fmt.Println("") + os.Exit(1) + } context := NewContext(ctx.App, set, ctx.globalSet) checkCommandHelp(context, c.Name)