From b2dcd53e3c0240c4afd21d1818fd180c2d1b9d34 Mon Sep 17 00:00:00 2001
From: =?utf8?q?Bj=C3=B8rn=20Erik=20Pedersen?=
 <bjorn.erik.pedersen@gmail.com>
Date: Tue, 18 Feb 2020 18:49:11 +0100
Subject: [PATCH] Use the tree for taxonomy.Pages()

---
 hugolib/content_map_page.go | 14 ++++++++++++++
 hugolib/page.go             |  5 +----
 hugolib/taxonomy_test.go    | 28 ++++++++++++++++++++++++----
 3 files changed, 39 insertions(+), 8 deletions(-)

diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go
index 3269abe1..06d1310e 100644
--- a/hugolib/content_map_page.go
+++ b/hugolib/content_map_page.go
@@ -827,6 +827,20 @@ func (b *pagesMapBucket) getTaxonomies() page.Pages {
 	return b.sections
 }
 
+func (b *pagesMapBucket) getTaxonomyEntries() page.Pages {
+	var pas page.Pages
+	ref := b.owner.treeRef
+	viewInfo := ref.n.viewInfo
+	prefix := strings.ToLower("/" + viewInfo.name.plural + "/" + viewInfo.termKey + "/")
+	ref.m.taxonomyEntries.WalkPrefix(prefix, func(s string, v interface{}) bool {
+		n := v.(*contentNode)
+		pas = append(pas, n.viewInfo.ref.p)
+		return false
+	})
+	page.SortByDefault(pas)
+	return pas
+}
+
 type sectionAggregate struct {
 	datesAll             resource.Dates
 	datesSection         resource.Dates
diff --git a/hugolib/page.go b/hugolib/page.go
index fa6c84d8..1384d729 100644
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -186,10 +186,7 @@ func (p *pageState) Pages() page.Pages {
 		case page.KindSection, page.KindHome:
 			pages = p.getPagesAndSections()
 		case page.KindTaxonomy:
-			b := p.treeRef.n
-			viewInfo := b.viewInfo
-			taxonomy := p.s.Taxonomies()[viewInfo.name.plural].Get(viewInfo.termKey)
-			pages = taxonomy.Pages()
+			pages = p.bucket.getTaxonomyEntries()
 		case page.KindTaxonomyTerm:
 			pages = p.bucket.getTaxonomies()
 		default:
diff --git a/hugolib/taxonomy_test.go b/hugolib/taxonomy_test.go
index 6d049a0c..d91e7699 100644
--- a/hugolib/taxonomy_test.go
+++ b/hugolib/taxonomy_test.go
@@ -538,14 +538,28 @@ categories.funny:|/blog/p1/|
 
 }
 
-func TestTaxonomiesParent(t *testing.T) {
+func TestTaxonomiesPageCollections(t *testing.T) {
 	t.Parallel()
 
 	b := newTestSitesBuilder(t)
-	b.WithContent("p.md", `---
-title: "Page"
+	b.WithContent("p1.md", `---
+title: "Page1"
+categories: ["funny", "cats"]
+---
+`, "p2.md", `---
+title: "Page2"
 categories: ["funny"]
 ---
+`)
+
+	b.WithTemplatesAdded("index.html", `
+{{ $categories := site.GetPage "categories" }}
+{{ $funny := site.GetPage "categories/funny" }}
+{{ $cats := site.GetPage "categories/cats" }}
+
+Categories Pages: {{ range $categories.Pages}}{{.RelPermalink }}|{{ end }}:END
+Funny Pages: {{ range $funny.Pages}}{{.RelPermalink }}|{{ end }}:END
+Cats Pages: {{ range $cats.Pages}}{{.RelPermalink }}|{{ end }}:END
 
 `)
 
@@ -560,7 +574,13 @@ categories: ["funny"]
 	b.Assert(cat.Parent().IsHome(), qt.Equals, true)
 	b.Assert(funny.Parent(), qt.Equals, cat)
 
-	b.AssertFileContent("public/categories/funny/index.xml", `<link>http://example.com/p/</link>`)
+	b.AssertFileContent("public/index.html", `
+Categories Pages: /categories/cats/|/categories/funny/|:END
+Funny Pages: /p1/|/p2/|:END
+Cats Pages: /p1/|:END
+`)
+
+	b.AssertFileContent("public/categories/funny/index.xml", `<link>http://example.com/p1/</link>`)
 	b.AssertFileContent("public/categories/index.xml", `<link>http://example.com/categories/funny/</link>`)
 
 }
-- 
2.30.2