shithub: hugo

Download patch

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]