summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-09-20 13:34:45 +0200
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2020-09-20 13:35:41 +0200
commit3acde9ae04fbf4a8c635d404608cb87218a8b803 (patch)
tree3c1e48dc7f43ce98d8138a44a560df0fda1bf5d5
parent473b6610d51d4a33ba35917f95b0d97ea78dad2b (diff)
downloadhugo-3acde9ae04fbf4a8c635d404608cb87218a8b803.tar.gz
hugo-3acde9ae04fbf4a8c635d404608cb87218a8b803.zip
Make sure CSS is rebuilt when postcss.config.js or tailwind.config.js changes
Fixes #7715
-rw-r--r--hugolib/site.go13
-rw-r--r--resources/resource_cache.go19
2 files changed, 32 insertions, 0 deletions
diff --git a/hugolib/site.go b/hugolib/site.go
index b06d5176b..43fbbe50e 100644
--- a/hugolib/site.go
+++ b/hugolib/site.go
@@ -23,6 +23,7 @@ import (
"os"
"path"
"path/filepath"
+ "regexp"
"sort"
"strconv"
"strings"
@@ -1027,11 +1028,20 @@ func (s *Site) processPartial(config *BuildCfg, init func(config *BuildCfg) erro
logger = helpers.NewDistinctFeedbackLogger()
)
+ var isCSSConfigRe = regexp.MustCompile(`(postcss|tailwind)\.config\.js`)
+ var isCSSFileRe = regexp.MustCompile(`\.(css|scss|sass)`)
+
var cachePartitions []string
+ // Special case
+ // TODO(bep) I have a ongoing branch where I have redone the cache. Consider this there.
+ var isCSSChange bool
for _, ev := range events {
if assetsFilename := s.BaseFs.Assets.MakePathRelative(ev.Name); assetsFilename != "" {
cachePartitions = append(cachePartitions, resources.ResourceKeyPartitions(assetsFilename)...)
+ if !isCSSChange {
+ isCSSChange = isCSSFileRe.MatchString(assetsFilename) || isCSSConfigRe.MatchString(assetsFilename)
+ }
}
id, found := s.eventToIdentity(ev)
@@ -1078,6 +1088,9 @@ func (s *Site) processPartial(config *BuildCfg, init func(config *BuildCfg) erro
// These in memory resource caches will be rebuilt on demand.
for _, s := range s.h.Sites {
s.ResourceSpec.ResourceCache.DeletePartitions(cachePartitions...)
+ if isCSSChange {
+ s.ResourceSpec.ResourceCache.DeleteContains("css", "scss", "sass")
+ }
}
if tmplChanged || i18nChanged {
diff --git a/resources/resource_cache.go b/resources/resource_cache.go
index 47822a7f5..feaa94f5c 100644
--- a/resources/resource_cache.go
+++ b/resources/resource_cache.go
@@ -295,3 +295,22 @@ func (c *ResourceCache) DeletePartitions(partitions ...string) {
}
}
+
+func (c *ResourceCache) DeleteContains(parts ...string) {
+ c.Lock()
+ defer c.Unlock()
+
+ for k := range c.cache {
+ clear := false
+ for _, part := range parts {
+ if strings.Contains(k, part) {
+ clear = true
+ break
+ }
+ }
+ if clear {
+ delete(c.cache, k)
+ }
+ }
+
+}