hugolib: Handle newly created files in Fast Render Mode
authorAlexey Grachov <grachov.alexey@gmail.com>
Sun, 28 Jan 2018 10:46:48 +0000 (12:46 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 30 Jan 2018 09:49:24 +0000 (10:49 +0100)
Updates #4339

hugolib/site.go
hugolib/site_render.go

index ece4e07af6f8dca1d5703b98080ba533d10cedf3..8a3cde9c7ce378d61a8f830068830b777d120fad 100644 (file)
@@ -536,6 +536,7 @@ func (s *Site) timerStep(step string) {
 type whatChanged struct {
        source bool
        other  bool
+       files  map[string]bool
 }
 
 // RegisterMediaTypes will register the Site's media types in the mime
@@ -640,6 +641,7 @@ func (s *Site) processPartial(events []fsnotify.Event) (whatChanged, error) {
                dataChanged         = []fsnotify.Event{}
                i18nChanged         = []fsnotify.Event{}
                shortcodesChanged   = make(map[string]bool)
+               sourceFilesChanged  = make(map[string]bool)
 
                // prevent spamming the log on changes
                logger = helpers.NewDistinctFeedbackLogger()
@@ -723,7 +725,7 @@ func (s *Site) processPartial(events []fsnotify.Event) (whatChanged, error) {
                }
 
                sourceReallyChanged = append(sourceReallyChanged, ev)
-
+               sourceFilesChanged[ev.Name] = true
        }
 
        for shortcode := range shortcodesChanged {
@@ -758,6 +760,7 @@ func (s *Site) processPartial(events []fsnotify.Event) (whatChanged, error) {
        changed := whatChanged{
                source: len(sourceChanged) > 0,
                other:  len(tmplChanged) > 0 || len(i18nChanged) > 0 || len(dataChanged) > 0,
+               files:  sourceFilesChanged,
        }
 
        return changed, nil
@@ -938,7 +941,7 @@ func (s *Site) render(config *BuildCfg, outFormatIdx int) (err error) {
 
        }
 
-       if err = s.renderPages(config.RecentlyVisited); err != nil {
+       if err = s.renderPages(config.RecentlyVisited, config.whatChanged.files); err != nil {
                return
        }
 
@@ -1246,7 +1249,6 @@ func (c *contentCaptureResultHandler) handleCopyFiles(filenames ...string) {
 }
 
 func (s *Site) readAndProcessContent(filenames ...string) error {
-
        ctx := context.Background()
        g, ctx := errgroup.WithContext(ctx)
 
index dc94ddce37b126d3b12921e06df5c322b7e5eb78..eebaec4fae96e939ece507b909364f59649ca458 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) error {
+func (s *Site) renderPages(filter map[string]bool, files map[string]bool) error {
 
        results := make(chan error)
        pages := make(chan *Page)
@@ -50,7 +50,7 @@ func (s *Site) renderPages(filter map[string]bool) error {
        hasFilter := filter != nil && len(filter) > 0
 
        for _, page := range s.Pages {
-               if hasFilter && !filter[page.RelPermalink()] {
+               if hasFilter && !filter[page.RelPermalink()] && !files[page.Source.Filename()] {
                        continue
                }
                pages <- page