ref: d6a2024e6b675ca30629bbbc7e8a6592defc942c
parent: d6982ac0acdf0449d74313e2c62d791c55fbaa28
author: Bjørn Erik Pedersen <[email protected]>
date: Thu Apr 19 13:40:57 EDT 2018
Revert "Improve .Content vs shortcodes" This reverts commit e590cc26eb1363a4b84603f051b20bd43fd1f7bd.
--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -559,82 +559,37 @@
}
}
-type pagesRenderPreparer struct {
- numWorkers int
- s *Site
- cfg *BuildCfg
- wg *sync.WaitGroup
- pages chan *Page
-}
+func (s *Site) preparePagesForRender(cfg *BuildCfg) {
-func newStartedRenderPreparator(s *Site, cfg *BuildCfg) *pagesRenderPreparer {
+ pageChan := make(chan *Page)
+ wg := &sync.WaitGroup{}
+
numWorkers := getGoMaxProcs() * 4
- pp := &pagesRenderPreparer{
- s: s,
- cfg: cfg,
- numWorkers: numWorkers,
- wg: &sync.WaitGroup{},
- pages: make(chan *Page),
- }
- pp.start()
- return pp
-}
+ for i := 0; i < numWorkers; i++ {
+ wg.Add(1)
+ go func(pages <-chan *Page, wg *sync.WaitGroup) {
+ defer wg.Done()
+ for p := range pages {
+ if err := p.prepareForRender(cfg); err != nil {
+ s.Log.ERROR.Printf("Failed to prepare page %q for render: %s", p.BaseFileName(), err)
-func (pp *pagesRenderPreparer) start() {
- for i := 0; i < pp.numWorkers; i++ {
- pp.wg.Add(1)
- go func() {
- defer pp.wg.Done()
- for p := range pp.pages {
- if err := p.prepareForRender(pp.cfg); err != nil {
- pp.s.Log.ERROR.Printf("Failed to prepare page %q for render: %s", p.BaseFileName(), err)
-
}
}
- }()
+ }(pageChan, wg)
}
-}
-func (pp *pagesRenderPreparer) add(p *Page) {
- pp.pages <- p
-}
+ for _, p := range s.Pages {
+ pageChan <- p
+ }
-func (pp *pagesRenderPreparer) done() {
- close(pp.pages)
- pp.wg.Wait()
-}
-
-func (s *Site) preparePagesForRender(cfg *BuildCfg) {
-
- // For the content from other pages in shortcodes there are some chicken and
- // egg dependencies that is hard to get around. But we can improve on this
- // by preparing the pages in a certain order.
- // So the headless pages goes first. These are typically collection of
- // pages and images etc. used by others.
- batch := newStartedRenderPreparator(s, cfg)
for _, p := range s.headlessPages {
- batch.add(p)
+ pageChan <- p
}
- batch.done()
+ close(pageChan)
- // Then the rest in the following order:
- order := []bundleDirType{bundleLeaf, bundleNot, bundleBranch}
-
- for _, tp := range order {
- batch = newStartedRenderPreparator(s, cfg)
- for _, p := range s.Pages {
- // sanity check
- if p.bundleType < 0 || p.bundleType > bundleBranch {
- panic("unknown bundle type")
- }
- if p.bundleType == tp {
- batch.add(p)
- }
- }
- batch.done()
- }
+ wg.Wait()
}
--- a/hugolib/hugo_sites_build.go
+++ b/hugolib/hugo_sites_build.go
@@ -224,7 +224,6 @@
s.initRenderFormats()
for i, rf := range s.renderFormats {
s.rc = &siteRenderingContext{Format: rf}
-
s.preparePagesForRender(config)
if !config.SkipRender {
--- a/hugolib/page.go
+++ b/hugolib/page.go
@@ -243,8 +243,6 @@
// 3. But you can get it via .Site.GetPage
headless bool
- bundleType bundleDirType
-
layoutDescriptor output.LayoutDescriptor
scratch *Scratch
--- a/hugolib/page_bundler_handlers.go
+++ b/hugolib/page_bundler_handlers.go
@@ -218,8 +218,6 @@
ctx.currentPage = p
if ctx.bundle != nil {
- p.bundleType = ctx.bundle.tp
-
// Add the bundled files
for _, fi := range ctx.bundle.resources {
childCtx := ctx.childCtx(fi)
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -1865,15 +1865,14 @@
func (s *Site) newNodePage(typ string, sections ...string) *Page {
p := &Page{
- bundleType: bundleBranch,
- language: s.Language,
- pageInit: &pageInit{},
- Kind: typ,
- Source: Source{File: &source.FileInfo{}},
- Data: make(map[string]interface{}),
- Site: &s.Info,
- sections: sections,
- s: s}
+ language: s.Language,
+ pageInit: &pageInit{},
+ Kind: typ,
+ Source: Source{File: &source.FileInfo{}},
+ Data: make(map[string]interface{}),
+ Site: &s.Info,
+ sections: sections,
+ s: s}
p.outputFormats = p.s.outputFormats[p.Kind]