hugolib: Extract the Fast Render Mode logic into a method
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 30 Jan 2018 09:33:57 +0000 (10:33 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 30 Jan 2018 09:49:24 +0000 (10:49 +0100)
This also improves on the previous commit as it takes pages without content files into account.

Closes #4339

hugolib/hugo_sites.go
hugolib/site.go
hugolib/site_render.go

index c52aec8133cf42af5d9bb3676a82b401177163df..e6000e06dd02a8018c4d4369065a56588bbf6382 100644 (file)
@@ -325,6 +325,26 @@ type BuildCfg struct {
        RecentlyVisited map[string]bool
 }
 
+// shouldRender is used in the Fast Render Mode to determine if we need to re-render
+// a Page: If it is recently visited (the home pages will always be in this set) or changed.
+// Note that a page does not have to have a content page / file.
+// For regular builds, this will allways return true.
+func (cfg *BuildCfg) shouldRender(p *Page) bool {
+       if len(cfg.RecentlyVisited) == 0 {
+               return true
+       }
+
+       if cfg.RecentlyVisited[p.RelPermalink()] {
+               return true
+       }
+
+       if cfg.whatChanged != nil && p.File != nil && cfg.whatChanged.files[p.File.Filename()] {
+               return true
+       }
+
+       return false
+}
+
 func (h *HugoSites) renderCrossSitesArtifacts() error {
 
        if !h.multilingual.enabled() || h.IsMultihost() {
index 8a3cde9c7ce378d61a8f830068830b777d120fad..0e5f034a463a4676d7a6dbb4e6c5adc66a1c4420 100644 (file)
@@ -941,7 +941,7 @@ func (s *Site) render(config *BuildCfg, outFormatIdx int) (err error) {
 
        }
 
-       if err = s.renderPages(config.RecentlyVisited, config.whatChanged.files); err != nil {
+       if err = s.renderPages(config); err != nil {
                return
        }
 
index eebaec4fae96e939ece507b909364f59649ca458..a2031e0c0702fc38ddc31da92955e1cc0cdd0899 100644 (file)
@@ -24,7 +24,7 @@ import (
 
 // renderPages renders pages each corresponding to a markdown file.
 // TODO(bep np doc
-func (s *Site) renderPages(filter map[string]bool, files map[string]bool) error {
+func (s *Site) renderPages(cfg *BuildCfg) error {
 
        results := make(chan error)
        pages := make(chan *Page)
@@ -47,13 +47,10 @@ func (s *Site) renderPages(filter map[string]bool, files map[string]bool) error
 
        }
 
-       hasFilter := filter != nil && len(filter) > 0
-
        for _, page := range s.Pages {
-               if hasFilter && !filter[page.RelPermalink()] && !files[page.Source.Filename()] {
-                       continue
+               if cfg.shouldRender(page) {
+                       pages <- page
                }
-               pages <- page
        }
 
        close(pages)