18790: Fix usage messages.
authorTom Clegg <tom@curii.com>
Fri, 28 Apr 2023 15:12:15 +0000 (11:12 -0400)
committerTom Clegg <tom@curii.com>
Fri, 28 Apr 2023 15:12:15 +0000 (11:12 -0400)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tom@curii.com>

cmd/arvados-client/container_gateway.go
lib/cmd/parseflags.go

index 08f37d56419d65d20f3a633149c26d745330e648..94375075c0fd6b68425d49b8351cfe8f1a026b0a 100644 (file)
@@ -34,13 +34,13 @@ type logsCommand struct {
 func (lc logsCommand) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
        f := flag.NewFlagSet(prog, flag.ContinueOnError)
        pollInterval := f.Duration("poll", time.Second*2, "minimum duration to wait before polling for new data")
-       if ok, code := cmd.ParseFlags(f, prog, args, "container-uuid", stderr); !ok {
+       if ok, code := cmd.ParseFlags(f, prog, args, "container-request-uuid", stderr); !ok {
                return code
        } else if f.NArg() < 1 {
-               fmt.Fprintf(stderr, "missing required argument: container-uuid (try -help)\n")
+               fmt.Fprintf(stderr, "missing required argument: container-request-uuid (try -help)\n")
                return 2
        } else if f.NArg() > 1 {
-               fmt.Fprintf(stderr, "encountered extra arguments after container-uuid (try -help)\n")
+               fmt.Fprintf(stderr, "encountered extra arguments after container-request-uuid (try -help)\n")
                return 2
        }
        target := f.Args()[0]
index 3e872fcd11986a2ba69786a7da3d3267128f2704..707cacbf524613e007ab5a6b9bd40abb1eaf5248 100644 (file)
@@ -8,8 +8,13 @@ import (
        "flag"
        "fmt"
        "io"
+       "reflect"
 )
 
+// Hack to enable checking whether a given FlagSet's Usage method is
+// the (private) default one.
+var defaultFlagSet = flag.NewFlagSet("none", flag.ContinueOnError)
+
 // ParseFlags calls f.Parse(args) and prints appropriate error/help
 // messages to stderr.
 //
@@ -34,7 +39,12 @@ func ParseFlags(f FlagSet, prog string, args []string, positional string, stderr
                }
                return true, 0
        case flag.ErrHelp:
-               if f, ok := f.(*flag.FlagSet); ok && f.Usage != nil {
+               // Use our own default usage func, not the one
+               // provided by the flag pkg, if the caller hasn't set
+               // one. (We use reflect to determine whether f.Usage
+               // is the private defaultUsage func that
+               // flag.NewFlagSet uses.)
+               if f, ok := f.(*flag.FlagSet); ok && f.Usage != nil && reflect.ValueOf(f.Usage).String() != reflect.ValueOf(defaultFlagSet.Usage).String() {
                        f.SetOutput(stderr)
                        f.Usage()
                } else {