mirror of
https://github.com/ipfs/kubo.git
synced 2025-06-27 07:57:30 +08:00
Config: allow to set maps on null value
Also, now, if ipfs config foo.bar has value of anything that is not map (0, "0", 0.1), then ipfs config foo.bar.baz now returns an error instead of a panic License: MIT Signed-off-by: rht <rhtbot@gmail.com>
This commit is contained in:
@ -7,12 +7,20 @@ import (
|
|||||||
|
|
||||||
func MapGetKV(v map[string]interface{}, key string) (interface{}, error) {
|
func MapGetKV(v map[string]interface{}, key string) (interface{}, error) {
|
||||||
var ok bool
|
var ok bool
|
||||||
|
var mcursor map[string]interface{}
|
||||||
var cursor interface{} = v
|
var cursor interface{} = v
|
||||||
|
|
||||||
parts := strings.Split(key, ".")
|
parts := strings.Split(key, ".")
|
||||||
for i, part := range parts {
|
for i, part := range parts {
|
||||||
cursor, ok = cursor.(map[string]interface{})[part]
|
|
||||||
if !ok {
|
|
||||||
sofar := strings.Join(parts[:i], ".")
|
sofar := strings.Join(parts[:i], ".")
|
||||||
|
|
||||||
|
mcursor, ok = cursor.(map[string]interface{})
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("%s key is not a map", sofar)
|
||||||
|
}
|
||||||
|
|
||||||
|
cursor, ok = mcursor[part]
|
||||||
|
if !ok {
|
||||||
return nil, fmt.Errorf("%s key has no attributes", sofar)
|
return nil, fmt.Errorf("%s key has no attributes", sofar)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -39,7 +47,7 @@ func MapSetKV(v map[string]interface{}, key string, value interface{}) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
cursor, ok = mcursor[part]
|
cursor, ok = mcursor[part]
|
||||||
if !ok { // create map if this is empty
|
if !ok || cursor == nil { // create map if this is empty or is null
|
||||||
mcursor[part] = map[string]interface{}{}
|
mcursor[part] = map[string]interface{}{}
|
||||||
cursor = mcursor[part]
|
cursor = mcursor[part]
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user