提交 541836c4 作者: rht

Auto-assert setconfig value to predefined struct

License: MIT
Signed-off-by: 's avatarrht <rhtbot@gmail.com>
上级 224a9eb0
...@@ -181,7 +181,7 @@ variable set to your preferred text editor. ...@@ -181,7 +181,7 @@ variable set to your preferred text editor.
var configReplaceCmd = &cmds.Command{ var configReplaceCmd = &cmds.Command{
Helptext: cmds.HelpText{ Helptext: cmds.HelpText{
Tagline: "Replaces the config with `file>", Tagline: "Replaces the config with <file>",
ShortDescription: ` ShortDescription: `
Make sure to back up the config file first if neccessary, this operation Make sure to back up the config file first if neccessary, this operation
can't be undone. can't be undone.
......
...@@ -65,7 +65,7 @@ ipfs daemon --mount ...@@ -65,7 +65,7 @@ ipfs daemon --mount
If you wish to allow other users to use the mount points, use the following: If you wish to allow other users to use the mount points, use the following:
```sh ```sh
ipfs config Mounts.FuseAllowOther --bool true ipfs config Mounts.FuseAllowOther true
ipfs daemon --mount ipfs daemon --mount
``` ```
......
...@@ -495,19 +495,54 @@ func (r *FSRepo) SetConfigKey(key string, value interface{}) error { ...@@ -495,19 +495,54 @@ func (r *FSRepo) SetConfigKey(key string, value interface{}) error {
if err != nil { if err != nil {
return err return err
} }
switch v := value.(type) {
case string:
if i, err := strconv.Atoi(v); err == nil {
value = i
}
}
var mapconf map[string]interface{} var mapconf map[string]interface{}
if err := serialize.ReadConfigFile(filename, &mapconf); err != nil { if err := serialize.ReadConfigFile(filename, &mapconf); err != nil {
return err 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 { if err := common.MapSetKV(mapconf, key, value); err != nil {
return err return err
} }
// This step doubles as to validate the map against the struct
// before serialization
conf, err := config.FromMap(mapconf) conf, err := config.FromMap(mapconf)
if err != nil { if err != nil {
return err return err
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论