shithub: hugo

Download patch

ref: da54787cfa97789624e467a4451dfeb50f563e41
parent: c7975b48b6532823868a6aa8c93eb76caa46c570
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Wed Feb 19 03:38:46 EST 2020

Handle disabled RSS even if it's defined in outputs

See https://github.com/gohugoio/hugo/issues/6897#issuecomment-587947078

--- a/hugolib/disableKinds_test.go
+++ b/hugolib/disableKinds_test.go
@@ -266,3 +266,18 @@
 		b.Assert(resource.RelPermalink(), qt.Equals, "/blog/sect/no-publishresources/data.json")
 	})
 }
+
+// https://github.com/gohugoio/hugo/issues/6897#issuecomment-587947078
+func TestDisableRSSWithRSSInCustomOutputs(t *testing.T) {
+	b := newTestSitesBuilder(t).WithConfigFile("toml", `
+disableKinds = ["taxonomy", "taxonomyTerm", "RSS"]
+[outputs]
+home = [ "HTML", "RSS" ]
+`).Build(BuildCfg{})
+
+	// The config above is a little conflicting, but it exists in the real world.
+	// In Hugo 0.65 we consolidated the code paths and made RSS a pure output format,
+	// but we should make sure to not break existing sites.
+	b.Assert(b.CheckExists("public/index.xml"), qt.Equals, false)
+
+}
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -432,7 +432,8 @@
 		return nil, err
 	}
 
-	if disabledKinds[kindRSS] {
+	rssDisabled := disabledKinds[kindRSS]
+	if rssDisabled {
 		// Legacy
 		tmp := siteOutputFormatsConfig[:0]
 		for _, x := range siteOutputFormatsConfig {
@@ -443,7 +444,7 @@
 		siteOutputFormatsConfig = tmp
 	}
 
-	outputFormats, err := createSiteOutputFormats(siteOutputFormatsConfig, cfg.Language)
+	outputFormats, err := createSiteOutputFormats(siteOutputFormatsConfig, cfg.Language, rssDisabled)
 	if err != nil {
 		return nil, err
 	}
--- a/hugolib/site_output.go
+++ b/hugolib/site_output.go
@@ -15,6 +15,7 @@
 
 import (
 	"fmt"
+	"strings"
 
 	"github.com/gohugoio/hugo/config"
 	"github.com/gohugoio/hugo/output"
@@ -54,7 +55,7 @@
 
 }
 
-func createSiteOutputFormats(allFormats output.Formats, cfg config.Provider) (map[string]output.Formats, error) {
+func createSiteOutputFormats(allFormats output.Formats, cfg config.Provider, rssDisabled bool) (map[string]output.Formats, error) {
 	defaultOutputFormats := createDefaultOutputFormats(allFormats, cfg)
 
 	if !cfg.IsSet("outputs") {
@@ -82,6 +83,12 @@
 		for _, format := range vals {
 			f, found := allFormats.GetByName(format)
 			if !found {
+				if rssDisabled && strings.EqualFold(format, "RSS") {
+					// This is legacy behaviour. We used to have both
+					// a RSS page kind and output format.
+					continue
+
+				}
 				return nil, fmt.Errorf("failed to resolve output format %q from site config", format)
 			}
 			formats = append(formats, f)
--- a/hugolib/site_output_test.go
+++ b/hugolib/site_output_test.go
@@ -341,7 +341,7 @@
 		cfg := viper.New()
 		cfg.Set("outputs", outputsConfig)
 
-		outputs, err := createSiteOutputFormats(output.DefaultFormats, cfg)
+		outputs, err := createSiteOutputFormats(output.DefaultFormats, cfg, false)
 		c.Assert(err, qt.IsNil)
 		c.Assert(outputs[page.KindSection], deepEqualsOutputFormats, output.Formats{output.JSONFormat})
 		c.Assert(outputs[page.KindHome], deepEqualsOutputFormats, output.Formats{output.HTMLFormat, output.JSONFormat})
@@ -371,7 +371,7 @@
 		}
 		cfg.Set("outputs", outputsConfig)
 
-		outputs, err := createSiteOutputFormats(output.DefaultFormats, cfg)
+		outputs, err := createSiteOutputFormats(output.DefaultFormats, cfg, false)
 		c.Assert(err, qt.IsNil)
 		c.Assert(outputs[page.KindTaxonomyTerm], deepEqualsOutputFormats, output.Formats{output.JSONFormat})
 
@@ -389,7 +389,7 @@
 	cfg := viper.New()
 	cfg.Set("outputs", outputsConfig)
 
-	_, err := createSiteOutputFormats(output.DefaultFormats, cfg)
+	_, err := createSiteOutputFormats(output.DefaultFormats, cfg, false)
 	c.Assert(err, qt.Not(qt.IsNil))
 }
 
@@ -403,7 +403,7 @@
 	cfg := viper.New()
 	cfg.Set("outputs", outputsConfig)
 
-	outputs, err := createSiteOutputFormats(output.DefaultFormats, cfg)
+	outputs, err := createSiteOutputFormats(output.DefaultFormats, cfg, false)
 	c.Assert(err, qt.IsNil)
 	c.Assert(outputs[page.KindHome], deepEqualsOutputFormats, output.Formats{output.HTMLFormat, output.RSSFormat})
 }
@@ -423,7 +423,7 @@
 		customHTML = output.Format{Name: "HTML", BaseName: "customHTML"}
 	)
 
-	outputs, err := createSiteOutputFormats(output.Formats{customRSS, customHTML}, cfg)
+	outputs, err := createSiteOutputFormats(output.Formats{customRSS, customHTML}, cfg, false)
 	c.Assert(err, qt.IsNil)
 	c.Assert(outputs[page.KindHome], deepEqualsOutputFormats, output.Formats{customHTML, customRSS})
 }