From 7d1565ac322e613b96246e59b55a9f236ff031a9 Mon Sep 17 00:00:00 2001 From: Laszlo Kiss Date: Sat, 23 Jan 2016 22:17:01 -0700 Subject: [PATCH 1/3] Prevent shadowning of keys when a nested key's value is nil. --- viper.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/viper.go b/viper.go index 00049ec..0c5310c 100644 --- a/viper.go +++ b/viper.go @@ -757,8 +757,10 @@ func (v *Viper) find(key string) interface{} { if source != nil { if reflect.TypeOf(source).Kind() == reflect.Map { val := v.searchMap(cast.ToStringMap(source), path[1:]) - jww.TRACE.Println(key, "found in nested config:", val) - return val + if val != nil { + jww.TRACE.Println(key, "found in nested config:", val) + return val + } } } } From ea0dc3e3e0abe2a76007dfa3f09c933913240d2b Mon Sep 17 00:00:00 2001 From: Laszlo Kiss Date: Sat, 23 Jan 2016 22:20:33 -0700 Subject: [PATCH 2/3] Added a straight forward merge of the maps of configuration objects. --- viper.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/viper.go b/viper.go index 0c5310c..5991198 100644 --- a/viper.go +++ b/viper.go @@ -950,6 +950,18 @@ func (v *Viper) MergeConfig(in io.Reader) error { return nil } +// Merge a configuration into another. +func Merge( other *Viper ) { v.Merge( other ) } +func (v *Viper) Merge( other *Viper ) { + mergeMaps( other.config, v.config, nil ) + mergeMaps( other.override, v.override, nil ) + mergeMaps( other.defaults, v.defaults, nil ) + mergeMaps( other.kvstore, v.kvstore, nil ) + for key,val := range other.pflags { v.pflags[key] = val } + for key,val := range other.env { v.env[key] = val } + for key,val := range other.aliases { v.aliases[key] = val } +} + func keyExists(k string, m map[string]interface{}) string { lk := strings.ToLower(k) for mk := range m { From 0931e9e8100eb217a37eea764078b64a7f0013bb Mon Sep 17 00:00:00 2001 From: Laszlo Kiss Date: Sun, 24 Jan 2016 00:01:01 -0700 Subject: [PATCH 3/3] Revert "Added a straight forward merge of the maps of configuration objects." This reverts commit ea0dc3e3e0abe2a76007dfa3f09c933913240d2b. --- viper.go | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/viper.go b/viper.go index 5991198..0c5310c 100644 --- a/viper.go +++ b/viper.go @@ -950,18 +950,6 @@ func (v *Viper) MergeConfig(in io.Reader) error { return nil } -// Merge a configuration into another. -func Merge( other *Viper ) { v.Merge( other ) } -func (v *Viper) Merge( other *Viper ) { - mergeMaps( other.config, v.config, nil ) - mergeMaps( other.override, v.override, nil ) - mergeMaps( other.defaults, v.defaults, nil ) - mergeMaps( other.kvstore, v.kvstore, nil ) - for key,val := range other.pflags { v.pflags[key] = val } - for key,val := range other.env { v.env[key] = val } - for key,val := range other.aliases { v.aliases[key] = val } -} - func keyExists(k string, m map[string]interface{}) string { lk := strings.ToLower(k) for mk := range m {