Fix panic when theme has permalinks config
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 3 Jul 2021 08:40:59 +0000 (10:40 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 3 Jul 2021 13:53:21 +0000 (15:53 +0200)
Fixes #8724

hugolib/config.go
hugolib/config_test.go

index 3e3700433a27b979dcef0d0f3657a7c46be07708..65b269ab6a0eb1f679564881bc355302105a554f 100644 (file)
@@ -255,9 +255,9 @@ func (l configLoader) applyConfigDefaults() error {
                "relativeURLs":                         false,
                "removePathAccents":                    false,
                "titleCaseStyle":                       "AP",
-               "taxonomies":                           map[string]string{"tag": "tags", "category": "categories"},
-               "permalinks":                           make(map[string]string),
-               "sitemap":                              config.Sitemap{Priority: -1, Filename: "sitemap.xml"},
+               "taxonomies":                           maps.Params{"tag": "tags", "category": "categories"},
+               "permalinks":                           maps.Params{},
+               "sitemap":                              maps.Params{"priority": -1, "filename": "sitemap.xml"},
                "disableLiveReload":                    false,
                "pluralizeListTitles":                  true,
                "forceSyncStatic":                      false,
index 810ab18f5b9eb08e9d04329f7452b2fc72b6d2f0..6de2747179dc8a70ad74a65d140b233f0347ad37 100644 (file)
@@ -185,7 +185,7 @@ name = "menu-theme"
 
 `
 
-       buildForConfig := func(mainConfig, themeConfig string) *sitesBuilder {
+       buildForConfig := func(t testing.TB, mainConfig, themeConfig string) *sitesBuilder {
                b := newTestSitesBuilder(t)
                b.WithConfigFile("toml", mainConfig).WithThemeConfigFile("toml", themeConfig)
                return b.Build(BuildCfg{})
@@ -193,7 +193,7 @@ name = "menu-theme"
 
        buildForStrategy := func(t testing.TB, s string) *sitesBuilder {
                mainConfig := strings.ReplaceAll(mainConfigTemplate, "MERGE_PARAMS", s)
-               return buildForConfig(mainConfig, themeConfig)
+               return buildForConfig(t, mainConfig, themeConfig)
        }
 
        c.Run("Merge default", func(c *qt.C) {
@@ -322,6 +322,7 @@ name = "menu-theme"
 
        c.Run("Merge no params in project", func(c *qt.C) {
                b := buildForConfig(
+                       c,
                        "baseURL=\"https://example.org\"\ntheme = \"test-theme\"\n",
                        "[params]\np1 = \"p1 theme\"\n",
                )
@@ -335,6 +336,7 @@ name = "menu-theme"
 
        c.Run("Merge language no menus or params in project", func(c *qt.C) {
                b := buildForConfig(
+                       c,
                        `
 theme = "test-theme"
 baseURL = "https://example.com/"
@@ -378,6 +380,43 @@ name   = "menu-theme"
                )
        })
 
+       // Issue #8724
+       for _, mergeStrategy := range []string{"none", "shallow"} {
+               c.Run(fmt.Sprintf("Merge with sitemap config in theme, mergestrategy %s", mergeStrategy), func(c *qt.C) {
+
+                       smapConfigTempl := `[sitemap]
+  changefreq = %q
+  filename = "sitemap.xml"
+  priority = 0.5`
+
+                       b := buildForConfig(
+                               c,
+                               fmt.Sprintf("_merge=%q\nbaseURL=\"https://example.org\"\ntheme = \"test-theme\"\n", mergeStrategy),
+                               "baseURL=\"http://example.com\"\n"+fmt.Sprintf(smapConfigTempl, "monthly"),
+                       )
+
+                       got := b.Cfg.Get("").(maps.Params)
+
+                       if mergeStrategy == "none" {
+                               b.Assert(got["sitemap"], qt.DeepEquals, maps.Params{
+                                       "priority": int(-1),
+                                       "filename": "sitemap.xml",
+                               })
+
+                               b.AssertFileContent("public/sitemap.xml", "schemas/sitemap")
+                       } else {
+                               b.Assert(got["sitemap"], qt.DeepEquals, maps.Params{
+                                       "priority":   int(-1),
+                                       "filename":   "sitemap.xml",
+                                       "changefreq": "monthly",
+                               })
+
+                               b.AssertFileContent("public/sitemap.xml", "<changefreq>monthly</changefreq>")
+                       }
+
+               })
+       }
+
 }
 
 func TestLoadConfigFromThemeDir(t *testing.T) {