|
|
|
@ -83,6 +83,9 @@ type App struct {
|
|
|
|
|
Writer io.Writer
|
|
|
|
|
// ErrWriter writes error output
|
|
|
|
|
ErrWriter io.Writer
|
|
|
|
|
// Execute this function to handle ExitErrors. If not provided, HandleExitCoder is provided to
|
|
|
|
|
// function as a default, so this is optional.
|
|
|
|
|
ExitErrHandler ExitErrHandlerFunc
|
|
|
|
|
// Other custom info
|
|
|
|
|
Metadata map[string]interface{}
|
|
|
|
|
// Carries a function which returns app specific info.
|
|
|
|
@ -207,7 +210,7 @@ func (a *App) Run(arguments []string) (err error) {
|
|
|
|
|
if err != nil {
|
|
|
|
|
if a.OnUsageError != nil {
|
|
|
|
|
err := a.OnUsageError(context, err, false)
|
|
|
|
|
HandleExitCoder(err)
|
|
|
|
|
a.handleExitCoder(context, err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
|
|
|
|
@ -240,8 +243,9 @@ func (a *App) Run(arguments []string) (err error) {
|
|
|
|
|
if a.Before != nil {
|
|
|
|
|
beforeErr := a.Before(context)
|
|
|
|
|
if beforeErr != nil {
|
|
|
|
|
fmt.Fprintf(a.Writer, "%v\n\n", beforeErr)
|
|
|
|
|
ShowAppHelp(context)
|
|
|
|
|
HandleExitCoder(beforeErr)
|
|
|
|
|
a.handleExitCoder(context, beforeErr)
|
|
|
|
|
err = beforeErr
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
@ -263,7 +267,7 @@ func (a *App) Run(arguments []string) (err error) {
|
|
|
|
|
// Run default Action
|
|
|
|
|
err = HandleAction(a.Action, context)
|
|
|
|
|
|
|
|
|
|
HandleExitCoder(err)
|
|
|
|
|
a.handleExitCoder(context, err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -330,7 +334,7 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) {
|
|
|
|
|
if err != nil {
|
|
|
|
|
if a.OnUsageError != nil {
|
|
|
|
|
err = a.OnUsageError(context, err, true)
|
|
|
|
|
HandleExitCoder(err)
|
|
|
|
|
a.handleExitCoder(context, err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
fmt.Fprintf(a.Writer, "%s %s\n\n", "Incorrect Usage.", err.Error())
|
|
|
|
@ -352,7 +356,7 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) {
|
|
|
|
|
defer func() {
|
|
|
|
|
afterErr := a.After(context)
|
|
|
|
|
if afterErr != nil {
|
|
|
|
|
HandleExitCoder(err)
|
|
|
|
|
a.handleExitCoder(context, err)
|
|
|
|
|
if err != nil {
|
|
|
|
|
err = NewMultiError(err, afterErr)
|
|
|
|
|
} else {
|
|
|
|
@ -365,7 +369,7 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) {
|
|
|
|
|
if a.Before != nil {
|
|
|
|
|
beforeErr := a.Before(context)
|
|
|
|
|
if beforeErr != nil {
|
|
|
|
|
HandleExitCoder(beforeErr)
|
|
|
|
|
a.handleExitCoder(context, beforeErr)
|
|
|
|
|
err = beforeErr
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
@ -383,7 +387,7 @@ func (a *App) RunAsSubcommand(ctx *Context) (err error) {
|
|
|
|
|
// Run default Action
|
|
|
|
|
err = HandleAction(a.Action, context)
|
|
|
|
|
|
|
|
|
|
HandleExitCoder(err)
|
|
|
|
|
a.handleExitCoder(context, err)
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -464,6 +468,14 @@ func (a *App) appendFlag(flag Flag) {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (a *App) handleExitCoder(context *Context, err error) {
|
|
|
|
|
if a.ExitErrHandler != nil {
|
|
|
|
|
a.ExitErrHandler(context, err)
|
|
|
|
|
} else {
|
|
|
|
|
HandleExitCoder(err)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Author represents someone who has contributed to a cli project.
|
|
|
|
|
type Author struct {
|
|
|
|
|
Name string // The Authors name
|
|
|
|
|