Documentation & housecleaning
This commit is contained in:
parent
7ba2df2eff
commit
8d87882095
55
cobra.go
55
cobra.go
@ -26,47 +26,36 @@ import (
|
|||||||
|
|
||||||
var _ = flag.ContinueOnError
|
var _ = flag.ContinueOnError
|
||||||
|
|
||||||
type Flag interface {
|
|
||||||
Args() []string
|
|
||||||
}
|
|
||||||
|
|
||||||
type Flags interface {
|
|
||||||
Lookup(string) *Flag
|
|
||||||
VisitAll(fn func(*Flag))
|
|
||||||
Parse(arguments []string) error
|
|
||||||
}
|
|
||||||
|
|
||||||
// A Commander holds the configuration for the command line tool.
|
// A Commander holds the configuration for the command line tool.
|
||||||
type Commander struct {
|
type Commander struct {
|
||||||
// A Commander is also a Command for top level and global help & flags
|
// A Commander is also a Command for top level and global help & flags
|
||||||
Command
|
Command
|
||||||
//ExitOnError, ContinueOnError or PanicOnError
|
|
||||||
behavior flag.ErrorHandling
|
|
||||||
|
|
||||||
args []string
|
args []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Provide the user with a new commander.
|
||||||
|
// Not of a lot of value today, was intended to do more than just
|
||||||
|
// create a new commander.
|
||||||
func NewCommander() (c *Commander) {
|
func NewCommander() (c *Commander) {
|
||||||
c = new(Commander)
|
c = new(Commander)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Commander) setFlagBehavior(b flag.ErrorHandling) error {
|
// Name for commander, should match application name
|
||||||
if b == flag.ExitOnError || b == flag.ContinueOnError || b == flag.PanicOnError {
|
|
||||||
c.behavior = b
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return fmt.Errorf("%v is not a valid behavior", b)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (c *Commander) SetName(name string) {
|
func (c *Commander) SetName(name string) {
|
||||||
c.name = name
|
c.name = name
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// os.Args[1:] by default, if desired, can be overridden
|
||||||
|
// particularly useful when testing.
|
||||||
func (c *Commander) SetArgs(a []string) {
|
func (c *Commander) SetArgs(a []string) {
|
||||||
c.args = a
|
c.args = a
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Call execute to use the args (os.Args[1:] by default)
|
||||||
|
// and run through the command tree finding appropriate matches
|
||||||
|
// for commands and then corresponding flags.
|
||||||
func (c *Commander) Execute() (err error) {
|
func (c *Commander) Execute() (err error) {
|
||||||
if len(c.args) == 0 {
|
if len(c.args) == 0 {
|
||||||
err = c.execute(os.Args[1:])
|
err = c.execute(os.Args[1:])
|
||||||
@ -182,6 +171,8 @@ func (c *Command) Usage(depth ...int) string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// For use in determining which flags have been assigned to which commands
|
||||||
|
// and which persist
|
||||||
func (c *Command) DebugFlags() {
|
func (c *Command) DebugFlags() {
|
||||||
fmt.Println("DebugFlags called on", c.Name())
|
fmt.Println("DebugFlags called on", c.Name())
|
||||||
var debugflags func(*Command)
|
var debugflags func(*Command)
|
||||||
@ -257,7 +248,7 @@ func (c *Command) HasSubCommands() bool {
|
|||||||
return len(c.commands) > 0
|
return len(c.commands) > 0
|
||||||
}
|
}
|
||||||
|
|
||||||
// Determine if the command has children commands
|
// Determine if the command is a child command
|
||||||
func (c *Command) HasParent() bool {
|
func (c *Command) HasParent() bool {
|
||||||
return c.parent != nil
|
return c.parent != nil
|
||||||
}
|
}
|
||||||
@ -295,10 +286,12 @@ func (c *Command) ResetFlags() {
|
|||||||
c.pflags.SetOutput(c.flagErrorBuf)
|
c.pflags.SetOutput(c.flagErrorBuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Does the command contain flags (local not persistent)
|
||||||
func (c *Command) HasFlags() bool {
|
func (c *Command) HasFlags() bool {
|
||||||
return c.Flags().HasFlags()
|
return c.Flags().HasFlags()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Does the command contain persistent flags
|
||||||
func (c *Command) HasPersistentFlags() bool {
|
func (c *Command) HasPersistentFlags() bool {
|
||||||
return c.PersistentFlags().HasFlags()
|
return c.PersistentFlags().HasFlags()
|
||||||
}
|
}
|
||||||
@ -355,23 +348,3 @@ func (c *Command) mergePersistentFlags() {
|
|||||||
|
|
||||||
rmerge(c)
|
rmerge(c)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Climbs up the command tree parsing flags from top to bottom
|
|
||||||
func (c *Command) ParsePersistentFlags(args []string) (err error) {
|
|
||||||
if !c.HasParent() || (c.parent.HasPersistentFlags() && c.parent.PersistentFlags().Parsed()) {
|
|
||||||
if c.HasPersistentFlags() {
|
|
||||||
err = c.PersistentFlags().Parse(args)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if c.HasParent() && c.parent.HasPersistentFlags() {
|
|
||||||
err = c.parent.ParsePersistentFlags(args)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user