Don't fail when calling Paginate with an empty pages.PagesGroup - hugo - [fork] hugo port for 9front
(HTM) git clone git@git.drkhsh.at/hugo.git
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) Submodules
(DIR) README
(DIR) LICENSE
---
(DIR) commit 34a86e13f63c1a527e45b5de95696c6937c2043e
(DIR) parent 0f01bd46374b13cdc5d7925c913bba777a58bb5b
(HTM) Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Wed, 8 Mar 2023 09:28:46 +0100
Don't fail when calling Paginate with an empty pages.PagesGroup
Fixes #10802
Diffstat:
M hugolib/paginator_test.go | 26 ++++++++++++++++++++++++++
M resources/page/pagegroup.go | 14 +++++++-------
M resources/page/pagination.go | 4 ++--
3 files changed, 35 insertions(+), 9 deletions(-)
---
(DIR) diff --git a/hugolib/paginator_test.go b/hugolib/paginator_test.go
@@ -136,3 +136,29 @@ weight: %d
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`)
}
+
+// Issue 10802
+func TestPaginatorEmptyPageGroups(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- config.toml --
+baseURL = "https://example.com/"
+-- content/p1.md --
+-- content/p2.md --
+-- layouts/index.html --
+{{ $empty := site.RegularPages | complement site.RegularPages }}
+Len: {{ len $empty }}: Type: {{ printf "%T" $empty }}
+{{ $pgs := $empty.GroupByPublishDate "January 2006" }}
+{{ $pag := .Paginate $pgs }}
+Len Pag: {{ len $pag.Pages }}
+`
+ b := NewIntegrationTestBuilder(
+ IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ },
+ ).Build()
+
+ b.AssertFileContent("public/index.html", "Len: 0", "Len Pag: 0")
+}
(DIR) diff --git a/resources/page/pagegroup.go b/resources/page/pagegroup.go
@@ -430,14 +430,14 @@ func (psg PagesGroup) ProbablyEq(other any) bool {
}
// ToPagesGroup tries to convert seq into a PagesGroup.
-func ToPagesGroup(seq any) (PagesGroup, error) {
+func ToPagesGroup(seq any) (PagesGroup, bool, error) {
switch v := seq.(type) {
case nil:
- return nil, nil
+ return nil, true, nil
case PagesGroup:
- return v, nil
+ return v, true, nil
case []PageGroup:
- return PagesGroup(v), nil
+ return PagesGroup(v), true, nil
case []any:
l := len(v)
if l == 0 {
@@ -450,12 +450,12 @@ func ToPagesGroup(seq any) (PagesGroup, error) {
if pg, ok := ipg.(PageGroup); ok {
pagesGroup[i] = pg
} else {
- return nil, fmt.Errorf("unsupported type in paginate from slice, got %T instead of PageGroup", ipg)
+ return nil, false, fmt.Errorf("unsupported type in paginate from slice, got %T instead of PageGroup", ipg)
}
}
- return pagesGroup, nil
+ return pagesGroup, true, nil
}
}
- return nil, nil
+ return nil, false, nil
}
(DIR) diff --git a/resources/page/pagination.go b/resources/page/pagination.go
@@ -277,11 +277,11 @@ func Paginate(td TargetPathDescriptor, seq any, pagerSize int) (*Paginator, erro
var paginator *Paginator
- groups, err := ToPagesGroup(seq)
+ groups, ok, err := ToPagesGroup(seq)
if err != nil {
return nil, err
}
- if groups != nil {
+ if ok {
paginator, _ = newPaginatorFromPageGroups(groups, pagerSize, urlFactory)
} else {
pages, err := ToPages(seq)