main: show the command usage when a valid one is used with a bad or -h flag
diff --git a/help.go b/help.go index 218a074..a2669a1 100644 --- a/help.go +++ b/help.go
@@ -109,8 +109,3 @@ tmpl(bw, usageTemplate, commands) bw.Flush() } - -func usage() { - printUsage(os.Stderr) - os.Exit(2) -}
diff --git a/main.go b/main.go index 93c8ef8..3f435b8 100644 --- a/main.go +++ b/main.go
@@ -2,15 +2,16 @@ import ( "flag" + "fmt" "log" "os" "path/filepath" ) -var fs = flag.NewFlagSet(os.Args[0], flag.ExitOnError) +var fs = flag.NewFlagSet(os.Args[0], flag.ContinueOnError) func init() { - fs.Usage = usage + fs.Usage = func() {} } type Command struct { @@ -54,17 +55,24 @@ } if err := fs.Parse(args[1:]); err != nil { - log.Fatalf("could not parse flags: %v", err) + if err == flag.ErrHelp { + help(args[:1]) + os.Exit(0) + } + fmt.Fprint(os.Stderr, "\n") + help(args[:1]) + os.Exit(3) } - args = fs.Args() // reset args to the leftovers from fs.Parse - if err := command.Run(args); err != nil { + if err := command.Run(fs.Args()); err != nil { log.Fatalf("command %q failed: %v", command.Name, err) } return } } - log.Fatalf("unknown command %q ", args[0]) + fmt.Fprintf(os.Stderr, "unknown command: %q\n\n", args[0]) + printUsage(os.Stderr) + os.Exit(3) } const manifestfile = "manifest"