From 25d0f6c585400e1f2eeec089092c5bc16a594038 Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 4 Jan 2022 15:38:51 +0100 Subject: [PATCH 1/4] version: add json output Signed-off-by: Florian Lehner --- cmd/version.go | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/cmd/version.go b/cmd/version.go index d9a471d..1a0f9a5 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,34 +1,58 @@ package cmd import ( + "bytes" + "encoding/json" "fmt" + "os" "github.com/spf13/cobra" ) func init() { versionCmd.Flags().BoolVar(&shortened, "short", false, "Print just the version number.") + versionCmd.Flags().BoolVar(&jsonOut, "json", false, "Json output.") rootCmd.AddCommand(versionCmd) } var ( // Versioning shortened = false + jsonOut = false version = "dev" commit = "none" date = "unknown" - output = "json" versionCmd = &cobra.Command{ Use: "version", Short: "Print the current version of cernopendata-client-go", Run: func(_ *cobra.Command, _ []string) { - if shortened { + switch { + case jsonOut: + type versioning struct { + Name string + Version string + Commit string + Date string + } + b, err := json.Marshal(versioning{ + Name: "cernopendata-client-go", + Version: version, + Commit: commit, + Date: date, + }) + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to marshal json: %v", err) + return + } + var out bytes.Buffer + json.Indent(&out, b, "", "\t") + out.WriteTo(os.Stdout) + case shortened: fmt.Println(version) - } else { + default: fmt.Println("cernopendata-client-go", version, "commit", commit, "built at", date) } - return }, } ) From 51a74a8dfe4d399fb982d2ef14edff56fb7b518c Mon Sep 17 00:00:00 2001 From: Florian Lehner Date: Tue, 4 Jan 2022 15:52:24 +0100 Subject: [PATCH 2/4] list: add json output Signed-off-by: Florian Lehner --- cmd/list.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/cmd/list.go b/cmd/list.go index 300e1ee..af568bd 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -1,7 +1,10 @@ package cmd import ( + "bytes" + "encoding/json" "fmt" + "os" "github.com/spf13/cobra" ) @@ -9,6 +12,8 @@ import ( func init() { rootCmd.AddCommand(listCmd) listCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "http", "Protocol to be used (http or root)") + listCmd.Flags().BoolVar(&jsonOut, "json", false, "Json output.") + } var ( @@ -28,6 +33,17 @@ var ( if err != nil { er(err) } + if jsonOut { + b, err := json.Marshal(recordJSON) + if err != nil { + fmt.Fprintf(os.Stderr, "Failed to marshal json: %v", err) + return + } + var out bytes.Buffer + json.Indent(&out, b, "", "\t") + out.WriteTo(os.Stdout) + return + } filesList, err := getFilesList(recordJSON) if err != nil { er(err) From 19230cebbd3de6a25b195a6bcf5007129c852922 Mon Sep 17 00:00:00 2001 From: Clemens Lange Date: Mon, 10 Jan 2022 10:39:20 +0100 Subject: [PATCH 3/4] Simplify and fix JSON output --- cmd/list.go | 9 +++------ cmd/version.go | 11 ++++------- 2 files changed, 7 insertions(+), 13 deletions(-) diff --git a/cmd/list.go b/cmd/list.go index af568bd..7720c97 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -1,7 +1,6 @@ package cmd import ( - "bytes" "encoding/json" "fmt" "os" @@ -12,7 +11,7 @@ import ( func init() { rootCmd.AddCommand(listCmd) listCmd.PersistentFlags().StringVarP(&protocol, "protocol", "p", "http", "Protocol to be used (http or root)") - listCmd.Flags().BoolVar(&jsonOut, "json", false, "Json output.") + listCmd.Flags().BoolVar(&jsonOut, "json", false, "JSON output.") } @@ -34,14 +33,12 @@ var ( er(err) } if jsonOut { - b, err := json.Marshal(recordJSON) + b, err := json.MarshalIndent(recordJSON, "", "\t") if err != nil { fmt.Fprintf(os.Stderr, "Failed to marshal json: %v", err) return } - var out bytes.Buffer - json.Indent(&out, b, "", "\t") - out.WriteTo(os.Stdout) + fmt.Println(string(b)) return } filesList, err := getFilesList(recordJSON) diff --git a/cmd/version.go b/cmd/version.go index 1a0f9a5..c8d1d9c 100644 --- a/cmd/version.go +++ b/cmd/version.go @@ -1,7 +1,6 @@ package cmd import ( - "bytes" "encoding/json" "fmt" "os" @@ -11,7 +10,7 @@ import ( func init() { versionCmd.Flags().BoolVar(&shortened, "short", false, "Print just the version number.") - versionCmd.Flags().BoolVar(&jsonOut, "json", false, "Json output.") + versionCmd.Flags().BoolVar(&jsonOut, "json", false, "JSON output.") rootCmd.AddCommand(versionCmd) } @@ -35,19 +34,17 @@ var ( Commit string Date string } - b, err := json.Marshal(versioning{ + b, err := json.MarshalIndent(versioning{ Name: "cernopendata-client-go", Version: version, Commit: commit, Date: date, - }) + }, "", "\t") if err != nil { fmt.Fprintf(os.Stderr, "Failed to marshal json: %v", err) return } - var out bytes.Buffer - json.Indent(&out, b, "", "\t") - out.WriteTo(os.Stdout) + fmt.Println(string(b)) case shortened: fmt.Println(version) default: From f7335a1708c850684c3ee306cf6889a60e628f5f Mon Sep 17 00:00:00 2001 From: Clemens Lange Date: Mon, 10 Jan 2022 10:39:33 +0100 Subject: [PATCH 4/4] Update auto-generated docs --- docs/cernopendata-client-go.md | 2 +- docs/cernopendata-client-go_download.md | 2 +- docs/cernopendata-client-go_list.md | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/docs/cernopendata-client-go.md b/docs/cernopendata-client-go.md index bbf78fd..71c9c10 100644 --- a/docs/cernopendata-client-go.md +++ b/docs/cernopendata-client-go.md @@ -23,4 +23,4 @@ files and complete records. * [cernopendata-client-go download](cernopendata-client-go_download.md) - Download files belonging to a record * [cernopendata-client-go list](cernopendata-client-go_list.md) - Get a list of data file locations of a record -###### Auto generated by spf13/cobra on 21-Oct-2021 +###### Auto generated by spf13/cobra on 10-Jan-2022 diff --git a/docs/cernopendata-client-go_download.md b/docs/cernopendata-client-go_download.md index 6dccb83..1b514fc 100644 --- a/docs/cernopendata-client-go_download.md +++ b/docs/cernopendata-client-go_download.md @@ -33,4 +33,4 @@ cernopendata-client-go download [flags] * [cernopendata-client-go](cernopendata-client-go.md) - A commandline tool to interact with the CERN Open Data portal -###### Auto generated by spf13/cobra on 21-Oct-2021 +###### Auto generated by spf13/cobra on 10-Jan-2022 diff --git a/docs/cernopendata-client-go_list.md b/docs/cernopendata-client-go_list.md index f4d0d9e..f84278a 100644 --- a/docs/cernopendata-client-go_list.md +++ b/docs/cernopendata-client-go_list.md @@ -15,6 +15,7 @@ cernopendata-client-go list [flags] ``` -h, --help help for list + --json JSON output. -p, --protocol string Protocol to be used (http or root) (default "http") ``` @@ -31,4 +32,4 @@ cernopendata-client-go list [flags] * [cernopendata-client-go](cernopendata-client-go.md) - A commandline tool to interact with the CERN Open Data portal -###### Auto generated by spf13/cobra on 21-Oct-2021 +###### Auto generated by spf13/cobra on 10-Jan-2022