Skip to content

Commit

Permalink
add "config get" command to print settings values
Browse files Browse the repository at this point in the history
  • Loading branch information
ardnew committed Sep 10, 2023
1 parent 304d48c commit c0c4970
Show file tree
Hide file tree
Showing 2 changed files with 89 additions and 0 deletions.
1 change: 1 addition & 0 deletions internal/cli/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ func NewCommand() *cobra.Command {
configCommand.AddCommand(initAddCommand())
configCommand.AddCommand(initDeleteCommand())
configCommand.AddCommand(initDumpCommand())
configCommand.AddCommand(initGetCommand())
configCommand.AddCommand(initInitCommand())
configCommand.AddCommand(initRemoveCommand())
configCommand.AddCommand(initSetCommand())
Expand Down
88 changes: 88 additions & 0 deletions internal/cli/config/get.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
// This file is part of arduino-cli.
//
// Copyright 2020 ARDUINO SA (http://www.arduino.cc/)
//
// This software is released under the GNU General Public License version 3,
// which covers the main part of arduino-cli.
// The terms of this license can be found at:
// https://www.gnu.org/licenses/gpl-3.0.en.html
//
// You can be released from the requirements of the above licenses by purchasing
// a commercial license. Buying such a license is mandatory if you want to
// modify or otherwise use the software for commercial activities involving the
// Arduino software without disclosing the source code of your own applications.
// To purchase a commercial license, send an email to [email protected].

package config

import (
"os"
"reflect"

"github.com/arduino/arduino-cli/configuration"
"github.com/arduino/arduino-cli/internal/cli/feedback"
"github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"gopkg.in/yaml.v2"
)

func initGetCommand() *cobra.Command {
getCommand := &cobra.Command{
Use: "get",
Short: tr("Gets a setting value."),
Long: tr("Gets a setting value."),
Example: "" +
" " + os.Args[0] + " config get logging.level\n" +
" " + os.Args[0] + " config get logging.file\n" +
" " + os.Args[0] + " config get sketch.always_export_binaries\n" +
" " + os.Args[0] + " config get board_manager.additional_urls",
Args: cobra.MinimumNArgs(1),
Run: runGetCommand,
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
return configuration.Settings.AllKeys(), cobra.ShellCompDirectiveDefault
},
}
return getCommand
}

func runGetCommand(cmd *cobra.Command, args []string) {
logrus.Info("Executing `arduino-cli config get`")
key := args[0]
kind := validateKey(key)

if kind != reflect.Slice && len(args) > 1 {
feedback.Fatal(tr("Can't get multiple key values"), feedback.ErrGeneric)
}

var value interface{}
switch kind {
case reflect.Slice:
value = configuration.Settings.GetStringSlice(key)
case reflect.String:
value = configuration.Settings.GetString(key)
case reflect.Bool:
value = configuration.Settings.GetBool(key)
}

feedback.PrintResult(getResult{value})
}

// output from this command may require special formatting.
// create a dedicated feedback.Result implementation to safely handle
// any changes to the configuration.Settings struct.
type getResult struct {
data interface{}
}

func (gr getResult) Data() interface{} {
return gr.data
}

func (gr getResult) String() string {
gs, err := yaml.Marshal(gr.data)
if err != nil {
// Should never happen
panic(tr("unable to marshal config to YAML: %v", err))
}
return string(gs)
}

0 comments on commit c0c4970

Please sign in to comment.