diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-09-20 13:34:45 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2020-09-20 13:35:41 +0200 |
commit | 3acde9ae04fbf4a8c635d404608cb87218a8b803 (patch) | |
tree | 3c1e48dc7f43ce98d8138a44a560df0fda1bf5d5 | |
parent | 473b6610d51d4a33ba35917f95b0d97ea78dad2b (diff) | |
download | hugo-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.go | 13 | ||||
-rw-r--r-- | resources/resource_cache.go | 19 |
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) + } + } + +} |