summaryrefslogtreecommitdiffstats
path: root/hugolib
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-04-12 18:11:37 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2017-04-12 21:15:51 +0200
commit45c74526686f6a2afa02bcee767d837d6b9dd028 (patch)
tree22391738a5f8833fdc4592f97510298238e52332 /hugolib
parente765b43e2bf3d017f8ae8fd4d455d7bd60e11973 (diff)
hugolib: Must recreate Paginator on live-reload
The structure may potentially have changed, and then it fails. Fixes #3315
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/page_output.go15
-rw-r--r--hugolib/site_render.go15
2 files changed, 18 insertions, 12 deletions
diff --git a/hugolib/page_output.go b/hugolib/page_output.go
index 88e865c97..ea23dc203 100644
--- a/hugolib/page_output.go
+++ b/hugolib/page_output.go
@@ -78,13 +78,17 @@ func newPageOutput(p *Page, createCopy bool, f output.Format) (*PageOutput, erro
// 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) {
@@ -142,6 +146,9 @@ func (p *Page) Render(layout ...string) template.HTML {
}
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]
diff --git a/hugolib/site_render.go b/hugolib/site_render.go
index 17a14bd10..d5b16975d 100644
--- a/hugolib/site_render.go
+++ b/hugolib/site_render.go
@@ -75,14 +75,10 @@ func pageRenderer(s *Site, pages <-chan *Page, results chan<- error, wg *sync.Wa
)
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 @@ func (s *Site) renderPaginator(p *PageOutput) error {
continue
}
- pagerNode := p.copy()
+ pagerNode, err := p.copy()
+ if err != nil {
+ return err
+ }
pagerNode.paginator = pager
if pager.TotalPages() > 0 {