From e451b984cfb45b54a3972cefa59a02d50b0b0fd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Sat, 3 Jul 2021 10:40:59 +0200 Subject: [PATCH] Fix panic when theme has permalinks config Fixes #8724 --- hugolib/config.go | 6 +++--- hugolib/config_test.go | 43 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/hugolib/config.go b/hugolib/config.go index 3e3700433a2..65b269ab6a0 100644 --- 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 index 810ab18f5b9..6de2747179d 100644 --- 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", "monthly") + } + + }) + } + } func TestLoadConfigFromThemeDir(t *testing.T) {