ref: 45c74526686f6a2afa02bcee767d837d6b9dd028
parent: e765b43e2bf3d017f8ae8fd4d455d7bd60e11973
author: Bjørn Erik Pedersen <[email protected]>
date: Wed Apr 12 14:11:37 EDT 2017
hugolib: Must recreate Paginator on live-reload The structure may potentially have changed, and then it fails. Fixes #3315
--- a/hugolib/page_output.go
+++ b/hugolib/page_output.go
@@ -78,15 +78,19 @@
// copy creates a copy of this PageOutput with the lazy sync.Once vars reset
// so they will be evaluated again, for word count calculations etc.
-func (p *PageOutput) copy() *PageOutput {
- c, err := newPageOutput(p.Page, true, p.outputFormat)
+func (p *PageOutput) copyWithFormat(f output.Format) (*PageOutput, error) {
+ c, err := newPageOutput(p.Page, true, f)
if err != nil {
- panic(err)
+ return nil, err
}
c.paginator = p.paginator
- return c
+ return c, nil
}
+func (p *PageOutput) copy() (*PageOutput, error) {
+ return p.copyWithFormat(p.outputFormat)
+}
+
func (p *PageOutput) layouts(layouts ...string) ([]string, error) {
if len(layouts) == 0 && p.selfLayout != "" {
return []string{p.selfLayout}, nil
@@ -142,6 +146,9 @@
}
p.pageOutputInit.Do(func() {
+ if p.mainPageOutput != nil {
+ return
+ }
// If Render is called in a range loop, the page output isn't available.
// So, create one.
outFormat := p.outputFormats[0]
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -75,14 +75,10 @@
)
if i == 0 {
- page.pageOutputInit.Do(func() {
- var po *PageOutput
- po, err = newPageOutput(page, false, outFormat)
- page.mainPageOutput = po
- })
- pageOutput = page.mainPageOutput
+ pageOutput, err = newPageOutput(page, false, outFormat)
+ page.mainPageOutput = pageOutput
} else {
- pageOutput, err = newPageOutput(page, true, outFormat)
+ pageOutput, err = page.mainPageOutput.copyWithFormat(outFormat)
}
if err != nil {
@@ -159,7 +155,10 @@
continue
}
- pagerNode := p.copy()
+ pagerNode, err := p.copy()
+ if err != nil {
+ return err
+ }
pagerNode.paginator = pager
if pager.TotalPages() > 0 {