aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/imdario/mergo/merge.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2018-06-30 17:07:33 +0100
committerGravatar Yong Tang <yong.tang.github@outlook.com> 2018-06-30 09:07:33 -0700
commit9d555ab8d2f712a50ec1b7f46de0a7405a28eb9a (patch)
treecd63fcaa57bcd2ca5376dc40c3cd7a04b3909dc0 /vendor/github.com/imdario/mergo/merge.go
parent6fe27d99be622f69ac0b1d402a67a571c6f6166e (diff)
downloadcoredns-9d555ab8d2f712a50ec1b7f46de0a7405a28eb9a.tar.gz
coredns-9d555ab8d2f712a50ec1b7f46de0a7405a28eb9a.tar.zst
coredns-9d555ab8d2f712a50ec1b7f46de0a7405a28eb9a.zip
Dep ensure -update (#1912)
* dep ensure -update Signed-off-by: Miek Gieben <miek@miek.nl> * Add new files Signed-off-by: Miek Gieben <miek@miek.nl>
Diffstat (limited to 'vendor/github.com/imdario/mergo/merge.go')
-rw-r--r--vendor/github.com/imdario/mergo/merge.go20
1 files changed, 16 insertions, 4 deletions
diff --git a/vendor/github.com/imdario/mergo/merge.go b/vendor/github.com/imdario/mergo/merge.go
index f0e17924a..706b22069 100644
--- a/vendor/github.com/imdario/mergo/merge.go
+++ b/vendor/github.com/imdario/mergo/merge.go
@@ -103,7 +103,15 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co
case reflect.Ptr:
fallthrough
case reflect.Map:
- if err = deepMerge(dstElement, srcElement, visited, depth+1, config); err != nil {
+ srcMapElm := srcElement
+ dstMapElm := dstElement
+ if srcMapElm.CanInterface() {
+ srcMapElm = reflect.ValueOf(srcMapElm.Interface())
+ if dstMapElm.IsValid() {
+ dstMapElm = reflect.ValueOf(dstMapElm.Interface())
+ }
+ }
+ if err = deepMerge(dstMapElm, srcMapElm, visited, depth+1, config); err != nil {
return
}
case reflect.Slice:
@@ -116,7 +124,11 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co
dstSlice = reflect.ValueOf(dstElement.Interface())
}
- dstSlice = reflect.AppendSlice(dstSlice, srcSlice)
+ if !isEmptyValue(src) && (overwrite || isEmptyValue(dst)) && !config.AppendSlice {
+ dstSlice = srcSlice
+ } else if config.AppendSlice {
+ dstSlice = reflect.AppendSlice(dstSlice, srcSlice)
+ }
dst.SetMapIndex(key, dstSlice)
}
}
@@ -124,7 +136,7 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co
continue
}
- if srcElement.IsValid() && (overwrite || (!dstElement.IsValid() || isEmptyValue(dst))) {
+ if srcElement.IsValid() && (overwrite || (!dstElement.IsValid() || isEmptyValue(dstElement))) {
if dst.IsNil() {
dst.Set(reflect.MakeMap(dst.Type()))
}
@@ -137,7 +149,7 @@ func deepMerge(dst, src reflect.Value, visited map[uintptr]*visit, depth int, co
}
if !isEmptyValue(src) && (overwrite || isEmptyValue(dst)) && !config.AppendSlice {
dst.Set(src)
- } else {
+ } else if config.AppendSlice {
dst.Set(reflect.AppendSlice(dst, src))
}
case reflect.Ptr: