Fix -vv by temporarily patching vendored cobra

This is a temporary fix until this pull request gets merged

https://github.com/spf13/cobra/pull/391

See original ticket

https://github.com/spf13/pflag/issues/112
This commit is contained in:
Nick Craig-Wood 2017-02-11 13:57:48 +00:00
parent 666dae4229
commit 499475bb41

View file

@ -373,20 +373,18 @@ func (c *Command) resetChildrensParents() {
} }
} }
// Test if the named flag is a boolean flag. func hasNoOptDefVal(name string, f *flag.FlagSet) bool {
func isBooleanFlag(name string, f *flag.FlagSet) bool {
flag := f.Lookup(name) flag := f.Lookup(name)
if flag == nil { if flag == nil {
return false return false
} }
return flag.Value.Type() == "bool" return len(flag.NoOptDefVal) > 0
} }
// Test if the named flag is a boolean flag. func shortHasNoOptDefVal(name string, fs *flag.FlagSet) bool {
func isBooleanShortFlag(name string, f *flag.FlagSet) bool {
result := false result := false
f.VisitAll(func(f *flag.Flag) { fs.VisitAll(func(flag *flag.Flag) {
if f.Shorthand == name && f.Value.Type() == "bool" { if flag.Shorthand == name && len(flag.NoOptDefVal) > 0 {
result = true result = true
} }
}) })
@ -412,8 +410,8 @@ func stripFlags(args []string, c *Command) []string {
inQuote = true inQuote = true
case strings.HasPrefix(y, "--") && !strings.Contains(y, "="): case strings.HasPrefix(y, "--") && !strings.Contains(y, "="):
// TODO: this isn't quite right, we should really check ahead for 'true' or 'false' // TODO: this isn't quite right, we should really check ahead for 'true' or 'false'
inFlag = !isBooleanFlag(y[2:], c.Flags()) inFlag = !hasNoOptDefVal(y[2:], c.Flags())
case strings.HasPrefix(y, "-") && !strings.Contains(y, "=") && len(y) == 2 && !isBooleanShortFlag(y[1:], c.Flags()): case strings.HasPrefix(y, "-") && !strings.Contains(y, "=") && len(y) == 2 && !shortHasNoOptDefVal(y[1:], c.Flags()):
inFlag = true inFlag = true
case inFlag: case inFlag:
inFlag = false inFlag = false