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 b47d883

Browse files
Add Delete command to gRPC (#2212)
* Add DeleteRequest and DeleteResponse to gRPC * Add Delete command to settings * Add TestDelete to settings_test.go * Remove temporary directory when TestWrite ends * Refactor `config delete` command using gRPC function call
1 parent 64d019d commit b47d883

File tree

8 files changed

+289
-77
lines changed

8 files changed

+289
-77
lines changed

‎commands/daemon/settings.go‎

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,3 +144,36 @@ func (s *SettingsService) Write(ctx context.Context, req *rpc.WriteRequest) (*rp
144144
}
145145
return &rpc.WriteResponse{}, nil
146146
}
147+
148+
// Delete removes a key from the config file
149+
func (s *SettingsService) Delete(ctx context.Context, req *rpc.DeleteRequest) (*rpc.DeleteResponse, error) {
150+
toDelete := req.GetKey()
151+
152+
// Check if settings key actually existing, we don't use Viper.InConfig()
153+
// since that doesn't check for keys formatted like daemon.port or those set
154+
// with Viper.Set(). This way we check for all existing settings for sure.
155+
keyExists := false
156+
keys := []string{}
157+
for _, k := range configuration.Settings.AllKeys() {
158+
if !strings.HasPrefix(k, toDelete) {
159+
keys = append(keys, k)
160+
continue
161+
}
162+
keyExists = true
163+
}
164+
165+
if !keyExists {
166+
return nil, errors.New(tr("key not found in settings"))
167+
}
168+
169+
// Override current settings to delete the key
170+
updatedSettings := configuration.Init("")
171+
for _, k := range keys {
172+
updatedSettings.Set(k, configuration.Settings.Get(k))
173+
}
174+
configPath := configuration.Settings.ConfigFileUsed()
175+
updatedSettings.SetConfigFile(configPath)
176+
configuration.Settings = updatedSettings
177+
178+
return &rpc.DeleteResponse{}, nil
179+
}

‎commands/daemon/settings_test.go‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ func TestWrite(t *testing.T) {
142142
require.NoError(t, err)
143143

144144
tempDir := paths.TempDir()
145-
testFolder, _ := tempDir.MkTempDir("testdata")
145+
testFolder, err := tempDir.MkTempDir("testdata")
146+
require.NoError(t, err)
147+
defer testFolder.RemoveAll()
146148

147149
// Verifies config files doesn't exist
148150
configFile := testFolder.Join("arduino-cli.yml")
@@ -157,3 +159,18 @@ func TestWrite(t *testing.T) {
157159
// We don't verify the content since we expect config library, Viper, to work
158160
require.True(t, configFile.Exist())
159161
}
162+
163+
func TestDelete(t *testing.T) {
164+
_, err := svc.Delete(context.Background(), &rpc.DeleteRequest{
165+
Key: "doesnotexist",
166+
})
167+
require.Error(t, err)
168+
169+
_, err = svc.Delete(context.Background(), &rpc.DeleteRequest{
170+
Key: "network",
171+
})
172+
require.NoError(t, err)
173+
174+
_, err = svc.GetValue(context.Background(), &rpc.GetValueRequest{Key: "network"})
175+
require.Error(t, err)
176+
}

‎commands/daemon/testdata/arduino-cli.yml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,3 +14,6 @@ logging:
1414
file: ""
1515
format: text
1616
level: info
17+
18+
network:
19+
proxy: "123"

‎internal/cli/config/delete.go‎

Lines changed: 9 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ package config
1717

1818
import (
1919
"os"
20-
"strings"
2120

21+
"github.com/arduino/arduino-cli/commands/daemon"
2222
"github.com/arduino/arduino-cli/configuration"
2323
"github.com/arduino/arduino-cli/internal/cli/feedback"
24+
"github.com/arduino/arduino-cli/rpc/cc/arduino/cli/settings/v1"
2425
"github.com/sirupsen/logrus"
2526
"github.com/spf13/cobra"
26-
"github.com/spf13/viper"
2727
)
2828

2929
func initDeleteCommand() *cobra.Command {
@@ -47,26 +47,13 @@ func runDeleteCommand(cmd *cobra.Command, args []string) {
4747
logrus.Info("Executing `arduino-cli config delete`")
4848
toDelete := args[0]
4949

50-
keys := []string{}
51-
exists := false
52-
for _, v := range configuration.Settings.AllKeys() {
53-
if !strings.HasPrefix(v, toDelete) {
54-
keys = append(keys, v)
55-
continue
56-
}
57-
exists = true
50+
svc := daemon.SettingsService{}
51+
_, err := svc.Delete(cmd.Context(), &settings.DeleteRequest{Key: toDelete})
52+
if err != nil {
53+
feedback.Fatal(tr("Cannot delete the key %[1]s: %[2]v", toDelete, err), feedback.ErrGeneric)
5854
}
59-
60-
if !exists {
61-
feedback.Fatal(tr("Settings key doesn't exist"), feedback.ErrGeneric)
62-
}
63-
64-
updatedSettings := viper.New()
65-
for _, k := range keys {
66-
updatedSettings.Set(k, configuration.Settings.Get(k))
67-
}
68-
69-
if err := updatedSettings.WriteConfigAs(configuration.Settings.ConfigFileUsed()); err != nil {
70-
feedback.Fatal(tr("Can't write config file: %v", err), feedback.ErrGeneric)
55+
_, err = svc.Write(cmd.Context(), &settings.WriteRequest{FilePath: configuration.Settings.ConfigFileUsed()})
56+
if err != nil {
57+
feedback.Fatal(tr("Cannot write the file %[1]s: %[2]v", configuration.Settings.ConfigFileUsed(), err), feedback.ErrGeneric)
7158
}
7259
}

‎internal/integrationtest/config/config_test.go‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ func TestAddRemoveSetDeleteOnUnexistingKey(t *testing.T) {
302302

303303
_, stderr, err = cli.Run("config", "delete", "some.key", "--config-file", "arduino-cli.yaml")
304304
require.Error(t, err)
305-
require.Contains(t, string(stderr), "Settings key doesn't exist")
305+
require.Contains(t, string(stderr), "Cannot delete the key some.key: key not found in settings\n")
306306
}
307307

308308
func TestAddSingleArgument(t *testing.T) {

‎rpc/cc/arduino/cli/settings/v1/settings.pb.go‎

Lines changed: 175 additions & 52 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎rpc/cc/arduino/cli/settings/v1/settings.proto‎

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,9 @@ service SettingsService {
3636

3737
// Writes to file settings currently stored in memory
3838
rpc Write(WriteRequest) returns (WriteResponse);
39+
40+
// Deletes an entry and rewrites the file settings
41+
rpc Delete(DeleteRequest) returns (DeleteResponse);
3942
}
4043

4144
message GetAllResponse {
@@ -78,4 +81,11 @@ message WriteRequest {
7881
string file_path = 1;
7982
}
8083

81-
message WriteResponse {}
84+
message WriteResponse {}
85+
86+
message DeleteRequest {
87+
// The key of the setting to delete.
88+
string key = 1;
89+
}
90+
91+
message DeleteResponse {}

‎rpc/cc/arduino/cli/settings/v1/settings_grpc.pb.go‎

Lines changed: 39 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
(0)

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