Skip to content

Commit ab9d2f0

Browse files
committed
Added --config-dir global flag
1 parent c86ca30 commit ab9d2f0

File tree

3 files changed

+33
-6
lines changed

3 files changed

+33
-6
lines changed

Diff for: internal/cli/cli.go

+6-3
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

Diff for: internal/cli/configuration/configuration.go

+24
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))
@@ -96,6 +105,21 @@ func getDefaultUserDir() string {
96105
// argument '--config-file' (if specified), if empty looks for the ARDUINO_CONFIG_FILE env,
97106
// or looking in the current working dir
98107
func FindConfigFileInArgsFallbackOnEnv(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" {

Diff for: main.go

+3-3
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
4441
configFile := configuration.FindConfigFileInArgsFallbackOnEnv(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)