From 48718a3c772681b4a3644ba304d37fb9382e6f73 Mon Sep 17 00:00:00 2001 From: Morgan Bauer Date: Wed, 18 Nov 2015 18:27:59 -0800 Subject: [PATCH] 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 --- integration-cli/docker_cli_help_test.go | 2 +- pkg/mflag/flag.go | 23 +++++++++++++++++++++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/integration-cli/docker_cli_help_test.go b/integration-cli/docker_cli_help_test.go index 5c18439316..8ec218bda0 100644 --- a/integration-cli/docker_cli_help_test.go +++ b/integration-cli/docker_cli_help_test.go @@ -126,7 +126,7 @@ func (s *DockerSuite) TestHelpTextVerify(c *check.C) { out, stderr, _, err = runCommandWithStdoutStderr(helpCmd) c.Assert(len(stderr), checker.Equals, 0, check.Commentf("Error on %q help. non-empty stderr:%q", cmd, stderr)) c.Assert(out, checker.Not(checker.HasSuffix), "\n\n", check.Commentf("Should not have blank line on %q\n", cmd)) - c.Assert(out, checker.Contains, "--help=false", check.Commentf("Should show full usage on %q\n", cmd)) + c.Assert(out, checker.Contains, "--help", check.Commentf("All commands should mention '--help'. Command '%v' did not.\n", cmd)) c.Assert(err, checker.IsNil, check.Commentf(out)) diff --git a/pkg/mflag/flag.go b/pkg/mflag/flag.go index 43fd305142..d430f13a2b 100644 --- a/pkg/mflag/flag.go +++ b/pkg/mflag/flag.go @@ -520,6 +520,20 @@ func Set(name, value string) error { 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 // otherwise, the default values of all defined flags in the set. func (fs *FlagSet) PrintDefaults() { @@ -537,7 +551,6 @@ func (fs *FlagSet) PrintDefaults() { } fs.VisitAll(func(flag *Flag) { - format := " -%s=%s" names := []string{} for _, name := range flag.Names { if name[0] != '#' { @@ -551,7 +564,13 @@ func (fs *FlagSet) PrintDefaults() { val = homedir.GetShortcutString() + val[len(home):] } - fmt.Fprintf(writer, format, strings.Join(names, ", -"), val) + if isZeroValue(val) { + format := " -%s" + fmt.Fprintf(writer, format, strings.Join(names, ", -")) + } else { + format := " -%s=%s" + fmt.Fprintf(writer, format, strings.Join(names, ", -"), val) + } for i, line := range strings.Split(flag.Usage, "\n") { if i != 0 { line = " " + line