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 a353f86

Browse files
authored
Added global --config-dir flag (#2677)
* Added --config-dir global flag * Renamed function to better reflect his behaviour * Added test
1 parent faa6359 commit a353f86

File tree

4 files changed

+51
-15
lines changed

4 files changed

+51
-15
lines changed

‎internal/cli/cli.go‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -181,9 +181,12 @@ func NewCommand(srv rpc.ArduinoCoreServiceServer) *cobra.Command {
181181
cmd.PersistentFlags().StringSliceVar(&additionalUrls, "additional-urls", defaultAdditionalURLs, i18n.Tr("Comma-separated list of additional URLs for the Boards Manager."))
182182
cmd.PersistentFlags().BoolVar(&noColor, "no-color", defaultOutputNoColor, "Disable colored output.")
183183

184-
// We are not using cobra to parse this flag, because we manually parse it in main.go.
185-
// Just leaving it here so cobra will not complain about it.
186-
cmd.PersistentFlags().String("config-file", "", i18n.Tr("The custom config file (if not specified the default will be used)."))
184+
// We are not using cobra to parse the following flags, because we manually parse them in main.go.
185+
// Just leaving it here so cobra will output help usage and not complain about them.
186+
cmd.PersistentFlags().String("config-file", "",
187+
i18n.Tr("The custom config file (if not specified the default will be used)."))
188+
cmd.PersistentFlags().String("config-dir", "",
189+
i18n.Tr("Sets the default data directory (Arduino CLI will look for configuration file in this directory)."))
187190
return cmd
188191
}
189192

‎internal/cli/configuration/configuration.go‎

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,15 @@
1616
package configuration
1717

1818
import (
19+
"fmt"
1920
"os"
2021
"path/filepath"
2122
"runtime"
2223

2324
"github.com/arduino/arduino-cli/internal/cli/feedback"
2425
"github.com/arduino/arduino-cli/internal/go-configmap"
2526
"github.com/arduino/arduino-cli/internal/i18n"
27+
"github.com/arduino/go-paths-helper"
2628
"github.com/arduino/go-win32-utils"
2729
)
2830

@@ -42,8 +44,15 @@ func NewSettings() *Settings {
4244
return res
4345
}
4446

47+
var userProvidedDefaultDataDir *string
48+
4549
// getDefaultArduinoDataDir returns the full path to the default arduino folder
4650
func getDefaultArduinoDataDir() string {
51+
// This is overridden by --config-dir flag
52+
if userProvidedDefaultDataDir != nil {
53+
return *userProvidedDefaultDataDir
54+
}
55+
4756
userHomeDir, err := os.UserHomeDir()
4857
if err != nil {
4958
feedback.Warning(i18n.Tr("Unable to get user home dir: %v", err))
@@ -92,10 +101,25 @@ func getDefaultUserDir() string {
92101
}
93102
}
94103

95-
// FindConfigFileInArgsFallbackOnEnv returns the config file path using the
104+
// FindConfigFlagsInArgsOrFallbackOnEnv returns the config file path using the
96105
// argument '--config-file' (if specified), if empty looks for the ARDUINO_CONFIG_FILE env,
97106
// or looking in the current working dir
98-
func FindConfigFileInArgsFallbackOnEnv(args []string) string {
107+
func FindConfigFlagsInArgsOrFallbackOnEnv(args []string) string {
108+
// Look for '--config-dir' argument
109+
for i, arg := range args {
110+
if arg == "--config-dir" {
111+
if len(args) > i+1 {
112+
absArgs, err := paths.New(args[i+1]).Abs()
113+
if err != nil {
114+
feedback.FatalError(fmt.Errorf("invalid --config-dir value: %w", err), feedback.ErrBadArgument)
115+
}
116+
configDir := absArgs.String()
117+
userProvidedDefaultDataDir = &configDir
118+
break
119+
}
120+
}
121+
}
122+
99123
// Look for '--config-file' argument
100124
for i, arg := range args {
101125
if arg == "--config-file" {

‎internal/cli/configuration/configuration_test.go‎

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import (
1919
"path/filepath"
2020
"testing"
2121

22+
"github.com/arduino/go-paths-helper"
2223
"github.com/stretchr/testify/require"
2324
)
2425

@@ -43,23 +44,31 @@ func TestInit(t *testing.T) {
4344

4445
func TestFindConfigFile(t *testing.T) {
4546
defaultConfigFile := filepath.Join(getDefaultArduinoDataDir(), "arduino-cli.yaml")
46-
configFile := FindConfigFileInArgsFallbackOnEnv([]string{"--config-file"})
47+
configFile := FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file"})
4748
require.Equal(t, defaultConfigFile, configFile)
4849

49-
configFile = FindConfigFileInArgsFallbackOnEnv([]string{"--config-file", "some/path/to/config"})
50+
configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file", "some/path/to/config"})
5051
require.Equal(t, "some/path/to/config", configFile)
5152

52-
configFile = FindConfigFileInArgsFallbackOnEnv([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"})
53+
configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file", "some/path/to/config/arduino-cli.yaml"})
5354
require.Equal(t, "some/path/to/config/arduino-cli.yaml", configFile)
5455

55-
configFile = FindConfigFileInArgsFallbackOnEnv([]string{})
56+
configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{})
5657
require.Equal(t, defaultConfigFile, configFile)
5758

5859
t.Setenv("ARDUINO_CONFIG_FILE", "some/path/to/config")
59-
configFile = FindConfigFileInArgsFallbackOnEnv([]string{})
60+
configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{})
6061
require.Equal(t, "some/path/to/config", configFile)
6162

6263
// when both env and flag are specified flag takes precedence
63-
configFile = FindConfigFileInArgsFallbackOnEnv([]string{"--config-file", "flag/path"})
64+
configFile = FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-file", "flag/path"})
6465
require.Equal(t, "flag/path", configFile)
6566
}
67+
68+
func TestFindConfigDir(t *testing.T) {
69+
// Check behaviour with --config-dir
70+
expected, err := paths.New("anotherpath", "arduino-cli.yaml").Abs()
71+
require.NoError(t, err)
72+
configFile := FindConfigFlagsInArgsOrFallbackOnEnv([]string{"--config-dir", "anotherpath"})
73+
require.Equal(t, expected.String(), configFile)
74+
}

‎main.go‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,13 @@ func main() {
3737
// Disable logging until it is setup in the arduino-cli pre-run
3838
logrus.SetOutput(io.Discard)
3939

40-
// Create a new ArduinoCoreServer
41-
srv := commands.NewArduinoCoreServer()
42-
4340
// Search for the configuration file in the command line arguments and in the environment
44-
configFile := configuration.FindConfigFileInArgsFallbackOnEnv(os.Args)
41+
configFile := configuration.FindConfigFlagsInArgsOrFallbackOnEnv(os.Args)
4542
ctx := config.SetConfigFile(context.Background(), configFile)
4643

44+
// Create a new ArduinoCoreServer
45+
srv := commands.NewArduinoCoreServer()
46+
4747
// Read the settings from the configuration file
4848
openReq := &rpc.ConfigurationOpenRequest{SettingsFormat: "yaml"}
4949
var configFileLoadingWarnings []string

0 commit comments

Comments
(0)

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