Merge branch '17462-default-secondaryfiles' refs #17462
[arvados.git] / lib / cli / get.go
index 725c696a4dbb19dfa833b06e7fa9cd9390bf2b2a..9625214e22ebd1c805fe0ae21b04c47e2304aece 100644 (file)
@@ -6,15 +6,19 @@ package cli
 
 import (
        "encoding/json"
-       "flag"
        "fmt"
        "io"
 
-       "git.curoverse.com/arvados.git/sdk/go/arvados"
+       "git.arvados.org/arvados.git/lib/cmd"
+       "git.arvados.org/arvados.git/sdk/go/arvados"
        "github.com/ghodss/yaml"
 )
 
-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 {
@@ -22,16 +26,20 @@ func Get(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer)
                }
        }()
 
-       flags := flag.NewFlagSet(prog, flag.ContinueOnError)
-       format := flags.String("format", "json", "output format (json or yaml)")
+       flags, opts := LegacyFlagSet()
+       flags.SetOutput(stderr)
        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 opts.Short {
+               opts.Format = "uuid"
+       }
 
        id := flags.Args()[0]
        client := arvados.NewClientFromEnv()
@@ -46,12 +54,14 @@ 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 opts.Format == "uuid" {
+               fmt.Fprintln(stdout, obj["uuid"])
        } else {
                enc := json.NewEncoder(stdout)
                enc.SetIndent("", "  ")