diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-02-21 09:02:07 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-02-21 09:41:39 +0100 |
commit | f46053034759c4f9790a79e0a146dbc1b426b1ff (patch) | |
tree | 8162b999e444b887f104ffdf1ae700352860bccb /hugolib/content_map_page.go | |
parent | 4c2a0de412a850745ad32e580fcd65575192ca53 (diff) |
Fix panic on no output formats
A page needs its output formats even if it should not be rendered or its resources should not be published.
Fixes #6924
Diffstat (limited to 'hugolib/content_map_page.go')
-rw-r--r-- | hugolib/content_map_page.go | 64 |
1 files changed, 31 insertions, 33 deletions
diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go index ca84ee873..18b2ee1a7 100644 --- a/hugolib/content_map_page.go +++ b/hugolib/content_map_page.go @@ -177,42 +177,40 @@ func (m *pageMap) newPageFromContentNode(n *contentNode, parentBucket *pagesMapB outputFormatsForPage := ps.m.outputFormats() - if !ps.m.noRender() { - // Prepare output formats for all sites. - ps.pageOutputs = make([]*pageOutput, len(ps.s.h.renderFormats)) - created := make(map[string]*pageOutput) - - for i, f := range ps.s.h.renderFormats { - if po, found := created[f.Name]; found { - ps.pageOutputs[i] = po - continue - } - - _, render := outputFormatsForPage.GetByName(f.Name) - po := newPageOutput(ps, pp, f, render) - - // Create a content provider for the first, - // we may be able to reuse it. - if i == 0 { - contentProvider, err := newPageContentOutput(ps, po) - if err != nil { - return nil, err - } - po.initContentProvider(contentProvider) - } - + // Prepare output formats for all sites. + // We do this even if this page does not get rendered on + // its own. It may be referenced via .Site.GetPage and + // it will then need an output format. + ps.pageOutputs = make([]*pageOutput, len(ps.s.h.renderFormats)) + created := make(map[string]*pageOutput) + shouldRenderPage := !ps.m.noRender() + + for i, f := range ps.s.h.renderFormats { + if po, found := created[f.Name]; found { ps.pageOutputs[i] = po - created[f.Name] = po + continue } - } else if ps.m.buildConfig.PublishResources { - // We need one output format for potential resources to publish. - po := newPageOutput(ps, pp, outputFormatsForPage[0], false) - contentProvider, err := newPageContentOutput(ps, po) - if err != nil { - return nil, err + + render := shouldRenderPage + if render { + _, render = outputFormatsForPage.GetByName(f.Name) } - po.initContentProvider(contentProvider) - ps.pageOutputs = []*pageOutput{po} + + po := newPageOutput(ps, pp, f, render) + + // Create a content provider for the first, + // we may be able to reuse it. + if i == 0 { + contentProvider, err := newPageContentOutput(ps, po) + if err != nil { + return nil, err + } + po.initContentProvider(contentProvider) + } + + ps.pageOutputs[i] = po + created[f.Name] = po + } if err := ps.initCommonProviders(pp); err != nil { |