summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--hugolib/site_output.go16
-rw-r--r--hugolib/site_output_test.go56
2 files changed, 64 insertions, 8 deletions
diff --git a/hugolib/site_output.go b/hugolib/site_output.go
index 684ff2e73..6b72ea9b6 100644
--- a/hugolib/site_output.go
+++ b/hugolib/site_output.go
@@ -26,7 +26,7 @@ import (
func createSiteOutputFormats(allFormats output.Formats, cfg config.Provider) (map[string]output.Formats, error) {
if !cfg.IsSet("outputs") {
- return createDefaultOutputFormats(cfg)
+ return createDefaultOutputFormats(allFormats, cfg)
}
outFormats := make(map[string]output.Formats)
@@ -64,20 +64,22 @@ func createSiteOutputFormats(allFormats output.Formats, cfg config.Provider) (ma
}
-func createDefaultOutputFormats(cfg config.Provider) (map[string]output.Formats, error) {
+func createDefaultOutputFormats(allFormats output.Formats, cfg config.Provider) (map[string]output.Formats, error) {
outFormats := make(map[string]output.Formats)
+ rssOut, _ := allFormats.GetByName(output.RSSFormat.Name)
+ htmlOut, _ := allFormats.GetByName(output.HTMLFormat.Name)
+
for _, kind := range allKinds {
var formats output.Formats
// All have HTML
- formats = append(formats, output.HTMLFormat)
+ formats = append(formats, htmlOut)
// All but page have RSS
if kind != KindPage {
- rssType := output.RSSFormat
rssBase := cfg.GetString("rssURI")
if rssBase == "" || rssBase == "index.xml" {
- rssBase = rssType.BaseName
+ rssBase = rssOut.BaseName
} else {
// Remove in Hugo 0.22.
helpers.Deprecated("Site config", "rssURI", "Set baseName in outputFormats.RSS", false)
@@ -85,8 +87,8 @@ func createDefaultOutputFormats(cfg config.Provider) (map[string]output.Formats,
rssBase = strings.TrimSuffix(rssBase, path.Ext(rssBase))
}
- rssType.BaseName = rssBase
- formats = append(formats, rssType)
+ rssOut.BaseName = rssBase
+ formats = append(formats, rssOut)
}
diff --git a/hugolib/site_output_test.go b/hugolib/site_output_test.go
index 2935f3257..d57173630 100644
--- a/hugolib/site_output_test.go
+++ b/hugolib/site_output_test.go
@@ -31,7 +31,7 @@ import (
func TestDefaultOutputFormats(t *testing.T) {
t.Parallel()
- defs, err := createDefaultOutputFormats(viper.New())
+ defs, err := createDefaultOutputFormats(output.DefaultFormats, viper.New())
require.NoError(t, err)
@@ -53,6 +53,30 @@ func TestDefaultOutputFormats(t *testing.T) {
}
}
+func TestDefaultOutputFormatsWithOverrides(t *testing.T) {
+ t.Parallel()
+
+ htmlOut := output.HTMLFormat
+ htmlOut.BaseName = "htmlindex"
+ rssOut := output.RSSFormat
+ rssOut.BaseName = "feed"
+
+ defs, err := createDefaultOutputFormats(output.Formats{htmlOut, rssOut}, viper.New())
+
+ homeDefs := defs[KindHome]
+
+ rss, found := homeDefs.GetByName("RSS")
+ require.True(t, found)
+ require.Equal(t, rss.BaseName, "feed")
+
+ html, found := homeDefs.GetByName("HTML")
+ require.True(t, found)
+ require.Equal(t, html.BaseName, "htmlindex")
+
+ require.NoError(t, err)
+
+}
+
func TestSiteWithPageOutputs(t *testing.T) {
for _, outputs := range [][]string{{"html", "json", "calendar"}, {"json"}} {
t.Run(fmt.Sprintf("%v", outputs), func(t *testing.T) {
@@ -231,3 +255,33 @@ Content: {{ .Content }}
}
}
+
+// Issue #3447
+func TestRedefineRSSOutputFormat(t *testing.T) {
+ siteConfig := `
+baseURL = "http://example.com/blog"
+
+paginate = 1
+defaultContentLanguage = "en"
+
+disableKinds = ["page", "section", "taxonomy", "taxonomyTerm", "sitemap", "robotsTXT", "404"]
+
+[outputFormats]
+[outputFormats.RSS]
+mediatype = "application/rss"
+baseName = "feed"
+
+`
+
+ mf := afero.NewMemMapFs()
+ writeToFs(t, mf, "content/foo.html", `foo`)
+
+ th, h := newTestSitesFromConfig(t, mf, siteConfig)
+
+ err := h.Build(BuildCfg{})
+
+ require.NoError(t, err)
+
+ th.assertFileContent("public/feed.xml", "Recent content on")
+
+}