Skip to content

Commit ea72158

Browse files
committed
Refactored config to not use viper singleton instance
1 parent 37ba57e commit ea72158

File tree

23 files changed

+175
-150
lines changed

23 files changed

+175
-150
lines changed

Diff for: arduino/cores/packagemanager/loader.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,12 @@ import (
3030

3131
// LoadHardware read all plaforms from the configured paths
3232
func (pm *PackageManager) LoadHardware() error {
33-
dirs := configuration.HardwareDirectories()
33+
dirs := configuration.HardwareDirectories(configuration.Settings)
3434
if err := pm.LoadHardwareFromDirectories(dirs); err != nil {
3535
return err
3636
}
3737

38-
dirs = configuration.BundleToolsDirectories()
38+
dirs = configuration.BundleToolsDirectories(configuration.Settings)
3939
return pm.LoadToolsFromBundleDirectories(dirs)
4040
}
4141

Diff for: arduino/cores/packagemanager/package_manager_test.go

+3-4
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ import (
2626
"github.com/arduino/arduino-cli/configuration"
2727
"github.com/arduino/go-paths-helper"
2828
"github.com/arduino/go-properties-orderedmap"
29-
"github.com/spf13/viper"
3029
"github.com/stretchr/testify/require"
3130
semver "go.bug.st/relaxed-semver"
3231
)
@@ -213,11 +212,11 @@ func TestBoardOptionsFunctions(t *testing.T) {
213212

214213
func TestFindToolsRequiredForBoard(t *testing.T) {
215214
os.Setenv("ARDUINO_DATA_DIR", dataDir1.String())
216-
configuration.Init("")
215+
configuration.Settings = configuration.Init("")
217216
pm := packagemanager.NewPackageManager(
218217
dataDir1,
219-
configuration.PackagesDir(),
220-
paths.New(viper.GetString("directories.Downloads")),
218+
configuration.PackagesDir(configuration.Settings),
219+
paths.New(configuration.Settings.GetString("directories.Downloads")),
221220
dataDir1,
222221
)
223222

Diff for: cli/cache/clean.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ import (
2020

2121
"github.com/arduino/arduino-cli/cli/errorcodes"
2222
"github.com/arduino/arduino-cli/cli/feedback"
23+
"github.com/arduino/arduino-cli/configuration"
2324
"github.com/sirupsen/logrus"
2425
"github.com/spf13/cobra"
25-
"github.com/spf13/viper"
2626
)
2727

2828
func initCleanCommand() *cobra.Command {
@@ -40,7 +40,7 @@ func initCleanCommand() *cobra.Command {
4040
func runCleanCommand(cmd *cobra.Command, args []string) {
4141
logrus.Info("Executing `arduino cache clean`")
4242

43-
cachePath := viper.GetString("directories.Downloads")
43+
cachePath := configuration.Settings.GetString("directories.Downloads")
4444
err := os.RemoveAll(cachePath)
4545
if err != nil {
4646
feedback.Errorf("Error cleaning caches: %v", err)

Diff for: cli/cli.go

+11-11
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,13 @@ import (
4242
"github.com/arduino/arduino-cli/cli/upgrade"
4343
"github.com/arduino/arduino-cli/cli/upload"
4444
"github.com/arduino/arduino-cli/cli/version"
45+
"github.com/arduino/arduino-cli/configuration"
4546
"github.com/arduino/arduino-cli/i18n"
4647
"github.com/arduino/arduino-cli/inventory"
4748
"github.com/mattn/go-colorable"
4849
"github.com/rifflock/lfshook"
4950
"github.com/sirupsen/logrus"
5051
"github.com/spf13/cobra"
51-
"github.com/spf13/viper"
5252
)
5353

5454
var (
@@ -99,15 +99,15 @@ func createCliCommandTree(cmd *cobra.Command) {
9999

100100
cmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Print the logs on the standard output.")
101101
cmd.PersistentFlags().String("log-level", "", "Messages with this level and above will be logged. Valid levels are: trace, debug, info, warn, error, fatal, panic")
102-
viper.BindPFlag("logging.level", cmd.PersistentFlags().Lookup("log-level"))
102+
configuration.Settings.BindPFlag("logging.level", cmd.PersistentFlags().Lookup("log-level"))
103103
cmd.PersistentFlags().String("log-file", "", "Path to the file where logs will be written.")
104-
viper.BindPFlag("logging.file", cmd.PersistentFlags().Lookup("log-file"))
104+
configuration.Settings.BindPFlag("logging.file", cmd.PersistentFlags().Lookup("log-file"))
105105
cmd.PersistentFlags().String("log-format", "", "The output format for the logs, can be {text|json}.")
106-
viper.BindPFlag("logging.format", cmd.PersistentFlags().Lookup("log-format"))
106+
configuration.Settings.BindPFlag("logging.format", cmd.PersistentFlags().Lookup("log-format"))
107107
cmd.PersistentFlags().StringVar(&outputFormat, "format", "text", "The output format, can be {text|json}.")
108108
cmd.PersistentFlags().StringVar(&configFile, "config-file", "", "The custom config file (if not specified the default will be used).")
109109
cmd.PersistentFlags().StringSlice("additional-urls", []string{}, "Comma-separated list of additional URLs for the Boards Manager.")
110-
viper.BindPFlag("board_manager.additional_urls", cmd.PersistentFlags().Lookup("additional-urls"))
110+
configuration.Settings.BindPFlag("board_manager.additional_urls", cmd.PersistentFlags().Lookup("additional-urls"))
111111
}
112112

113113
// convert the string passed to the `--log-level` option to the corresponding
@@ -136,10 +136,10 @@ func parseFormatString(arg string) (feedback.OutputFormat, bool) {
136136
}
137137

138138
func preRun(cmd *cobra.Command, args []string) {
139-
configFile := viper.ConfigFileUsed()
139+
configFile := configuration.Settings.ConfigFileUsed()
140140

141141
// initialize inventory
142-
inventory.Init(viper.GetString("directories.Data"))
142+
inventory.Init(configuration.Settings.GetString("directories.Data"))
143143

144144
//
145145
// Prepare logging
@@ -157,13 +157,13 @@ func preRun(cmd *cobra.Command, args []string) {
157157
}
158158

159159
// set the Logger format
160-
logFormat := strings.ToLower(viper.GetString("logging.format"))
160+
logFormat := strings.ToLower(configuration.Settings.GetString("logging.format"))
161161
if logFormat == "json" {
162162
logrus.SetFormatter(&logrus.JSONFormatter{})
163163
}
164164

165165
// should we log to file?
166-
logFile := viper.GetString("logging.file")
166+
logFile := configuration.Settings.GetString("logging.file")
167167
if logFile != "" {
168168
file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
169169
if err != nil {
@@ -180,8 +180,8 @@ func preRun(cmd *cobra.Command, args []string) {
180180
}
181181

182182
// configure logging filter
183-
if lvl, found := toLogLevel(viper.GetString("logging.level")); !found {
184-
feedback.Errorf("Invalid option for --log-level: %s", viper.GetString("logging.level"))
183+
if lvl, found := toLogLevel(configuration.Settings.GetString("logging.level")); !found {
184+
feedback.Errorf("Invalid option for --log-level: %s", configuration.Settings.GetString("logging.level"))
185185
os.Exit(errorcodes.ErrBadArgument)
186186
} else {
187187
logrus.SetLevel(lvl)

Diff for: cli/compile/compile.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"os"
2121

2222
"github.com/arduino/arduino-cli/cli/feedback"
23+
"github.com/arduino/arduino-cli/configuration"
2324

2425
"github.com/arduino/arduino-cli/cli/errorcodes"
2526
"github.com/arduino/arduino-cli/cli/instance"
@@ -29,7 +30,6 @@ import (
2930
"github.com/arduino/go-paths-helper"
3031
"github.com/sirupsen/logrus"
3132
"github.com/spf13/cobra"
32-
"github.com/spf13/viper"
3333
)
3434

3535
var (
@@ -124,7 +124,7 @@ func run(cmd *cobra.Command, args []string) {
124124
Libraries: libraries,
125125
OptimizeForDebug: optimizeForDebug,
126126
Clean: clean,
127-
}, os.Stdout, os.Stderr, viper.GetString("logging.level") == "debug")
127+
}, os.Stdout, os.Stderr, configuration.Settings.GetString("logging.level") == "debug")
128128

129129
if err != nil {
130130
feedback.Errorf("Error during build: %v", err)

Diff for: cli/config/dump.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ import (
1919
"os"
2020

2121
"github.com/arduino/arduino-cli/cli/feedback"
22+
"github.com/arduino/arduino-cli/configuration"
2223
"github.com/sirupsen/logrus"
2324
"github.com/spf13/cobra"
24-
"github.com/spf13/viper"
2525
"gopkg.in/yaml.v2"
2626
)
2727

@@ -59,5 +59,5 @@ func (dr dumpResult) String() string {
5959

6060
func runDumpCommand(cmd *cobra.Command, args []string) {
6161
logrus.Info("Executing `arduino config dump`")
62-
feedback.PrintResult(dumpResult{viper.AllSettings()})
62+
feedback.PrintResult(dumpResult{configuration.Settings.AllSettings()})
6363
}

Diff for: cli/config/init.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@ import (
2121

2222
"github.com/arduino/arduino-cli/cli/errorcodes"
2323
"github.com/arduino/arduino-cli/cli/feedback"
24+
"github.com/arduino/arduino-cli/configuration"
2425
"github.com/sirupsen/logrus"
2526
"github.com/spf13/cobra"
26-
"github.com/spf13/viper"
2727
)
2828

2929
var destDir string
@@ -47,7 +47,7 @@ func initInitCommand() *cobra.Command {
4747

4848
func runInitCommand(cmd *cobra.Command, args []string) {
4949
if destDir == "" {
50-
destDir = viper.GetString("directories.Data")
50+
destDir = configuration.Settings.GetString("directories.Data")
5151
}
5252

5353
absPath, err := filepath.Abs(destDir)
@@ -64,7 +64,7 @@ func runInitCommand(cmd *cobra.Command, args []string) {
6464
os.Exit(errorcodes.ErrGeneric)
6565
}
6666

67-
if err := viper.WriteConfigAs(configFileAbsPath); err != nil {
67+
if err := configuration.Settings.WriteConfigAs(configFileAbsPath); err != nil {
6868
feedback.Errorf("Cannot create config file: %v", err)
6969
os.Exit(errorcodes.ErrGeneric)
7070
}

Diff for: cli/daemon/daemon.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import (
2828
"github.com/arduino/arduino-cli/cli/feedback"
2929
"github.com/arduino/arduino-cli/cli/globals"
3030
"github.com/arduino/arduino-cli/commands/daemon"
31+
"github.com/arduino/arduino-cli/configuration"
3132
srv_commands "github.com/arduino/arduino-cli/rpc/commands"
3233
srv_debug "github.com/arduino/arduino-cli/rpc/debug"
3334
srv_monitor "github.com/arduino/arduino-cli/rpc/monitor"
@@ -36,22 +37,21 @@ import (
3637
"github.com/segmentio/stats/v4"
3738
"github.com/sirupsen/logrus"
3839
"github.com/spf13/cobra"
39-
"github.com/spf13/viper"
4040
"google.golang.org/grpc"
4141
)
4242

4343
// NewCommand created a new `daemon` command
4444
func NewCommand() *cobra.Command {
4545
cmd := &cobra.Command{
4646
Use: "daemon",
47-
Short: fmt.Sprintf("Run as a daemon on port %s", viper.GetString("daemon.port")),
47+
Short: fmt.Sprintf("Run as a daemon on port %s", configuration.Settings.GetString("daemon.port")),
4848
Long: "Running as a daemon the initialization of cores and libraries is done only once.",
4949
Example: " " + os.Args[0] + " daemon",
5050
Args: cobra.NoArgs,
5151
Run: runDaemonCommand,
5252
}
5353
cmd.PersistentFlags().String("port", "", "The TCP port the daemon will listen to")
54-
viper.BindPFlag("daemon.port", cmd.PersistentFlags().Lookup("port"))
54+
configuration.Settings.BindPFlag("daemon.port", cmd.PersistentFlags().Lookup("port"))
5555
cmd.Flags().BoolVar(&daemonize, "daemonize", false, "Do not terminate daemon process if the parent process dies")
5656
return cmd
5757
}
@@ -60,16 +60,16 @@ var daemonize bool
6060

6161
func runDaemonCommand(cmd *cobra.Command, args []string) {
6262

63-
if viper.GetBool("telemetry.enabled") {
63+
if configuration.Settings.GetBool("telemetry.enabled") {
6464
telemetry.Activate("daemon")
6565
stats.Incr("daemon", stats.T("success", "true"))
6666
defer stats.Flush()
6767
}
68-
port := viper.GetString("daemon.port")
68+
port := configuration.Settings.GetString("daemon.port")
6969
s := grpc.NewServer()
7070

7171
// Set specific user-agent for the daemon
72-
viper.Set("network.user_agent_ext", "daemon")
72+
configuration.Settings.Set("network.user_agent_ext", "daemon")
7373

7474
// register the commands service
7575
srv_commands.RegisterArduinoCoreServer(s, &daemon.ArduinoCoreServerImpl{

Diff for: commands/board/list_test.go

+9
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,19 @@ import (
2222
"testing"
2323

2424
"github.com/arduino/arduino-cli/commands"
25+
"github.com/arduino/arduino-cli/configuration"
2526
"github.com/arduino/go-properties-orderedmap"
2627
"github.com/stretchr/testify/require"
2728
)
2829

30+
func init() {
31+
configuration.Settings = configuration.Init("")
32+
}
33+
34+
func reset() {
35+
configuration.Settings = configuration.Init("")
36+
}
37+
2938
func TestGetByVidPid(t *testing.T) {
3039
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
3140
fmt.Fprintln(w, `

Diff for: commands/compile/compile.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@ import (
3939
"github.com/pkg/errors"
4040
"github.com/segmentio/stats/v4"
4141
"github.com/sirupsen/logrus"
42-
"github.com/spf13/viper"
4342
)
4443

4544
// Compile FIXMEDOC
@@ -122,11 +121,11 @@ func Compile(ctx context.Context, req *rpc.CompileReq, outStream, errStream io.W
122121
builderCtx.SketchLocation = sketch.FullPath
123122

124123
// FIXME: This will be redundant when arduino-builder will be part of the cli
125-
builderCtx.HardwareDirs = configuration.HardwareDirectories()
126-
builderCtx.BuiltInToolsDirs = configuration.BundleToolsDirectories()
124+
builderCtx.HardwareDirs = configuration.HardwareDirectories(configuration.Settings)
125+
builderCtx.BuiltInToolsDirs = configuration.BundleToolsDirectories(configuration.Settings)
127126

128127
builderCtx.OtherLibrariesDirs = paths.NewPathList(req.GetLibraries()...)
129-
builderCtx.OtherLibrariesDirs.Add(configuration.LibrariesDir())
128+
builderCtx.OtherLibrariesDirs.Add(configuration.LibrariesDir(configuration.Settings))
130129

131130
if req.GetBuildPath() != "" {
132131
builderCtx.BuildPath = paths.New(req.GetBuildPath())
@@ -168,7 +167,7 @@ func Compile(ctx context.Context, req *rpc.CompileReq, outStream, errStream io.W
168167
builderCtx.ArduinoAPIVersion = "10607"
169168

170169
// Check if Arduino IDE is installed and get it's libraries location.
171-
dataDir := paths.New(viper.GetString("directories.Data"))
170+
dataDir := paths.New(configuration.Settings.GetString("directories.Data"))
172171
preferencesTxt := dataDir.Join("preferences.txt")
173172
ideProperties, err := properties.LoadFromPath(preferencesTxt)
174173
if err == nil {

Diff for: commands/core/search_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ func TestPlatformSearch(t *testing.T) {
4646
err := paths.New("testdata").Join("package_index.json").CopyTo(dataDir.Join("package_index.json"))
4747
require.Nil(t, err)
4848

49-
configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String())
49+
configuration.Settings = configuration.Init(paths.TempDir().Join("test", "arduino-cli.yaml").String())
5050

5151
inst, err := instance.CreateInstance()
5252
require.Nil(t, err)

Diff for: commands/daemon/settings.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@ import (
2020
"encoding/json"
2121
"errors"
2222

23+
"github.com/arduino/arduino-cli/configuration"
2324
rpc "github.com/arduino/arduino-cli/rpc/settings"
24-
"github.com/spf13/viper"
2525
)
2626

2727
// SettingsService implements the `Settings` service
@@ -30,7 +30,7 @@ type SettingsService struct{}
3030
// GetAll returns a message with a string field containing all the settings
3131
// currently in use, marshalled in JSON format.
3232
func (s *SettingsService) GetAll(ctx context.Context, req *rpc.GetAllRequest) (*rpc.RawData, error) {
33-
b, err := json.Marshal(viper.AllSettings())
33+
b, err := json.Marshal(configuration.Settings.AllSettings())
3434
if err == nil {
3535
return &rpc.RawData{
3636
JsonData: string(b),
@@ -47,7 +47,7 @@ func (s *SettingsService) Merge(ctx context.Context, req *rpc.RawData) (*rpc.Mer
4747
return nil, err
4848
}
4949

50-
if err := viper.MergeConfigMap(toMerge); err != nil {
50+
if err := configuration.Settings.MergeConfigMap(toMerge); err != nil {
5151
return nil, err
5252
}
5353

@@ -61,11 +61,11 @@ func (s *SettingsService) GetValue(ctx context.Context, req *rpc.GetValueRequest
6161
key := req.GetKey()
6262
value := &rpc.Value{}
6363

64-
if !viper.InConfig(key) {
64+
if !configuration.Settings.InConfig(key) {
6565
return nil, errors.New("key not found in settings")
6666
}
6767

68-
b, err := json.Marshal(viper.Get(key))
68+
b, err := json.Marshal(configuration.Settings.Get(key))
6969
if err == nil {
7070
value.Key = key
7171
value.JsonData = string(b)
@@ -81,7 +81,7 @@ func (s *SettingsService) SetValue(ctx context.Context, val *rpc.Value) (*rpc.Se
8181

8282
err := json.Unmarshal([]byte(val.GetJsonData()), &value)
8383
if err == nil {
84-
viper.Set(key, value)
84+
configuration.Settings.Set(key, value)
8585
}
8686

8787
return &rpc.SetValueResponse{}, err

0 commit comments

Comments
 (0)