14745: Improves azure driver exported var comment
[arvados.git] / lib / cmd / cmd.go
index 353167e80080cad13bac71d10eb1d33d3dd7034b..9292ef7e5ff5b3afb6012833299d9f89a7ea346c 100644 (file)
@@ -36,8 +36,9 @@ func (v Version) RunCommand(prog string, args []string, stdin io.Reader, stdout,
        return 0
 }
 
-// Multi is a Handler that looks up its first argument in a map, and
-// invokes the resulting Handler with the remaining args.
+// Multi is a Handler that looks up its first argument in a map (after
+// stripping any "arvados-" or "crunch-" prefix), and invokes the
+// resulting Handler with the remaining args.
 //
 // Example:
 //
@@ -52,19 +53,15 @@ func (v Version) RunCommand(prog string, args []string, stdin io.Reader, stdout,
 type Multi map[string]Handler
 
 func (m Multi) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
-       if len(args) < 1 {
-               fmt.Fprintf(stderr, "usage: %s command [args]\n", prog)
-               m.Usage(stderr)
-               return 2
-       }
        _, basename := filepath.Split(prog)
-       if strings.HasPrefix(basename, "arvados-") {
-               basename = basename[8:]
-       } else if strings.HasPrefix(basename, "crunch-") {
-               basename = basename[7:]
-       }
+       basename = strings.TrimPrefix(basename, "arvados-")
+       basename = strings.TrimPrefix(basename, "crunch-")
        if cmd, ok := m[basename]; ok {
                return cmd.RunCommand(prog, args, stdin, stdout, stderr)
+       } else if len(args) < 1 {
+               fmt.Fprintf(stderr, "usage: %s command [args]\n", prog)
+               m.Usage(stderr)
+               return 2
        } else if cmd, ok = m[args[0]]; ok {
                return cmd.RunCommand(prog+" "+args[0], args[1:], stdin, stdout, stderr)
        } else {