shithub: hugo

Download patch

ref: 2d159e9cc7a25832e4b0cad226b149f7c4624708
parent: f45cb3172862140883cfa08bd401c17e1ada5b39
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Thu Jan 30 13:35:40 EST 2020

Do not render alias paginator pages for non-HTML outputs

Update #6797

--- a/hugolib/paginator_test.go
+++ b/hugolib/paginator_test.go
@@ -17,6 +17,8 @@
 	"fmt"
 	"path/filepath"
 	"testing"
+
+	qt "github.com/frankban/quicktest"
 )
 
 func TestPaginator(t *testing.T) {
@@ -104,4 +106,35 @@
 	b.WithTemplatesAdded("index.html", `{{ range (.Paginate (sort .Site.RegularPages ".File.Filename" "desc")).Pages }}|{{ .File.Filename }}{{ end }}`)
 	b.Build(BuildCfg{}).AssertFileContent("public/index.html",
 		filepath.FromSlash("|content/sect/doc1.nn.md|content/sect/doc1.nb.md|content/sect/doc1.fr.md|content/sect/doc1.en.md"))
+}
+
+// https://github.com/gohugoio/hugo/issues/6797
+func TestPaginateOutputFormat(t *testing.T) {
+	b := newTestSitesBuilder(t).WithSimpleConfigFile()
+	b.WithContent("_index.md", `---
+title: "Home"
+cascade:
+  outputs:
+    - JSON
+---`)
+
+	for i := 0; i < 22; i++ {
+		b.WithContent(fmt.Sprintf("p%d.md", i+1), fmt.Sprintf(`---
+title: "Page"
+weight: %d
+---`, i+1))
+	}
+
+	b.WithTemplatesAdded("index.json", `JSON: {{ .Paginator.TotalNumberOfElements }}: {{ range .Paginator.Pages }}|{{ .RelPermalink }}{{ end }}:DONE`)
+	b.Build(BuildCfg{})
+
+	b.AssertFileContent("public/index.json",
+		`JSON: 22
+|/p1/index.json|/p2/index.json|
+`)
+
+	// This looks odd, so are most bugs.
+	b.Assert(b.CheckExists("public/page/1/index.json/index.html"), qt.Equals, false)
+	b.Assert(b.CheckExists("public/page/1/index.json"), qt.Equals, false)
+	b.AssertFileContent("public/page/2/index.json", `JSON: 22: |/p11/index.json|/p12/index.json`)
 }
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -205,12 +205,14 @@
 		panic(fmt.Sprintf("invalid paginator state for %q", p.pathOrTitle()))
 	}
 
-	// Write alias for page 1
-	d.Addends = fmt.Sprintf("/%s/%d", paginatePath, 1)
-	targetPaths := page.CreateTargetPaths(d)
+	if f.IsHTML {
+		// Write alias for page 1
+		d.Addends = fmt.Sprintf("/%s/%d", paginatePath, 1)
+		targetPaths := page.CreateTargetPaths(d)
 
-	if err := s.writeDestAlias(targetPaths.TargetFilename, p.Permalink(), f, nil); err != nil {
-		return err
+		if err := s.writeDestAlias(targetPaths.TargetFilename, p.Permalink(), f, nil); err != nil {
+			return err
+		}
 	}
 
 	// Render pages for the rest