mirror of
https://github.com/gohugoio/hugo.git
synced 2024-11-21 20:46:30 -05:00
hugolib: Extract the Fast Render Mode logic into a method
This also improves on the previous commit as it takes pages without content files into account. Closes #4339
This commit is contained in:
parent
1707dae8d3
commit
94e736c5e1
3 changed files with 24 additions and 7 deletions
|
@ -325,6 +325,26 @@ type BuildCfg struct {
|
||||||
RecentlyVisited map[string]bool
|
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 {
|
func (h *HugoSites) renderCrossSitesArtifacts() error {
|
||||||
|
|
||||||
if !h.multilingual.enabled() || h.IsMultihost() {
|
if !h.multilingual.enabled() || h.IsMultihost() {
|
||||||
|
|
|
@ -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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@ import (
|
||||||
|
|
||||||
// renderPages renders pages each corresponding to a markdown file.
|
// renderPages renders pages each corresponding to a markdown file.
|
||||||
// TODO(bep np doc
|
// 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)
|
results := make(chan error)
|
||||||
pages := make(chan *Page)
|
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 {
|
for _, page := range s.Pages {
|
||||||
if hasFilter && !filter[page.RelPermalink()] && !files[page.Source.Filename()] {
|
if cfg.shouldRender(page) {
|
||||||
continue
|
pages <- page
|
||||||
}
|
}
|
||||||
pages <- page
|
|
||||||
}
|
}
|
||||||
|
|
||||||
close(pages)
|
close(pages)
|
||||||
|
|
Loading…
Reference in a new issue