Parsing persistentFlags properly (mostly)

This commit is contained in:
spf13 2013-09-04 00:15:18 -04:00
parent ce6447a965
commit 36e08ffd5b

View File

@ -136,7 +136,7 @@ func (c *Command) execute(args []string) (err error) {
cmd, a, e := c.Find(args)
if e == nil {
cmd.Flags().Parse(a)
err = cmd.ParseFlags(a)
argWoFlags := cmd.Flags().Args()
cmd.Run(cmd, argWoFlags)
return nil
@ -296,16 +296,20 @@ func (c *Command) ParseFlags(args []string) (err error) {
// Climbs up the command tree parsing flags from top to bottom
func (c *Command) ParsePersistentFlags(args []string) (err error) {
if !c.HasParent() || c.parent.PersistentFlags().Parsed() {
err = c.PersistentFlags().Parse(args)
if err != nil {
return err
if !c.HasParent() || (c.parent.HasPersistentFlags() && c.parent.PersistentFlags().Parsed()) {
if c.HasPersistentFlags() {
err = c.PersistentFlags().Parse(args)
if err != nil {
return err
}
}
} else {
err = c.parent.ParsePersistentFlags(args)
if err != nil {
return err
if c.HasParent() && c.parent.HasPersistentFlags() {
err = c.parent.ParsePersistentFlags(args)
if err != nil {
return err
}
}
}
return nil
return
}