mirror of
https://github.com/ipfs/kubo.git
synced 2025-10-25 02:16:56 +08:00
Auto-assert setconfig value to predefined struct
License: MIT Signed-off-by: rht <rhtbot@gmail.com>
This commit is contained in:
@ -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.
|
||||
|
||||
@ -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
|
||||
```
|
||||
|
||||
|
||||
@ -495,19 +495,54 @@ 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
|
||||
}
|
||||
|
||||
// Get the type of the value associated with the key
|
||||
oldValue, err := common.MapGetKV(mapconf, key)
|
||||
ok := true
|
||||
if err != nil {
|
||||
// key-value does not exist yet
|
||||
switch v := value.(type) {
|
||||
case string:
|
||||
value, err = strconv.ParseBool(v)
|
||||
if err != nil {
|
||||
value, err = strconv.Atoi(v)
|
||||
if err != nil {
|
||||
value, err = strconv.ParseFloat(v, 32)
|
||||
if err != nil {
|
||||
value = v
|
||||
}
|
||||
}
|
||||
}
|
||||
default:
|
||||
}
|
||||
} else {
|
||||
switch oldValue.(type) {
|
||||
case bool:
|
||||
value, ok = value.(bool)
|
||||
case int:
|
||||
value, ok = value.(int)
|
||||
case float32:
|
||||
value, ok = value.(float32)
|
||||
case string:
|
||||
value, ok = value.(string)
|
||||
default:
|
||||
value = value
|
||||
}
|
||||
if !ok {
|
||||
return fmt.Errorf("Wrong config type, expected %T", oldValue)
|
||||
}
|
||||
}
|
||||
|
||||
if err := common.MapSetKV(mapconf, key, value); 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
|
||||
|
||||
Reference in New Issue
Block a user