diff --git a/common/maps/params.go b/common/maps/params.go index ecb63d7a5..1f0856598 100644 --- a/common/maps/params.go +++ b/common/maps/params.go @@ -37,7 +37,11 @@ func getNested(m map[string]interface{}, indices []string) (interface{}, string, first := indices[0] v, found := m[strings.ToLower(cast.ToString(first))] if !found { + if len(indices) == 1 { + return nil, first, m + } return nil, "", nil + } if len(indices) == 1 { diff --git a/common/maps/params_test.go b/common/maps/params_test.go index 8016a8bd6..46d672d87 100644 --- a/common/maps/params_test.go +++ b/common/maps/params_test.go @@ -47,5 +47,29 @@ func TestGetNestedParam(t *testing.T) { c.Assert(must("nested_color", "_", m), qt.Equals, "blue") c.Assert(must("nested.nestednested.color", ".", m), qt.Equals, "green") c.Assert(must("string.name", ".", m), qt.IsNil) + c.Assert(must("nested.foo", ".", m), qt.IsNil) + +} + +// https://github.com/gohugoio/hugo/issues/7903 +func TestGetNestedParamFnNestedNewKey(t *testing.T) { + + c := qt.New(t) + + nested := map[string]interface{}{ + "color": "blue", + } + m := map[string]interface{}{ + "nested": nested, + } + + existing, nestedKey, owner, err := GetNestedParamFn("nested.new", ".", func(key string) interface{} { + return m[key] + }) + + c.Assert(err, qt.IsNil) + c.Assert(existing, qt.IsNil) + c.Assert(nestedKey, qt.Equals, "new") + c.Assert(owner, qt.DeepEquals, nested) } diff --git a/hugolib/config.go b/hugolib/config.go index 7500dfc72..72b51272b 100644 --- a/hugolib/config.go +++ b/hugolib/config.go @@ -198,6 +198,8 @@ func LoadConfig(d ConfigSourceDescriptor, doWithConfig ...func(cfg config.Provid } else { v.Set(key, val) } + } else if nestedKey != "" { + owner[nestedKey] = valStr } else { v.Set(key, valStr) } diff --git a/hugolib/config_test.go b/hugolib/config_test.go index a52e3f061..cb9c1d8f6 100644 --- a/hugolib/config_test.go +++ b/hugolib/config_test.go @@ -495,7 +495,6 @@ stringSlice = ["a", "b"] [imaging] anchor = "smart" quality = 75 -resamplefilter = "CatmullRom" ` b := newTestSitesBuilder(t).WithConfigFile("toml", baseConfig) @@ -505,6 +504,7 @@ resamplefilter = "CatmullRom" "HUGO_NEW", "new", // key not in config.toml "HUGO_ENABLEGITINFO", "false", "HUGO_IMAGING_ANCHOR", "top", + "HUGO_IMAGING_RESAMPLEFILTER", "CatmullRom", "HUGO_STRINGSLICE", `["c", "d"]`, "HUGO_INTSLICE", `[5, 8, 9]`, "HUGO_FLOATSLICE", `[5.32]`, @@ -519,6 +519,7 @@ resamplefilter = "CatmullRom" c.Assert(cfg.Get("new"), qt.Equals, "new") c.Assert(cfg.Get("imaging.anchor"), qt.Equals, "top") c.Assert(cfg.Get("imaging.quality"), qt.Equals, int64(75)) + c.Assert(cfg.Get("imaging.resamplefilter"), qt.Equals, "CatmullRom") c.Assert(cfg.Get("stringSlice"), qt.DeepEquals, []interface{}{"c", "d"}) c.Assert(cfg.Get("floatSlice"), qt.DeepEquals, []interface{}{5.32}) c.Assert(cfg.Get("intSlice"), qt.DeepEquals, []interface{}{5, 8, 9})