diff --git a/commands/daemon/settings.go b/commands/daemon/settings.go index 151ce9da61a..2d8b9ca9039 100644 --- a/commands/daemon/settings.go +++ b/commands/daemon/settings.go @@ -79,9 +79,13 @@ func (s *ArduinoCoreServerImpl) SettingsMerge(ctx context.Context, req *rpc.Sett // Set each value individually. // This is done because Viper ignores empty strings or maps when // using the MergeConfigMap function. + updatedSettings := configuration.Init("") for k, v := range mapped { - configuration.Settings.Set(k, v) + updatedSettings.Set(k, v) } + configPath := configuration.Settings.ConfigFileUsed() + updatedSettings.SetConfigFile(configPath) + configuration.Settings = updatedSettings return &rpc.SettingsMergeResponse{}, nil } diff --git a/commands/daemon/settings_test.go b/commands/daemon/settings_test.go index c5366e179b5..93f49174e50 100644 --- a/commands/daemon/settings_test.go +++ b/commands/daemon/settings_test.go @@ -81,6 +81,13 @@ func TestMerge(t *testing.T) { require.Equal(t, "", configuration.Settings.GetString("foo")) require.Equal(t, false, configuration.Settings.GetBool("sketch.always_export_binaries")) + bulkSettings = `{"network": {}}` + res, err = svc.SettingsMerge(context.Background(), &rpc.SettingsMergeRequest{JsonData: bulkSettings}) + require.NotNil(t, res) + require.NoError(t, err) + + require.Equal(t, "", configuration.Settings.GetString("proxy")) + reset() } @@ -113,6 +120,8 @@ func TestGetMergedValue(t *testing.T) { res, err = svc.SettingsGetValue(context.Background(), key) require.NoError(t, err) require.Equal(t, `"bar"`, res.GetJsonData()) + + reset() } func TestGetValueNotFound(t *testing.T) {