Improve error handling in commands

Cobra, the CLI commander in use in Hugo, has some long awaited improvements in the error handling department.
This enables a more centralized error handling approach.

This commit introduces that by changing all the command funcs to `RunE`:

* The core part of the error logging, usage logging and `os.Exit(-1)` is now performed in one place and that one place only.
* The usage text is now only shown on invalid arguments etc. (user errors)

Fixes #1502
This commit is contained in:
Bjørn Erik Pedersen 2015-12-02 11:42:53 +01:00 committed by Anthony Fok
parent 6959b7fa80
commit 3f0f7eed68
17 changed files with 219 additions and 155 deletions

View file

@ -28,9 +28,12 @@ var benchmark = &cobra.Command{
Short: "Benchmark hugo by building a site a number of times.",
Long: `Hugo can build a site many times over and analyze the running process
creating a benchmark.`,
Run: func(cmd *cobra.Command, args []string) {
InitializeConfig()
bench(cmd, args)
RunE: func(cmd *cobra.Command, args []string) error {
if err := InitializeConfig(); err != nil {
return err
}
return bench(cmd, args)
},
}
@ -41,13 +44,13 @@ func init() {
benchmark.Flags().IntVarP(&benchmarkTimes, "count", "n", 13, "number of times to build the site")
}
func bench(cmd *cobra.Command, args []string) {
func bench(cmd *cobra.Command, args []string) error {
if memProfilefile != "" {
f, err := os.Create(memProfilefile)
if err != nil {
panic(err)
return err
}
for i := 0; i < benchmarkTimes; i++ {
_ = buildSite()
@ -62,7 +65,7 @@ func bench(cmd *cobra.Command, args []string) {
f, err := os.Create(cpuProfilefile)
if err != nil {
panic(err)
return err
}
pprof.StartCPUProfile(f)
@ -72,4 +75,6 @@ func bench(cmd *cobra.Command, args []string) {
}
}
return nil
}