|
|
|
@ -1,6 +1,7 @@
|
|
|
|
|
package cli
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
"flag"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io"
|
|
|
|
@ -207,6 +208,13 @@ func (a *App) useShortOptionHandling() bool {
|
|
|
|
|
// Run is the entry point to the cli app. Parses the arguments slice and routes
|
|
|
|
|
// to the proper flag/args combination
|
|
|
|
|
func (a *App) Run(arguments []string) (err error) {
|
|
|
|
|
return a.RunContext(context.Background(), arguments)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// RunContext is like Run except it takes a Context that will be
|
|
|
|
|
// passed to its commands and sub-commands. Through this, you can
|
|
|
|
|
// propagate timeouts and cancellation requests
|
|
|
|
|
func (a *App) RunContext(ctx context.Context, arguments []string) (err error) {
|
|
|
|
|
a.Setup()
|
|
|
|
|
|
|
|
|
|
// handle the completion flag separately from the flagset since
|
|
|
|
@ -224,7 +232,7 @@ func (a *App) Run(arguments []string) (err error) {
|
|
|
|
|
|
|
|
|
|
err = parseIter(set, a, arguments[1:], shellComplete)
|
|
|
|
|
nerr := normalizeFlags(a.Flags, set)
|
|
|
|
|
context := NewContext(a, set, nil)
|
|
|
|
|
context := NewContext(a, set, &Context{Context: ctx})
|
|
|
|
|
if nerr != nil {
|
|
|
|
|
_, _ = fmt.Fprintln(a.Writer, nerr)
|
|
|
|
|
_ = ShowAppHelp(context)
|
|
|
|
|