12876: More compatibility with "arv get".
authorTom Clegg <tclegg@veritasgenetics.com>
Sat, 23 Dec 2017 06:26:28 +0000 (01:26 -0500)
committerTom Clegg <tclegg@veritasgenetics.com>
Tue, 2 Jan 2018 14:44:29 +0000 (09:44 -0500)
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg@veritasgenetics.com>

cmd/arvados-client/cmd.go
lib/cli/get.go
lib/cli/get_test.go [new file with mode: 0644]

index 0df1b0c6b0badfda684923882e58b4b0db4a273e..b96cce368bc4d8b9860a476485beee378c6f9197 100644 (file)
@@ -17,12 +17,13 @@ import (
 
 var version = "dev"
 
-var Run = cmd.Multi(map[string]cmd.RunFunc{
+var Run = cmd.WithLateSubcommand(cmd.Multi(map[string]cmd.RunFunc{
        "get":       cli.Get,
+       "-e":        cmdVersion,
        "version":   cmdVersion,
        "-version":  cmdVersion,
        "--version": cmdVersion,
-})
+}), []string{"f", "format"}, []string{"n", "dry-run", "v", "verbose", "s", "short"})
 
 func cmdVersion(prog string, args []string, _ io.Reader, stdout, _ io.Writer) int {
        prog = regexp.MustCompile(` -*version$`).ReplaceAllLiteralString(prog, "")
index 725c696a4dbb19dfa833b06e7fa9cd9390bf2b2a..a7adfb65b679d70ccfbb50dffdcc9aad0bd79065 100644 (file)
@@ -23,7 +23,14 @@ 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)")
+       format := flags.String("format", "json", "output format (json, yaml, or uuid)")
+       flags.StringVar(format, "f", "json", "output format (json, yaml, or uuid)")
+       short := flags.Bool("short", false, "equivalent to --format=uuid")
+       flags.BoolVar(short, "s", false, "equivalent to --format=uuid")
+       flags.Bool("dry-run", false, "dry run (ignored, for compatibility)")
+       flags.Bool("n", false, "dry run (ignored, for compatibility)")
+       flags.Bool("verbose", false, "verbose (ignored, for compatibility)")
+       flags.Bool("v", false, "verbose (ignored, for compatibility)")
        err = flags.Parse(args)
        if err != nil {
                return 2
@@ -32,6 +39,9 @@ func Get(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer)
                flags.Usage()
                return 2
        }
+       if *short {
+               *format = "uuid"
+       }
 
        id := flags.Args()[0]
        client := arvados.NewClientFromEnv()
@@ -52,6 +62,8 @@ func Get(prog string, args []string, stdin io.Reader, stdout, stderr io.Writer)
                if err == nil {
                        _, err = stdout.Write(buf)
                }
+       } else if *format == "uuid" {
+               fmt.Fprintln(stdout, obj["uuid"])
        } else {
                enc := json.NewEncoder(stdout)
                enc.SetIndent("", "  ")
diff --git a/lib/cli/get_test.go b/lib/cli/get_test.go
new file mode 100644 (file)
index 0000000..9b8f1a0
--- /dev/null
@@ -0,0 +1,33 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+package cli
+
+import (
+       "bytes"
+       "regexp"
+       "testing"
+
+       "git.curoverse.com/arvados.git/sdk/go/arvadostest"
+       check "gopkg.in/check.v1"
+)
+
+// Gocheck boilerplate
+func Test(t *testing.T) {
+       check.TestingT(t)
+}
+
+var _ = check.Suite(&GetSuite{})
+
+type GetSuite struct{}
+
+func (s *GetSuite) TestGetCollectionJSON(c *check.C) {
+       stdout := bytes.NewBuffer(nil)
+       stderr := bytes.NewBuffer(nil)
+       exited := Get("arvados-client get", []string{arvadostest.FooCollection}, bytes.NewReader(nil), stdout, stderr)
+       c.Check(stdout.String(), check.Matches, `(?ms){.*"uuid": "`+arvadostest.FooCollection+`".*}\n`)
+       c.Check(stdout.String(), check.Matches, `(?ms){.*"portable_data_hash": "`+regexp.QuoteMeta(arvadostest.FooCollectionPDH)+`".*}\n`)
+       c.Check(stderr.String(), check.Equals, "")
+       c.Check(exited, check.Equals, 0)
+}