Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gohugoio/hugo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-08-15 21:41:19 +0300
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2018-08-16 13:54:59 +0300
commitd139a037d98e4b388687eecb7831758412247c58 (patch)
treee1057555939aec646f859cdc7247701c4fc00438 /hugolib
parent0a88741fe85f4f7aedc02ed748dfeb8ccc073dbf (diff)
hugoblib: Fix "adding a bundle" in server mode
Before this commit, the live reload logic in `hugo server` got confused when you dropped a new bundle into the project while the server was running. The workaround was to restart the server. This commit fixes the "live reload bundle detection" in server mode, and also makes sure that the bundle headers are always processed first. Fixes #5075
Diffstat (limited to 'hugolib')
-rw-r--r--hugolib/hugo_sites.go5
-rw-r--r--hugolib/page_bundler_capture.go25
2 files changed, 30 insertions, 0 deletions
diff --git a/hugolib/hugo_sites.go b/hugolib/hugo_sites.go
index 6ce6657fa..9241772b2 100644
--- a/hugolib/hugo_sites.go
+++ b/hugolib/hugo_sites.go
@@ -740,6 +740,11 @@ func (m *contentChangeMap) resolveAndRemove(filename string) (string, string, bu
}
}
+ if isContent && fileTp != bundleNot {
+ // A new bundle.
+ return dir, dir, fileTp
+ }
+
// Not part of any bundle
return dir, filename, bundleNot
}
diff --git a/hugolib/page_bundler_capture.go b/hugolib/page_bundler_capture.go
index 15a80681e..6fe413014 100644
--- a/hugolib/page_bundler_capture.go
+++ b/hugolib/page_bundler_capture.go
@@ -20,6 +20,7 @@ import (
"path"
"path/filepath"
"runtime"
+ "sort"
"strings"
"sync"
@@ -71,6 +72,30 @@ func newCapturer(
numWorkers = n
}
+ // TODO(bep) the "index" vs "_index" check/strings should be moved in one place.
+ isBundleHeader := func(filename string) bool {
+ base := filepath.Base(filename)
+ name := helpers.Filename(base)
+ return isContentFile(base) && (name == "index" || name == "_index")
+ }
+
+ // Make sure that any bundle header files are processed before the others. This makes
+ // sure that any bundle head is processed before its resources.
+ sort.Slice(filenames, func(i, j int) bool {
+ a, b := filenames[i], filenames[j]
+ ac, bc := isBundleHeader(a), isBundleHeader(b)
+
+ if ac {
+ return true
+ }
+
+ if bc {
+ return false
+ }
+
+ return a < b
+ })
+
c := &capturer{
sem: make(chan bool, numWorkers),
handler: handler,