hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit e451b984cfb45b54a3972cefa59a02d50b0b0fd2
parent b4d60b3db1c05816458cc4f4f29d42156845e6c1
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Sat,  3 Jul 2021 10:40:59 +0200

Fix panic when theme has permalinks config

Fixes #8724

Diffstat:
Mhugolib/config.go | 6+++---
Mhugolib/config_test.go | 43+++++++++++++++++++++++++++++++++++++++++--
2 files changed, 44 insertions(+), 5 deletions(-)
diff --git a/hugolib/config.go b/hugolib/config.go
@@ -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,
diff --git a/hugolib/config_test.go b/hugolib/config_test.go
@@ -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) {