Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit d67f3d7

Browse files
committed
config/get: unmarshal JSON RPC response
1 parent 6efcca6 commit d67f3d7

File tree

2 files changed

+19
-32
lines changed

2 files changed

+19
-32
lines changed

‎internal/cli/config/get.go‎

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
package config
1717

1818
import (
19+
"encoding/json"
20+
"fmt"
1921
"os"
2022

2123
"github.com/arduino/arduino-cli/commands/daemon"
@@ -29,11 +31,11 @@ import (
2931
func initGetCommand() *cobra.Command {
3032
getCommand := &cobra.Command{
3133
Use: "get",
32-
Short: tr("Gets settings key values."),
33-
Long: tr("Gets settings key values."),
34+
Short: tr("Gets a settings key value."),
35+
Long: tr("Gets a settings key value."),
3436
Example: "" +
3537
" " + os.Args[0] + " config get logging\n" +
36-
" " + os.Args[0] + " config get logging.level logging.file\n" +
38+
" " + os.Args[0] + " config get daemon.port\n" +
3739
" " + os.Args[0] + " config get board_manager.additional_urls",
3840
Args: cobra.MinimumNArgs(1),
3941
Run: runGetCommand,
@@ -53,27 +55,26 @@ func runGetCommand(cmd *cobra.Command, args []string) {
5355
if err != nil {
5456
feedback.Fatal(tr("Cannot get the key %[1]s: %[2]v", toGet, err), feedback.ErrGeneric)
5557
}
56-
feedback.PrintResult(getResult{key: toGet, data: resp.GetJsonData()})
58+
var result getResult
59+
err = json.Unmarshal([]byte(resp.GetJsonData()), &result.resp)
60+
if err != nil {
61+
feedback.Fatal(tr("Cannot parse JSON for key %[1]s: %[2]v", toGet, err), feedback.ErrGeneric)
62+
}
63+
feedback.PrintResult(result)
5764
}
5865
}
5966

6067
// output from this command may require special formatting.
6168
// create a dedicated feedback.Result implementation to safely handle
6269
// any changes to the configuration.Settings struct.
6370
type getResult struct {
64-
key string
65-
data interface{}
71+
resp interface{}
6672
}
6773

6874
func (gr getResult) Data() interface{} {
69-
return gr.data
75+
return gr.resp
7076
}
7177

7278
func (gr getResult) String() string {
73-
gs, ok := gr.data.(string)
74-
if !ok {
75-
// Should never happen
76-
panic(tr("Cannot get key %s value as string: %v", gr.key, gr.data))
77-
}
78-
return gs
79+
return fmt.Sprintf("%v", gr.resp)
7980
}

‎internal/integrationtest/config/config_test.go‎

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -834,31 +834,17 @@ func TestGet(t *testing.T) {
834834
// Get simple key value
835835
stdout, _, err = cli.Run("config", "get", "daemon.port", "--format", "json", "--config-file", "arduino-cli.yaml")
836836
require.NoError(t, err)
837-
require.Equal(t, `"50051"`, stdout)
837+
requirejson.Contains(t, stdout, `"50051"`)
838838

839839
// Get structured key value
840840
stdout, _, err = cli.Run("config", "get", "daemon", "--format", "json", "--config-file", "arduino-cli.yaml")
841841
require.NoError(t, err)
842-
require.Equal(t, `{"port":"50051"}`, stdout)
843-
844-
// Get multiple key values
845-
stdout, _, err = cli.Run("config", "get", "logging.format", "logging.level", "--format", "json", "--config-file", "arduino-cli.yaml")
846-
require.NoError(t, err)
847-
require.Equal(t, `"text"`+"\n"+`"info"`, stdout)
842+
requirejson.Contains(t, stdout, `{"port":"50051"}`)
848843

849844
// Get undefined key
850-
stdout, _, err = cli.Run("config", "get", "foo", "--format", "json", "--config-file", "arduino-cli.yaml")
851-
require.Empty(t, stdout)
852-
require.Contains(t, err, "Cannot get key foo")
853-
854-
// Set undefined key
855-
_, _, err = cli.Run("config", "set", "foo", "bar", "--config-file", "arduino-cli.yaml")
856-
require.NoError(t, err)
857-
858-
// Get previously-undefined key
859-
stdout, _, err = cli.Run("config", "get", "foo", "--format", "json", "--config-file", "arduino-cli.yaml")
860-
require.NoError(t, err)
861-
require.Equal(t, `"bar"`, stdout)
845+
_, stderr, err := cli.Run("config", "get", "foo", "--format", "json", "--config-file", "arduino-cli.yaml")
846+
require.Error(t, err)
847+
requirejson.Contains(t, stderr, `{"error":"Cannot get the key foo: key not found in settings"}`)
862848
}
863849

864850
func TestInitializationOrderOfConfigThroughFlagAndEnv(t *testing.T) {

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /