[ARVADOS] created: 1.1.2-7-gb0bf77a
Git user
git at public.curoverse.com
Fri Dec 22 09:46:33 EST 2017
at b0bf77a0d1013bd08237f50536eeaba9eb01915b (commit)
commit b0bf77a0d1013bd08237f50536eeaba9eb01915b
Author: Tom Clegg <tclegg at veritasgenetics.com>
Date: Fri Dec 22 09:45:58 2017 -0500
12868: arvados-client get [-format=yaml] uuid
Arvados-DCO-1.1-Signed-off-by: Tom Clegg <tclegg at veritasgenetics.com>
diff --git a/cmd/arvados-client/.gitignore b/cmd/arvados-client/.gitignore
new file mode 100644
index 0000000..21dd863
--- /dev/null
+++ b/cmd/arvados-client/.gitignore
@@ -0,0 +1 @@
+arvados-*
diff --git a/cmd/arvados-client/cmd.go b/cmd/arvados-client/cmd.go
new file mode 100644
index 0000000..52507a1
--- /dev/null
+++ b/cmd/arvados-client/cmd.go
@@ -0,0 +1,32 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+package main
+
+import (
+ "fmt"
+ "os"
+ "runtime"
+
+ "git.curoverse.com/arvados.git/lib/cli"
+ "git.curoverse.com/arvados.git/lib/cmd"
+)
+
+var version = "dev"
+
+var Run = cmd.Multi(map[string]cmd.RunFunc{
+ "get": cli.Get,
+ "version": cmdVersion,
+ "-version": cmdVersion,
+ "--version": cmdVersion,
+})
+
+func cmdVersion(string, []string) int {
+ fmt.Printf("%s %s (%s)\n", os.Args[0], version, runtime.Version())
+ return 0
+}
+
+func main() {
+ os.Exit(Run(os.Args[0], os.Args[1:]))
+}
diff --git a/lib/cli/get.go b/lib/cli/get.go
new file mode 100644
index 0000000..2f54f6c
--- /dev/null
+++ b/lib/cli/get.go
@@ -0,0 +1,65 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+package cli
+
+import (
+ "encoding/json"
+ "flag"
+ "fmt"
+ "os"
+
+ "git.curoverse.com/arvados.git/sdk/go/arvados"
+ "github.com/ghodss/yaml"
+)
+
+func Get(prog string, args []string) int {
+ var err error
+ defer func() {
+ if err != nil {
+ fmt.Fprintf(os.Stderr, "%s\n", err)
+ }
+ }()
+
+ flags := flag.NewFlagSet(prog, flag.ContinueOnError)
+ format := flags.String("format", "json", "output format (json or yaml)")
+ err = flags.Parse(args)
+ if err != nil {
+ return 2
+ }
+ if len(flags.Args()) != 1 {
+ flags.Usage()
+ return 2
+ }
+
+ id := flags.Args()[0]
+ client := arvados.NewClientFromEnv()
+ path, err := client.PathForUUID("show", id)
+ if err != nil {
+ return 1
+ }
+
+ var obj map[string]interface{}
+ err = client.RequestAndDecode(&obj, "GET", path, nil, nil)
+ if err != nil {
+ err = fmt.Errorf("GET %s: %s", path, err)
+ return 1
+ }
+ if *format == "yaml" {
+ var buf []byte
+ buf, err = yaml.Marshal(obj)
+ if err == nil {
+ _, err = os.Stdout.Write(buf)
+ }
+ } else {
+ enc := json.NewEncoder(os.Stdout)
+ enc.SetIndent("", " ")
+ err = enc.Encode(obj)
+ }
+ if err != nil {
+ err = fmt.Errorf("encoding: %s", err)
+ return 1
+ }
+ return 0
+}
diff --git a/lib/cmd/cmd.go b/lib/cmd/cmd.go
new file mode 100644
index 0000000..9e86324
--- /dev/null
+++ b/lib/cmd/cmd.go
@@ -0,0 +1,43 @@
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: Apache-2.0
+
+// package cmd defines a RunFunc type, representing a process that can
+// be invoked from a command line.
+package cmd
+
+import "log"
+
+// A RunFunc runs a command with the given args, and returns an exit
+// code.
+type RunFunc func(prog string, args []string) int
+
+// Multi returns a command that looks up its first argument in m, and
+// runs the resulting RunFunc with the remaining args.
+//
+// Example:
+//
+// os.Exit(Multi(map[string]RunFunc{
+// "foobar": func(prog string, args []string) int {
+// fmt.Println(args[0])
+// return 2
+// },
+// })("/usr/bin/multi", []string{"foobar", "baz"}))
+//
+// ...prints "baz" and exits 2.
+func Multi(m map[string]RunFunc) RunFunc {
+ return func(prog string, args []string) int {
+ if len(args) < 1 {
+ log.Printf("usage: %s command [args]", prog)
+ return 2
+ }
+ prog = args[0]
+ args = args[1:]
+ if cmd, ok := m[prog]; !ok {
+ log.Printf("unrecognized command %q", prog)
+ return 2
+ } else {
+ return cmd(prog, args)
+ }
+ }
+}
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list