From 0ed6de0cbd7367ce17a3e42711fcab54025b04db Mon Sep 17 00:00:00 2001 From: Alessio Treglia Date: Tue, 29 Jan 2019 14:25:43 -0800 Subject: [PATCH] Merge PR #3426: Various changes to version cmd, revert those which previously broke ABI * version prints out short info by default Handle -o json, add --long flag to print full version info. * Add distclean target to Makefile * Update PENDING.md * Add missing targets in .PHONY --- Makefile | 5 ++++- PENDING.md | 1 + baseapp/baseapp.go | 2 +- client/rpc/root.go | 2 +- version/command.go | 45 +++++++++++++++++++++++++++++++-------------- version/version.go | 25 +++++++++++++++++++++++++ 6 files changed, 63 insertions(+), 17 deletions(-) diff --git a/Makefile b/Makefile index 96be180fd..037366c41 100644 --- a/Makefile +++ b/Makefile @@ -124,6 +124,9 @@ draw_deps: tools clean: rm -f devtools-stamp vendor-deps snapcraft.yaml +distclean: clean + rm -rf vendor/ + ######################################## ### Documentation @@ -250,7 +253,7 @@ build-snap-edge: snapcraft.yaml # To avoid unintended conflicts with file names, always add to .PHONY # unless there is a reason not to. # https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html -.PHONY: build install install_debug dist \ +.PHONY: build install install_debug dist clean distclean \ check_tools check_dev_tools get_vendor_deps draw_deps test test_cli test_unit \ test_cover test_lint benchmark devdoc_init devdoc devdoc_save devdoc_update \ build-linux build-docker-gaiadnode localnet-start localnet-stop \ diff --git a/PENDING.md b/PENDING.md index 7fc54004b..d2a365fde 100644 --- a/PENDING.md +++ b/PENDING.md @@ -8,6 +8,7 @@ BREAKING CHANGES * Gaia CLI (`gaiacli`) - [#3399](https://github.com/cosmos/cosmos-sdk/pull/3399) Add `gaiad validate-genesis` command to facilitate checking of genesis files + - [\#1894](https://github.com/cosmos/cosmos-sdk/issues/1894) `version` prints out short info by default. Add `--long` flag. Proper handling of `--format` flag introduced. * Gaia diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index cfeb97214..950125180 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -396,7 +396,7 @@ func handleQueryApp(app *BaseApp, path []string, req abci.RequestQuery) (res abc return abci.ResponseQuery{ Code: uint32(sdk.CodeOK), Codespace: string(sdk.CodespaceRoot), - Value: []byte(version.GetVersion()), + Value: []byte(version.Version), } default: result = sdk.ErrUnknownRequest(fmt.Sprintf("Unknown query: %s", path)).Result() diff --git a/client/rpc/root.go b/client/rpc/root.go index cb25b47f3..83ee51786 100644 --- a/client/rpc/root.go +++ b/client/rpc/root.go @@ -26,7 +26,7 @@ func RegisterRoutes(cliCtx context.CLIContext, r *mux.Router) { // cli version REST handler endpoint func CLIVersionRequestHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") - w.Write([]byte(fmt.Sprintf("{\"version\": \"%s\"}", version.GetVersion()))) + w.Write([]byte(fmt.Sprintf("{\"version\": \"%s\"}", version.Version))) } // connected node version REST handler endpoint diff --git a/version/command.go b/version/command.go index 49cf1e021..c3ff71df1 100644 --- a/version/command.go +++ b/version/command.go @@ -1,31 +1,48 @@ package version import ( + "encoding/json" "fmt" - "runtime" "github.com/spf13/cobra" + "github.com/spf13/viper" + + "github.com/tendermint/tendermint/libs/cli" +) + +const ( + flagLong = "long" ) var ( + // VersionCmd prints out the current sdk version VersionCmd = &cobra.Command{ Use: "version", Short: "Print the app version", - Run: printVersion, + RunE: func(_ *cobra.Command, _ []string) error { + verInfo := newVersionInfo() + + if !viper.GetBool(flagLong) { + fmt.Println(verInfo.CosmosSDK) + return nil + } + + if viper.GetString(cli.OutputFlag) != "json" { + fmt.Print(verInfo) + return nil + } + + bz, err := json.Marshal(verInfo) + if err != nil { + return err + } + fmt.Println(string(bz)) + return nil + }, } ) -// return version of CLI/node and commit hash -func GetVersion() string { - return Version -} - -// CMD -func printVersion(cmd *cobra.Command, args []string) { - fmt.Println("cosmos-sdk:", GetVersion()) - fmt.Println("git commit:", Commit) - fmt.Println("vendor hash:", VendorDirHash) - fmt.Printf("go version %s %s/%s\n", - runtime.Version(), runtime.GOOS, runtime.GOARCH) +func init() { + VersionCmd.Flags().Bool(flagLong, false, "Print long version information") } diff --git a/version/version.go b/version/version.go index 031976ecd..6affcfbd4 100644 --- a/version/version.go +++ b/version/version.go @@ -1,9 +1,34 @@ //nolint package version +import ( + "fmt" + "runtime" +) + // Variables set by build flags var ( Commit = "" Version = "" VendorDirHash = "" ) + +type versionInfo struct { + CosmosSDK string `json:"cosmos_sdk"` + GitCommit string `json:"commit"` + VendorDirHash string `json:"vendor_hash"` + GoVersion string `json:"go"` +} + +func (v versionInfo) String() string { + return fmt.Sprintf(`cosmos-sdk: %s +git commit: %s +vendor hash: %s +%s`, v.CosmosSDK, v.GitCommit, v.VendorDirHash, v.GoVersion) +} + +func newVersionInfo() versionInfo { + return versionInfo{ + Version, Commit, VendorDirHash, fmt.Sprintf("go version %s %s/%s\n", + runtime.Version(), runtime.GOOS, runtime.GOARCH)} +}