Merge PR #4433: Adopt YAML as human-readable text output
This commit is contained in:
parent
9969ef9b19
commit
e9810ac25c
|
@ -16,6 +16,7 @@ import (
|
||||||
"github.com/cosmos/cosmos-sdk/x/auth"
|
"github.com/cosmos/cosmos-sdk/x/auth"
|
||||||
|
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
"github.com/tendermint/tendermint/libs/log"
|
"github.com/tendermint/tendermint/libs/log"
|
||||||
|
@ -272,7 +273,7 @@ func (ctx CLIContext) PrintOutput(toPrint fmt.Stringer) (err error) {
|
||||||
|
|
||||||
switch ctx.OutputFormat {
|
switch ctx.OutputFormat {
|
||||||
case "text":
|
case "text":
|
||||||
out = []byte(toPrint.String())
|
out, err = yaml.Marshal(&toPrint)
|
||||||
|
|
||||||
case "json":
|
case "json":
|
||||||
if ctx.Indent {
|
if ctx.Indent {
|
||||||
|
|
|
@ -8,6 +8,7 @@ import (
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/libs/bech32"
|
"github.com/tendermint/tendermint/libs/bech32"
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
|
@ -112,23 +113,26 @@ func runFromHex(hexstr string) bool {
|
||||||
}
|
}
|
||||||
|
|
||||||
func displayParseKeyInfo(stringer fmt.Stringer) {
|
func displayParseKeyInfo(stringer fmt.Stringer) {
|
||||||
switch viper.Get(cli.OutputFlag) {
|
|
||||||
case OutputFormatText:
|
|
||||||
fmt.Printf("%s\n", stringer)
|
|
||||||
|
|
||||||
case OutputFormatJSON:
|
|
||||||
var out []byte
|
var out []byte
|
||||||
var err error
|
var err error
|
||||||
|
|
||||||
|
switch viper.Get(cli.OutputFlag) {
|
||||||
|
case OutputFormatText:
|
||||||
|
out, err = yaml.Marshal(&stringer)
|
||||||
|
|
||||||
|
case OutputFormatJSON:
|
||||||
|
|
||||||
if viper.GetBool(flags.FlagIndentResponse) {
|
if viper.GetBool(flags.FlagIndentResponse) {
|
||||||
out, err = cdc.MarshalJSONIndent(stringer, "", " ")
|
out, err = cdc.MarshalJSONIndent(stringer, "", " ")
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
out = cdc.MustMarshalJSON(stringer)
|
out = cdc.MustMarshalJSON(stringer)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
fmt.Println(string(out))
|
fmt.Println(string(out))
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
|
@ -28,7 +28,6 @@ const (
|
||||||
FlagDevice = "device"
|
FlagDevice = "device"
|
||||||
|
|
||||||
flagMultiSigThreshold = "multisig-threshold"
|
flagMultiSigThreshold = "multisig-threshold"
|
||||||
flagShowMultiSig = "show-multisig"
|
|
||||||
|
|
||||||
defaultMultiSigKeyName = "multi"
|
defaultMultiSigKeyName = "multi"
|
||||||
)
|
)
|
||||||
|
@ -49,7 +48,6 @@ consisting of all the keys provided by name and multisig threshold.`,
|
||||||
cmd.Flags().BoolP(FlagPublicKey, "p", false, "Output the public key only (overrides --output)")
|
cmd.Flags().BoolP(FlagPublicKey, "p", false, "Output the public key only (overrides --output)")
|
||||||
cmd.Flags().BoolP(FlagDevice, "d", false, "Output the address in a ledger device")
|
cmd.Flags().BoolP(FlagDevice, "d", false, "Output the address in a ledger device")
|
||||||
cmd.Flags().Uint(flagMultiSigThreshold, 1, "K out of N required signatures")
|
cmd.Flags().Uint(flagMultiSigThreshold, 1, "K out of N required signatures")
|
||||||
cmd.Flags().BoolP(flagShowMultiSig, "m", false, "Output multisig pubkey constituents, threshold, and weights")
|
|
||||||
cmd.Flags().Bool(flags.FlagIndentResponse, false, "Add indent to JSON response")
|
cmd.Flags().Bool(flags.FlagIndentResponse, false, "Add indent to JSON response")
|
||||||
|
|
||||||
return cmd
|
return cmd
|
||||||
|
@ -87,7 +85,6 @@ func runShowCmd(cmd *cobra.Command, args []string) (err error) {
|
||||||
isShowAddr := viper.GetBool(FlagAddress)
|
isShowAddr := viper.GetBool(FlagAddress)
|
||||||
isShowPubKey := viper.GetBool(FlagPublicKey)
|
isShowPubKey := viper.GetBool(FlagPublicKey)
|
||||||
isShowDevice := viper.GetBool(FlagDevice)
|
isShowDevice := viper.GetBool(FlagDevice)
|
||||||
isShowMultiSig := viper.GetBool(flagShowMultiSig)
|
|
||||||
|
|
||||||
isOutputSet := false
|
isOutputSet := false
|
||||||
tmp := cmd.Flag(cli.OutputFlag)
|
tmp := cmd.Flag(cli.OutputFlag)
|
||||||
|
@ -113,8 +110,6 @@ func runShowCmd(cmd *cobra.Command, args []string) (err error) {
|
||||||
printKeyAddress(info, bechKeyOut)
|
printKeyAddress(info, bechKeyOut)
|
||||||
case isShowPubKey:
|
case isShowPubKey:
|
||||||
printPubKey(info, bechKeyOut)
|
printPubKey(info, bechKeyOut)
|
||||||
case isShowMultiSig:
|
|
||||||
printMultiSigKeyInfo(info, bechKeyOut)
|
|
||||||
default:
|
default:
|
||||||
printKeyInfo(info, bechKeyOut)
|
printKeyInfo(info, bechKeyOut)
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,12 +2,11 @@ package keys
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/olekukonko/tablewriter"
|
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||||
"github.com/cosmos/cosmos-sdk/client/input"
|
"github.com/cosmos/cosmos-sdk/client/input"
|
||||||
|
@ -92,22 +91,6 @@ func getLazyKeyBaseFromDir(rootDir string) (keys.Keybase, error) {
|
||||||
return keys.New(defaultKeyDBName, filepath.Join(rootDir, "keys")), nil
|
return keys.New(defaultKeyDBName, filepath.Join(rootDir, "keys")), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func printMultiSigKeyInfo(keyInfo keys.Info, bechKeyOut bechKeyOutFn) {
|
|
||||||
ko, err := bechKeyOut(keyInfo)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
table := tablewriter.NewWriter(os.Stdout)
|
|
||||||
table.SetHeader([]string{"WEIGHT", "THRESHOLD", "ADDRESS", "PUBKEY"})
|
|
||||||
threshold := fmt.Sprintf("%d", ko.Threshold)
|
|
||||||
for _, pk := range ko.PubKeys {
|
|
||||||
weight := fmt.Sprintf("%d", pk.Weight)
|
|
||||||
table.Append([]string{weight, threshold, pk.Address, pk.PubKey})
|
|
||||||
}
|
|
||||||
table.Render()
|
|
||||||
}
|
|
||||||
|
|
||||||
func printKeyInfo(keyInfo keys.Info, bechKeyOut bechKeyOutFn) {
|
func printKeyInfo(keyInfo keys.Info, bechKeyOut bechKeyOutFn) {
|
||||||
ko, err := bechKeyOut(keyInfo)
|
ko, err := bechKeyOut(keyInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -157,17 +140,16 @@ func printInfos(infos []keys.Info) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
fmt.Println(string(out))
|
fmt.Printf("%s", out)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func printTextInfos(kos []keys.KeyOutput) {
|
func printTextInfos(kos []keys.KeyOutput) {
|
||||||
table := tablewriter.NewWriter(os.Stdout)
|
out, err := yaml.Marshal(&kos)
|
||||||
table.SetHeader([]string{"NAME", "TYPE", "ADDRESS", "PUBKEY"})
|
if err != nil {
|
||||||
for _, ko := range kos {
|
panic(err)
|
||||||
table.Append([]string{ko.Name, ko.Type, ko.Address, ko.PubKey})
|
|
||||||
}
|
}
|
||||||
table.Render()
|
fmt.Println(string(out))
|
||||||
}
|
}
|
||||||
|
|
||||||
func printKeyAddress(info keys.Info, bechKeyOut bechKeyOutFn) {
|
func printKeyAddress(info keys.Info, bechKeyOut bechKeyOutFn) {
|
||||||
|
|
2
go.mod
2
go.mod
|
@ -45,7 +45,7 @@ require (
|
||||||
github.com/tendermint/tendermint v0.31.5
|
github.com/tendermint/tendermint v0.31.5
|
||||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793
|
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793
|
||||||
google.golang.org/grpc v1.19.0 // indirect
|
google.golang.org/grpc v1.19.0 // indirect
|
||||||
gopkg.in/yaml.v2 v2.2.2 // indirect
|
gopkg.in/yaml.v2 v2.2.2
|
||||||
)
|
)
|
||||||
|
|
||||||
replace golang.org/x/crypto => github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5
|
replace golang.org/x/crypto => github.com/tendermint/crypto v0.0.0-20180820045704-3764759f34a5
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands"
|
tcmd "github.com/tendermint/tendermint/cmd/tendermint/commands"
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
|
@ -18,14 +19,6 @@ import (
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
|
||||||
versionString = `Tendermint: %s
|
|
||||||
ABCI: %s
|
|
||||||
BlockProtocol: %d
|
|
||||||
P2PProtocol: %d
|
|
||||||
`
|
|
||||||
)
|
|
||||||
|
|
||||||
// ShowNodeIDCmd - ported from Tendermint, dump node ID to stdout
|
// ShowNodeIDCmd - ported from Tendermint, dump node ID to stdout
|
||||||
func ShowNodeIDCmd(ctx *Context) *cobra.Command {
|
func ShowNodeIDCmd(ctx *Context) *cobra.Command {
|
||||||
return &cobra.Command{
|
return &cobra.Command{
|
||||||
|
@ -110,9 +103,22 @@ against which this app has been compiled.
|
||||||
`,
|
`,
|
||||||
RunE: func(cmd *cobra.Command, args []string) error {
|
RunE: func(cmd *cobra.Command, args []string) error {
|
||||||
|
|
||||||
fmt.Printf(versionString, tversion.Version, tversion.ABCIVersion,
|
bs, err := yaml.Marshal(&struct {
|
||||||
tversion.BlockProtocol.Uint64(), tversion.P2PProtocol.Uint64())
|
Tendermint string
|
||||||
|
ABCI string
|
||||||
|
BlockProtocol uint64
|
||||||
|
P2PProtocol uint64
|
||||||
|
}{
|
||||||
|
Tendermint: tversion.Version,
|
||||||
|
ABCI: tversion.ABCIVersion,
|
||||||
|
BlockProtocol: tversion.BlockProtocol.Uint64(),
|
||||||
|
P2PProtocol: tversion.P2PProtocol.Uint64(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Println(string(bs))
|
||||||
return nil
|
return nil
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,6 +8,8 @@ import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/crypto"
|
"github.com/tendermint/tendermint/crypto"
|
||||||
cryptoAmino "github.com/tendermint/tendermint/crypto/encoding/amino"
|
cryptoAmino "github.com/tendermint/tendermint/crypto/encoding/amino"
|
||||||
|
|
||||||
|
@ -71,6 +73,10 @@ var _ Address = AccAddress{}
|
||||||
var _ Address = ValAddress{}
|
var _ Address = ValAddress{}
|
||||||
var _ Address = ConsAddress{}
|
var _ Address = ConsAddress{}
|
||||||
|
|
||||||
|
var _ yaml.Marshaler = AccAddress{}
|
||||||
|
var _ yaml.Marshaler = ValAddress{}
|
||||||
|
var _ yaml.Marshaler = ConsAddress{}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// account
|
// account
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@ -165,6 +171,11 @@ func (aa AccAddress) MarshalJSON() ([]byte, error) {
|
||||||
return json.Marshal(aa.String())
|
return json.Marshal(aa.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalYAML marshals to YAML using Bech32.
|
||||||
|
func (aa AccAddress) MarshalYAML() (interface{}, error) {
|
||||||
|
return aa.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
// UnmarshalJSON unmarshals from JSON assuming Bech32 encoding.
|
// UnmarshalJSON unmarshals from JSON assuming Bech32 encoding.
|
||||||
func (aa *AccAddress) UnmarshalJSON(data []byte) error {
|
func (aa *AccAddress) UnmarshalJSON(data []byte) error {
|
||||||
var s string
|
var s string
|
||||||
|
@ -182,6 +193,23 @@ func (aa *AccAddress) UnmarshalJSON(data []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalYAML unmarshals from JSON assuming Bech32 encoding.
|
||||||
|
func (aa *AccAddress) UnmarshalYAML(data []byte) error {
|
||||||
|
var s string
|
||||||
|
err := yaml.Unmarshal(data, &s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
aa2, err := AccAddressFromBech32(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*aa = aa2
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Bytes returns the raw address bytes.
|
// Bytes returns the raw address bytes.
|
||||||
func (aa AccAddress) Bytes() []byte {
|
func (aa AccAddress) Bytes() []byte {
|
||||||
return aa
|
return aa
|
||||||
|
@ -296,6 +324,11 @@ func (va ValAddress) MarshalJSON() ([]byte, error) {
|
||||||
return json.Marshal(va.String())
|
return json.Marshal(va.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalYAML marshals to YAML using Bech32.
|
||||||
|
func (va ValAddress) MarshalYAML() (interface{}, error) {
|
||||||
|
return va.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
// UnmarshalJSON unmarshals from JSON assuming Bech32 encoding.
|
// UnmarshalJSON unmarshals from JSON assuming Bech32 encoding.
|
||||||
func (va *ValAddress) UnmarshalJSON(data []byte) error {
|
func (va *ValAddress) UnmarshalJSON(data []byte) error {
|
||||||
var s string
|
var s string
|
||||||
|
@ -314,6 +347,24 @@ func (va *ValAddress) UnmarshalJSON(data []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalYAML unmarshals from YAML assuming Bech32 encoding.
|
||||||
|
func (va *ValAddress) UnmarshalYAML(data []byte) error {
|
||||||
|
var s string
|
||||||
|
|
||||||
|
err := yaml.Unmarshal(data, &s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
va2, err := ValAddressFromBech32(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*va = va2
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Bytes returns the raw address bytes.
|
// Bytes returns the raw address bytes.
|
||||||
func (va ValAddress) Bytes() []byte {
|
func (va ValAddress) Bytes() []byte {
|
||||||
return va
|
return va
|
||||||
|
@ -433,6 +484,11 @@ func (ca ConsAddress) MarshalJSON() ([]byte, error) {
|
||||||
return json.Marshal(ca.String())
|
return json.Marshal(ca.String())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// MarshalYAML marshals to YAML using Bech32.
|
||||||
|
func (ca ConsAddress) MarshalYAML() (interface{}, error) {
|
||||||
|
return ca.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
// UnmarshalJSON unmarshals from JSON assuming Bech32 encoding.
|
// UnmarshalJSON unmarshals from JSON assuming Bech32 encoding.
|
||||||
func (ca *ConsAddress) UnmarshalJSON(data []byte) error {
|
func (ca *ConsAddress) UnmarshalJSON(data []byte) error {
|
||||||
var s string
|
var s string
|
||||||
|
@ -451,6 +507,24 @@ func (ca *ConsAddress) UnmarshalJSON(data []byte) error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UnmarshalYAML unmarshals from YAML assuming Bech32 encoding.
|
||||||
|
func (ca *ConsAddress) UnmarshalYAML(data []byte) error {
|
||||||
|
var s string
|
||||||
|
|
||||||
|
err := yaml.Unmarshal(data, &s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
ca2, err := ConsAddressFromBech32(s)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*ca = ca2
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Bytes returns the raw address bytes.
|
// Bytes returns the raw address bytes.
|
||||||
func (ca ConsAddress) Bytes() []byte {
|
func (ca ConsAddress) Bytes() []byte {
|
||||||
return ca
|
return ca
|
||||||
|
|
|
@ -4,12 +4,14 @@ import (
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"fmt"
|
||||||
"math/rand"
|
"math/rand"
|
||||||
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/crypto/ed25519"
|
"github.com/tendermint/tendermint/crypto/ed25519"
|
||||||
|
"github.com/tendermint/tendermint/crypto/secp256k1"
|
||||||
|
|
||||||
"github.com/cosmos/cosmos-sdk/types"
|
"github.com/cosmos/cosmos-sdk/types"
|
||||||
)
|
)
|
||||||
|
@ -93,6 +95,23 @@ func TestRandBech32PubkeyConsistency(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestYAMLMarshalers(t *testing.T) {
|
||||||
|
addr := secp256k1.GenPrivKey().PubKey().Address()
|
||||||
|
|
||||||
|
acc := types.AccAddress(addr)
|
||||||
|
val := types.ValAddress(addr)
|
||||||
|
cons := types.ConsAddress(addr)
|
||||||
|
|
||||||
|
got, _ := yaml.Marshal(&acc)
|
||||||
|
require.Equal(t, acc.String()+"\n", string(got))
|
||||||
|
|
||||||
|
got, _ = yaml.Marshal(&val)
|
||||||
|
require.Equal(t, val.String()+"\n", string(got))
|
||||||
|
|
||||||
|
got, _ = yaml.Marshal(&cons)
|
||||||
|
require.Equal(t, cons.String()+"\n", string(got))
|
||||||
|
}
|
||||||
|
|
||||||
func TestRandBech32AccAddrConsistency(t *testing.T) {
|
func TestRandBech32AccAddrConsistency(t *testing.T) {
|
||||||
var pub ed25519.PubKeyEd25519
|
var pub ed25519.PubKeyEd25519
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import (
|
||||||
|
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
"github.com/spf13/viper"
|
"github.com/spf13/viper"
|
||||||
|
"gopkg.in/yaml.v2"
|
||||||
|
|
||||||
"github.com/tendermint/tendermint/libs/cli"
|
"github.com/tendermint/tendermint/libs/cli"
|
||||||
)
|
)
|
||||||
|
@ -28,16 +29,21 @@ var Cmd = &cobra.Command{
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if viper.GetString(cli.OutputFlag) != "json" {
|
var bz []byte
|
||||||
fmt.Println(verInfo)
|
var err error
|
||||||
return nil
|
|
||||||
|
switch viper.GetString(cli.OutputFlag) {
|
||||||
|
case "json":
|
||||||
|
bz, err = json.Marshal(verInfo)
|
||||||
|
default:
|
||||||
|
bz, err = yaml.Marshal(&verInfo)
|
||||||
}
|
}
|
||||||
|
|
||||||
bz, err := json.Marshal(verInfo)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
fmt.Println(string(bz))
|
|
||||||
return nil
|
_, err = fmt.Println(string(bz))
|
||||||
|
return err
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue