shithub: hugo

Download patch

ref: 2bcbf104006e0ec03be4fd500f2519301d460f8c
parent: 1e4d082cf5b92fedbc60b1b4f0e9d1ee6ec45e33
author: Bjørn Erik Pedersen <[email protected]>
date: Fri May 5 05:24:37 EDT 2017

hugolib: Prepare render per output format

See #3220

--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -492,7 +492,13 @@
 	}
 }
 
-func (s *Site) preparePagesForRender(cfg *BuildCfg) {
+func (s *Site) preparePagesForRender(outFormatIdx int, cfg *BuildCfg) {
+
+	if outFormatIdx > 0 {
+		// TODO(bep) for now
+		return
+	}
+
 	pageChan := make(chan *Page)
 	wg := &sync.WaitGroup{}
 	numWorkers := getGoMaxProcs() * 4
--- a/hugolib/hugo_sites_build.go
+++ b/hugolib/hugo_sites_build.go
@@ -203,26 +203,31 @@
 		return err
 	}
 
-	for _, s := range h.Sites {
-		s.preparePagesForRender(config)
-	}
-
 	return nil
 
 }
 
 func (h *HugoSites) render(config *BuildCfg) error {
-	if !config.SkipRender {
-		for _, s := range h.Sites {
-			if err := s.render(); err != nil {
-				return err
-			}
 
-			if config.PrintStats {
-				s.Stats()
+	for _, s := range h.Sites {
+		s.initRenderFormats()
+		for i, rf := range s.renderFormats {
+			s.rc = &siteRenderingContext{Format: rf}
+			s.preparePagesForRender(i, config)
+
+			if !config.SkipRender {
+				if err := s.render(i); err != nil {
+					return err
+				}
 			}
 		}
 
+		if !config.SkipRender && config.PrintStats {
+			s.Stats()
+		}
+	}
+
+	if !config.SkipRender {
 		if err := h.renderCrossSitesArtifacts(); err != nil {
 			return err
 		}
--- a/hugolib/shortcode.go
+++ b/hugolib/shortcode.go
@@ -309,6 +309,7 @@
 }
 
 func renderShortcodes(shortcodes map[string]shortcode, p *Page) map[string]func() (string, error) {
+
 	renderedShortcodes := make(map[string]func() (string, error))
 
 	for key, sc := range shortcodes {
@@ -316,8 +317,8 @@
 			// need to have something to replace with
 			renderedShortcodes[key] = emptyShortcodeFn
 		} else {
-			shorctode := sc
-			renderedShortcodes[key] = func() (string, error) { return renderShortcode(shorctode, nil, p), nil }
+			shortcode := sc
+			renderedShortcodes[key] = func() (string, error) { return renderShortcode(shortcode, nil, p), nil }
 		}
 	}
 
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -986,31 +986,35 @@
 	s.Info.LastChange = siteLastChange
 }
 
-func (s *Site) render() (err error) {
+func (s *Site) render(outFormatIdx int) (err error) {
 
-	if err = s.preparePages(); err != nil {
-		return
+	if outFormatIdx == 0 {
+		if err = s.preparePages(); err != nil {
+			return
+		}
+		s.timerStep("prepare pages")
+
+		// Aliases must be rendered before pages.
+		// Some sites, Hugo docs included, have faulty alias definitions that point
+		// to itself or another real page. These will be overwritten in the next
+		// step.
+		if err = s.renderAliases(); err != nil {
+			return
+		}
+		s.timerStep("render and write aliases")
+
 	}
-	s.timerStep("prepare pages")
 
-	// Aliases must be rendered before pages.
-	// Some sites, Hugo docs included, have faulty alias definitions that point
-	// to itself or another real page. These will be overwritten in the next
-	// step.
-	if err = s.renderAliases(); err != nil {
+	if err = s.renderPages(); err != nil {
 		return
 	}
-	s.timerStep("render and write aliases")
 
+	s.timerStep("render and write pages")
+
 	// TODO(bep) render consider this, ref. render404 etc.
-	s.initRenderFormats()
-	for _, rf := range s.renderFormats {
-		s.rc = &siteRenderingContext{Format: rf}
-		if err = s.renderPages(); err != nil {
-			return
-		}
+	if outFormatIdx > 0 {
+		return
 	}
-	s.timerStep("render and write pages")
 
 	if err = s.renderSitemap(); err != nil {
 		return