Remove defaults for flags/options that expect no value

- isZeroValue function from upstream go
 - covers booleans, strings and numbers
 - change integration to reflect new behavior
 - resolves #9406

Signed-off-by: Morgan Bauer <mbauer@us.ibm.com>
This commit is contained in:
Morgan Bauer 2015-11-18 18:27:59 -08:00
parent 5edb94d724
commit 47a077d28c

View file

@ -520,6 +520,20 @@ func Set(name, value string) error {
return CommandLine.Set(name, value) return CommandLine.Set(name, value)
} }
// isZeroValue guesses whether the string represents the zero
// value for a flag. It is not accurate but in practice works OK.
func isZeroValue(value string) bool {
switch value {
case "false":
return true
case "":
return true
case "0":
return true
}
return false
}
// PrintDefaults prints, to standard error unless configured // PrintDefaults prints, to standard error unless configured
// otherwise, the default values of all defined flags in the set. // otherwise, the default values of all defined flags in the set.
func (fs *FlagSet) PrintDefaults() { func (fs *FlagSet) PrintDefaults() {
@ -537,7 +551,6 @@ func (fs *FlagSet) PrintDefaults() {
} }
fs.VisitAll(func(flag *Flag) { fs.VisitAll(func(flag *Flag) {
format := " -%s=%s"
names := []string{} names := []string{}
for _, name := range flag.Names { for _, name := range flag.Names {
if name[0] != '#' { if name[0] != '#' {
@ -551,7 +564,13 @@ func (fs *FlagSet) PrintDefaults() {
val = homedir.GetShortcutString() + val[len(home):] val = homedir.GetShortcutString() + val[len(home):]
} }
if isZeroValue(val) {
format := " -%s"
fmt.Fprintf(writer, format, strings.Join(names, ", -"))
} else {
format := " -%s=%s"
fmt.Fprintf(writer, format, strings.Join(names, ", -"), val) fmt.Fprintf(writer, format, strings.Join(names, ", -"), val)
}
for i, line := range strings.Split(flag.Usage, "\n") { for i, line := range strings.Split(flag.Usage, "\n") {
if i != 0 { if i != 0 {
line = " " + line line = " " + line