Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-02-21 11:02:07 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-02-21 11:41:39 +0300
commitf46053034759c4f9790a79e0a146dbc1b426b1ff (patch)
tree8162b999e444b887f104ffdf1ae700352860bccb /hugolib/content_map_page.go
parent4c2a0de412a850745ad32e580fcd65575192ca53 (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.go64
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 {