Refactoring: remove context switching, another way to catch panics, colored output. #96

This commit is contained in:
Andrey Smirnov
2014-08-25 22:05:02 +04:00
parent 39a1f0ec2d
commit 68e600974d
5 changed files with 80 additions and 77 deletions
+17 -16
View File
@@ -2,11 +2,10 @@ package cmd
import (
"fmt"
"os"
"github.com/smira/commander"
)
func Run(cmd_args []string, exitOnPanic bool) {
func Run(cmd *commander.Command, cmd_args []string, initContext bool) (returnCode int) {
defer func() {
if r := recover(); r != nil {
fatal, ok := r.(*FatalError)
@@ -14,29 +13,31 @@ func Run(cmd_args []string, exitOnPanic bool) {
panic(r)
}
fmt.Println("ERROR:", fatal.Message)
if exitOnPanic {
os.Exit(fatal.ReturnCode)
}
returnCode = fatal.ReturnCode
}
}()
command := RootCommand()
returnCode = 0
flags, args, err := command.ParseFlags(cmd_args)
flags, args, err := cmd.ParseFlags(cmd_args)
if err != nil {
Fatal(err)
}
err = InitContext(flags)
if err != nil {
Fatal(err)
}
defer ShutdownContext()
err = command.Dispatch(args)
if initContext {
err = InitContext(flags)
if err != nil {
Fatal(err)
}
defer ShutdownContext()
}
context.UpdateFlags(flags)
err = cmd.Dispatch(args)
if err != nil {
Fatal(err)
}
return
}