Fix it so disableKinds etc. does not get merged in from theme
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 22 Aug 2021 09:57:37 +0000 (11:57 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 22 Aug 2021 11:25:20 +0000 (13:25 +0200)
Unless the merge strategy is set up to do so.

For `disableKinds` the current workaround is to make sure the project config has an entry, even if is empty:

```
disableKinds = []
```

Note that this issue only touches root, non-map config-values that either is not set in project config or in Hugo's defaults.

Fixes #8866

common/maps/params.go
config/defaultConfigProvider.go
config/defaultConfigProvider_test.go
hugolib/config_test.go

index c14026df7bef3315f7b743d51588ee0fbb7c8a17..15511f56f68814d26561c7acbebccf32f71fdaf2 100644 (file)
@@ -76,6 +76,14 @@ func (p Params) Merge(pp Params) {
        p.merge("", pp)
 }
 
+// MergeRoot transfers values from pp to p for new keys where p is the
+// root of the tree.
+// This is done recursively.
+func (p Params) MergeRoot(pp Params) {
+       ms, _ := p.GetMergeStrategy()
+       p.merge(ms, pp)
+}
+
 func (p Params) merge(ps ParamsMergeStrategy, pp Params) {
        ns, found := p.GetMergeStrategy()
 
index 2391ec85310dfacfdc72ea9e762b4b3337bbb8c2..0a10d5cc6a84130645bf6ae590bab65cb4d636ba 100644 (file)
@@ -275,7 +275,7 @@ func (c *defaultConfigProvider) Merge(k string, v interface{}) {
                                }
                        }
                        // Merge the rest.
-                       c.root.Merge(p)
+                       c.root.MergeRoot(p)
                        for _, k := range keysToDelete {
                                delete(c.root, k)
                        }
index 7ab8c049a5cf9c08ffe5acf4810da8c30428c6c8..585ce4c67274207dee06b4c7ec4e6f4b79051f54 100644 (file)
@@ -172,7 +172,6 @@ func TestDefaultConfigProvider(t *testing.T) {
 
                c.Assert(cfg.Get(""), qt.DeepEquals, maps.Params{
                        "a": "av",
-                       "b": "bv2",
                })
        })
 
index bda1c7fb54e1a3ea4cb86a92ca9abb0b07656254..8c7d396ef91482ba67e53fc513975b128098d569 100644 (file)
@@ -152,6 +152,9 @@ name = "menu-top-main"
        themeConfig := `
 baseURL = "http://bep.is/"
 
+# Can not be set in theme.
+disableKinds = ["taxonomy", "term"]
+
 # Can not be set in theme.
 [frontmatter]
 expiryDate = ["date"]
@@ -228,6 +231,9 @@ name = "menu-theme"
 
                got := b.Cfg.Get("").(maps.Params)
 
+               // Issue #8866
+               b.Assert(b.Cfg.Get("disableKinds"), qt.IsNil)
+
                b.Assert(got["params"], qt.DeepEquals, maps.Params{
                        "b": maps.Params{
                                "b1": "b1 main",