From 4ce213884b9f9cbc2a245ba79bac5fdd79bd514f Mon Sep 17 00:00:00 2001 From: mmsqe Date: Mon, 15 Apr 2024 17:59:37 +0800 Subject: [PATCH] fix(client/v2): respect output format from client ctx (#20033) (cherry picked from commit 1adc1f0ca907a948cb3d586b25f0b53bbd874220) --- client/v2/CHANGELOG.md | 1 + client/v2/autocli/common.go | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/client/v2/CHANGELOG.md b/client/v2/CHANGELOG.md index b62662792bc1..17ca05586a9f 100644 --- a/client/v2/CHANGELOG.md +++ b/client/v2/CHANGELOG.md @@ -52,6 +52,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [#19976](https://github.com/cosmos/cosmos-sdk/pull/19976) Add encoder for `cosmos.base.v1beta1.DecCoin`. * [#19377](https://github.com/cosmos/cosmos-sdk/pull/19377) Partly fix comment parsing in autocli. * [#19060](https://github.com/cosmos/cosmos-sdk/pull/19060) Simplify key flag parsing logic in flag handler. +* [#20033](https://github.com/cosmos/cosmos-sdk/pull/20033) Respect output format from client ctx. ## [v2.0.0-beta.1] - 2023-11-07 diff --git a/client/v2/autocli/common.go b/client/v2/autocli/common.go index 4c9a8f07dc2b..de5cc523434a 100644 --- a/client/v2/autocli/common.go +++ b/client/v2/autocli/common.go @@ -10,6 +10,8 @@ import ( autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" "cosmossdk.io/client/v2/internal/flags" "cosmossdk.io/client/v2/internal/util" + + "github.com/cosmos/cosmos-sdk/client" ) type cmdType int @@ -225,11 +227,21 @@ func enhanceCustomCmd(builder *Builder, cmd *cobra.Command, cmdType cmdType, mod // outOrStdoutFormat formats the output based on the output flag and writes it to the command's output stream. func (b *Builder) outOrStdoutFormat(cmd *cobra.Command, out []byte) error { + clientCtx := client.Context{} + if v := cmd.Context().Value(client.ClientContextKey); v != nil { + clientCtx = *(v.(*client.Context)) + } + flagSet := cmd.Flags() + if clientCtx.OutputFormat == "" || flagSet.Changed(flags.FlagOutput) { + output, _ := flagSet.GetString(flags.FlagOutput) + clientCtx = clientCtx.WithOutputFormat(output) + } + var err error - outputType := cmd.Flag(flags.FlagOutput) + outputType := clientCtx.OutputFormat // if the output type is text, convert the json to yaml // if output type is json or nil, default to json - if outputType != nil && outputType.Value.String() == flags.OutputFormatText { + if outputType == flags.OutputFormatText { out, err = yaml.JSONToYAML(out) if err != nil { return err