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)