Handle disabled RSS even if it's defined in outputs
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 19 Feb 2020 07:38:46 +0000 (08:38 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 19 Feb 2020 08:08:31 +0000 (09:08 +0100)
See https://github.com/gohugoio/hugo/issues/6897#issuecomment-587947078

hugolib/disableKinds_test.go
hugolib/site.go
hugolib/site_output.go
hugolib/site_output_test.go

index f5b2c65a11bbfeaaf69e1d414c0e6858f5f95e50..e814f4a5a780ac00de6d1196ff5ba54c4ecbc675 100644 (file)
@@ -266,3 +266,18 @@ headless: true
                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)
+
+}
index 34e5ad1567ae0a7a8406ce41b162af8924b55b48..ac67c12106e8c039ea8a9a6c4f48314f41e737de 100644 (file)
@@ -432,7 +432,8 @@ func newSite(cfg deps.DepsCfg) (*Site, error) {
                return nil, err
        }
 
-       if disabledKinds[kindRSS] {
+       rssDisabled := disabledKinds[kindRSS]
+       if rssDisabled {
                // Legacy
                tmp := siteOutputFormatsConfig[:0]
                for _, x := range siteOutputFormatsConfig {
@@ -443,7 +444,7 @@ func newSite(cfg deps.DepsCfg) (*Site, error) {
                siteOutputFormatsConfig = tmp
        }
 
-       outputFormats, err := createSiteOutputFormats(siteOutputFormatsConfig, cfg.Language)
+       outputFormats, err := createSiteOutputFormats(siteOutputFormatsConfig, cfg.Language, rssDisabled)
        if err != nil {
                return nil, err
        }
index b5779440050bf80d93786079ea7691ce14bf3bb6..d064348a64882504a7da5db7004bdfdeb86200aa 100644 (file)
@@ -15,6 +15,7 @@ package hugolib
 
 import (
        "fmt"
+       "strings"
 
        "github.com/gohugoio/hugo/config"
        "github.com/gohugoio/hugo/output"
@@ -54,7 +55,7 @@ func createDefaultOutputFormats(allFormats output.Formats, cfg config.Provider)
 
 }
 
-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 @@ func createSiteOutputFormats(allFormats output.Formats, cfg config.Provider) (ma
                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)
index 7fb53b0f8243e0d2447f032bba9bad67b04f787c..232364577e8bde0e66dd4a70ddf1b80ab85de9e3 100644 (file)
@@ -341,7 +341,7 @@ func TestCreateSiteOutputFormats(t *testing.T) {
                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 @@ func TestCreateSiteOutputFormats(t *testing.T) {
                }
                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 @@ func TestCreateSiteOutputFormatsInvalidConfig(t *testing.T) {
        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 @@ func TestCreateSiteOutputFormatsEmptyConfig(t *testing.T) {
        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 @@ func TestCreateSiteOutputFormatsCustomFormats(t *testing.T) {
                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})
 }