Skip to content

Commit

Permalink
hugolib: Must recreate Paginator on live-reload
Browse files Browse the repository at this point in the history
The structure may potentially have changed, and then it fails.

Fixes #3315
  • Loading branch information
bep committed Apr 12, 2017
1 parent e765b43 commit 45c7452
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 12 deletions.
15 changes: 11 additions & 4 deletions hugolib/page_output.go
Expand Up @@ -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) {
Expand Down Expand Up @@ -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]
Expand Down
15 changes: 7 additions & 8 deletions hugolib/site_render.go
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand Down

0 comments on commit 45c7452

Please sign in to comment.