Skip to content

Commit

Permalink
Auto-assert setconfig value to predefined struct
Browse files Browse the repository at this point in the history
License: MIT
Signed-off-by: rht <rhtbot@gmail.com>
  • Loading branch information
rht committed Jul 4, 2015
1 parent 224a9eb commit bf6e7c5
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 10 deletions.
2 changes: 1 addition & 1 deletion core/commands/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,7 @@ variable set to your preferred text editor.

var configReplaceCmd = &cmds.Command{
Helptext: cmds.HelpText{
Tagline: "Replaces the config with `file>",
Tagline: "Replaces the config with <file>",
ShortDescription: `
Make sure to back up the config file first if neccessary, this operation
can't be undone.
Expand Down
2 changes: 1 addition & 1 deletion docs/fuse.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ ipfs daemon --mount
If you wish to allow other users to use the mount points, use the following:

```sh
ipfs config Mounts.FuseAllowOther --bool true
ipfs config Mounts.FuseAllowOther true
ipfs daemon --mount
```

Expand Down
34 changes: 26 additions & 8 deletions repo/fsrepo/fsrepo.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"io"
"os"
"path"
"strconv"
"strings"
"sync"

Expand Down Expand Up @@ -495,19 +494,38 @@ func (r *FSRepo) SetConfigKey(key string, value interface{}) error {
if err != nil {
return err
}
switch v := value.(type) {
case string:
if i, err := strconv.Atoi(v); err == nil {
value = i
}
}
var mapconf map[string]interface{}
if err := serialize.ReadConfigFile(filename, &mapconf); err != nil {
return err
}
if err := common.MapSetKV(mapconf, key, value); err != nil {

// Get the type of the value associated with the key
oldValue, _ := common.MapGetKV(mapconf, key)
var castedValue interface{}
var ok bool
switch oldValue.(type) {
case bool:
castedValue, ok = value.(bool)
case int:
castedValue, ok = value.(int)
case float32:
castedValue, ok = value.(float32)
case string:
castedValue, ok = value.(string)
default:
castedValue = value
ok = true
}
if !ok {
return fmt.Errorf("Wrong config type, expected %T", oldValue)
}

if err := common.MapSetKV(mapconf, key, castedValue); err != nil {
return err
}

// This step doubles as to validate the map against the struct
// before serialization
conf, err := config.FromMap(mapconf)
if err != nil {
return err
Expand Down

0 comments on commit bf6e7c5

Please sign in to comment.