hugolib: Prepare render per output format
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 5 May 2017 07:24:37 +0000 (09:24 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 13 May 2017 19:44:15 +0000 (22:44 +0300)
See #3220

hugolib/hugo_sites.go
hugolib/hugo_sites_build.go
hugolib/shortcode.go
hugolib/site.go

index b18e66bacc6beff57449469882a34d2cda98a60b..8a8fc2223a78d359ff8230dd283d7c32c8750cd2 100644 (file)
@@ -492,7 +492,13 @@ func (h *HugoSites) setupTranslations() {
        }
 }
 
-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
index 58088fd7cae4be7d2cc98a00c6695c33d0c22e1c..12689f6de0aaa668523e29534d2e5022e5e7396f 100644 (file)
@@ -203,26 +203,31 @@ func (h *HugoSites) assemble(config *BuildCfg) error {
                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
                }
index b088ed61d9f46aca530fe5847a7c10f64fef4310..abe445d71dcabcb9e936b844534dea1625c911a4 100644 (file)
@@ -309,6 +309,7 @@ func executeShortcodeFuncMap(funcs map[string]func() (string, error)) (map[strin
 }
 
 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 @@ func renderShortcodes(shortcodes map[string]shortcode, p *Page) map[string]func(
                        // 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 }
                }
        }
 
index 9bd9b49236d6e8d6f50034c876edc007f6088c84..bd029d47af246e6987317ed39861c5a43ec64fd7 100644 (file)
@@ -986,31 +986,35 @@ func (s *Site) setupSitePages() {
        s.Info.LastChange = siteLastChange
 }
 
-func (s *Site) render() (err error) {
+func (s *Site) render(outFormatIdx int) (err error) {
+
+       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")
 
-       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 {
+       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