shithub: hugo

Download patch

ref: 9475f61a377fcf23f910cbfd4ddca59261326665
parent: ea9261e856c13c1d4ae05fcca08766d410b4b65c
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Thu Aug 15 05:47:25 EDT 2019

hugolib: Fix taxonomies vs expired

In Hugo 0.57 we needed to delay the page metadata initialization until we had built the page graph.

This introduced a regression in that we now created taxonomy entries for expired pages.

This fixes that by moving the "should not build" filter before we assemble the taxonomies.

Fixes #6213

--- a/hugolib/pagecollections.go
+++ b/hugolib/pagecollections.go
@@ -466,14 +466,6 @@
 			}
 		}
 
-		tmp := bucket.pages[:0]
-		for _, x := range bucket.pages {
-			if c.pagesMap.s.shouldBuild(x) {
-				tmp = append(tmp, x)
-			}
-		}
-		bucket.pages = tmp
-
 		if bucket.isEmpty() {
 			if bucket.owner.IsSection() && bucket.owner.File().IsZero() {
 				// Check for any nested section.
--- a/hugolib/pages_map.go
+++ b/hugolib/pages_map.go
@@ -100,6 +100,17 @@
 				}
 			}
 		}
+
+		// Now that the metadata is initialized (with dates, draft set etc.)
+		// we can remove the pages that we for some reason should not include
+		// in this build.
+		tmp := bucket.pages[:0]
+		for _, x := range bucket.pages {
+			if m.s.shouldBuild(x) {
+				tmp = append(tmp, x)
+			}
+		}
+		bucket.pages = tmp
 	}
 
 	return nil
--- a/hugolib/taxonomy_test.go
+++ b/hugolib/taxonomy_test.go
@@ -320,3 +320,35 @@
 	b.AssertFileContent("public/tags/index.html", `<li><a href="http://example.com/tags/rocks-i-say/">Rocks I say!</a> 10</li>`)
 
 }
+
+// Issue 6213
+func TestTaxonomiesNotForDrafts(t *testing.T) {
+	t.Parallel()
+
+	b := newTestSitesBuilder(t)
+	b.WithContent("draft.md", `---
+title: "Draft"
+draft: true
+categories: ["drafts"]
+---
+
+`,
+		"regular.md", `---
+title: "Not Draft"
+categories: ["regular"]
+---
+
+`)
+
+	b.Build(BuildCfg{})
+	s := b.H.Sites[0]
+
+	b.Assert(b.CheckExists("public/categories/regular/index.html"), qt.Equals, true)
+	b.Assert(b.CheckExists("public/categories/drafts/index.html"), qt.Equals, false)
+
+	reg, _ := s.getPageNew(nil, "categories/regular")
+	dra, _ := s.getPageNew(nil, "categories/draft")
+	b.Assert(reg, qt.Not(qt.IsNil))
+	b.Assert(dra, qt.IsNil)
+
+}