12876: Pass commands through to ruby/python programs.
[arvados.git] / lib / cli / get.go
index baa1df73e7341da026675ff0aef1973f81b7bc2e..2c60f43877139244d978972df7d02adf26af848f 100644 (file)
@@ -6,16 +6,19 @@ package cli
 
 import (
        "encoding/json"
-       "flag"
        "fmt"
        "io"
 
+       "git.curoverse.com/arvados.git/lib/cmd"
        "git.curoverse.com/arvados.git/sdk/go/arvados"
        "github.com/ghodss/yaml"
-       "rsc.io/getopt"
 )
 
-func Get(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
+var Get cmd.Handler = getCmd{}
+
+type getCmd struct{}
+
+func (getCmd) RunCommand(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer) int {
        var err error
        defer func() {
                if err != nil {
@@ -23,27 +26,19 @@ func Get(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer)
                }
        }()
 
-       flags := getopt.NewFlagSet(prog, flag.ContinueOnError)
+       flags, opts := LegacyFlagSet()
        flags.SetOutput(stderr)
-
-       format := flags.String("format", "json", "output format (json, yaml, or uuid)")
-       flags.Alias("f", "format")
-       short := flags.Bool("short", false, "equivalent to --format=uuid")
-       flags.Alias("s", "short")
-       flags.Bool("dry-run", false, "dry run (ignored, for compatibility)")
-       flags.Alias("n", "dry-run")
-       flags.Bool("verbose", false, "verbose (ignored, for compatibility)")
-       flags.Alias("v", "verbose")
        err = flags.Parse(args)
        if err != nil {
                return 2
        }
        if len(flags.Args()) != 1 {
-               flags.Usage()
+               fmt.Fprintf(stderr, "usage of %s:\n", prog)
+               flags.PrintDefaults()
                return 2
        }
-       if *short {
-               *format = "uuid"
+       if opts.Short {
+               opts.Format = "uuid"
        }
 
        id := flags.Args()[0]
@@ -59,13 +54,13 @@ func Get(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer)
                err = fmt.Errorf("GET %s: %s", path, err)
                return 1
        }
-       if *format == "yaml" {
+       if opts.Format == "yaml" {
                var buf []byte
                buf, err = yaml.Marshal(obj)
                if err == nil {
                        _, err = stdout.Write(buf)
                }
-       } else if *format == "uuid" {
+       } else if opts.Format == "uuid" {
                fmt.Fprintln(stdout, obj["uuid"])
        } else {
                enc := json.NewEncoder(stdout)