diff --git a/cmd/tailscale/cli/cli.go b/cmd/tailscale/cli/cli.go index 0dcc8b463..8832d004e 100644 --- a/cmd/tailscale/cli/cli.go +++ b/cmd/tailscale/cli/cli.go @@ -297,55 +297,14 @@ func strSliceContains(ss []string, s string) bool { // usageFuncNoDefaultValues is like usageFunc but doesn't print default values. func usageFuncNoDefaultValues(c *ffcli.Command) string { - var b strings.Builder - - fmt.Fprintf(&b, "USAGE\n") - if c.ShortUsage != "" { - fmt.Fprintf(&b, " %s\n", c.ShortUsage) - } else { - fmt.Fprintf(&b, " %s\n", c.Name) - } - fmt.Fprintf(&b, "\n") - - if c.LongHelp != "" { - fmt.Fprintf(&b, "%s\n\n", c.LongHelp) - } - - if len(c.Subcommands) > 0 { - fmt.Fprintf(&b, "SUBCOMMANDS\n") - tw := tabwriter.NewWriter(&b, 0, 2, 2, ' ', 0) - for _, subcommand := range c.Subcommands { - fmt.Fprintf(tw, " %s\t%s\n", subcommand.Name, subcommand.ShortHelp) - } - tw.Flush() - fmt.Fprintf(&b, "\n") - } - - if countFlags(c.FlagSet) > 0 { - fmt.Fprintf(&b, "FLAGS\n") - tw := tabwriter.NewWriter(&b, 0, 2, 2, ' ', 0) - c.FlagSet.VisitAll(func(f *flag.Flag) { - var s string - name, usage := flag.UnquoteUsage(f) - s = fmt.Sprintf(" --%s", f.Name) // Two spaces before --; see next two comments. - if len(name) > 0 { - s += " " + name - } - // Four spaces before the tab triggers good alignment - // for both 4- and 8-space tab stops. - s += "\n \t" - s += strings.ReplaceAll(usage, "\n", "\n \t") - - fmt.Fprintln(&b, s) - }) - tw.Flush() - fmt.Fprintf(&b, "\n") - } - - return strings.TrimSpace(b.String()) + return usageFuncOpt(c, false) } func usageFunc(c *ffcli.Command) string { + return usageFuncOpt(c, true) +} + +func usageFuncOpt(c *ffcli.Command, withDefaults bool) string { var b strings.Builder fmt.Fprintf(&b, "USAGE\n") @@ -389,7 +348,7 @@ func usageFunc(c *ffcli.Command) string { s += "\n \t" s += strings.ReplaceAll(usage, "\n", "\n \t") - if f.DefValue != "" { + if f.DefValue != "" && withDefaults { s += fmt.Sprintf(" (default %s)", f.DefValue) }