aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-05-05 10:44:35 +0200
committerBjørn Erik Pedersen <[email protected]>2024-05-05 12:41:51 +0200
commitbb59a7ed979db459275e5fac96f80a51ff3b5674 (patch)
tree6a06d550b2021c480d6c4b900ec5462fefe9927d
parent503d20954f10507b9b43c6ee1c38001e53cf0b14 (diff)
downloadhugo-bb59a7ed979db459275e5fac96f80a51ff3b5674.tar.gz
hugo-bb59a7ed979db459275e5fac96f80a51ff3b5674.zip
Fix one more resource change eviction logic issue
This is how we should have fixed #1239. Fixes #12456
-rw-r--r--hugolib/hugo_sites_build.go47
-rw-r--r--resources/resource_transformers/tocss/scss/scss_integration_test.go61
-rw-r--r--resources/transform.go5
3 files changed, 67 insertions, 46 deletions
diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go
index c96629cd6..6a9afee99 100644
--- a/hugolib/hugo_sites_build.go
+++ b/hugolib/hugo_sites_build.go
@@ -23,11 +23,9 @@ import (
"path"
"path/filepath"
"strings"
- "sync"
"time"
"github.com/bep/logg"
- "github.com/gohugoio/hugo/cache/dynacache"
"github.com/gohugoio/hugo/deps"
"github.com/gohugoio/hugo/hugofs"
"github.com/gohugoio/hugo/hugofs/files"
@@ -47,7 +45,6 @@ import (
"github.com/gohugoio/hugo/resources/page"
"github.com/gohugoio/hugo/resources/page/siteidentities"
"github.com/gohugoio/hugo/resources/postpub"
- "github.com/gohugoio/hugo/resources/resource"
"github.com/spf13/afero"
@@ -764,48 +761,8 @@ func (h *HugoSites) processPartial(ctx context.Context, l logg.LevelLogger, conf
}
}
case files.ComponentFolderAssets:
- p := pathInfo.Path()
- logger.Println("Asset changed", p)
-
- var matches []any
- var mu sync.Mutex
-
- h.MemCache.ClearMatching(
- func(k string, pm dynacache.PartitionManager) bool {
- // Avoid going through everything.
- return strings.HasPrefix(k, "/res")
- },
- func(k, v any) bool {
- if strings.Contains(k.(string), p) {
- mu.Lock()
- defer mu.Unlock()
- switch vv := v.(type) {
- case resource.Resources:
- // GetMatch/Match.
- for _, r := range vv {
- matches = append(matches, r)
- }
- return true
- default:
- matches = append(matches, vv)
- return true
-
- }
- }
- return false
- })
-
- var hasID bool
- for _, r := range matches {
- identity.WalkIdentitiesShallow(r, func(level int, rid identity.Identity) bool {
- hasID = true
- changes = append(changes, rid)
- return false
- })
- }
- if !hasID {
- changes = append(changes, pathInfo)
- }
+ logger.Println("Asset changed", pathInfo.Path())
+ changes = append(changes, pathInfo)
case files.ComponentFolderData:
logger.Println("Data changed", pathInfo.Path())
diff --git a/resources/resource_transformers/tocss/scss/scss_integration_test.go b/resources/resource_transformers/tocss/scss/scss_integration_test.go
index 02e2b9200..469463872 100644
--- a/resources/resource_transformers/tocss/scss/scss_integration_test.go
+++ b/resources/resource_transformers/tocss/scss/scss_integration_test.go
@@ -1,4 +1,4 @@
-// Copyright 2021 The Hugo Authors. All rights reserved.
+// Copyright 2024 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
@@ -328,6 +328,7 @@ Styles: {{ $r.RelPermalink }}
b.AssertFileContent("public/index.html", "Styles: /scss/main.css")
}
+// Issue #1239.
func TestRebuildAssetGetMatch(t *testing.T) {
t.Parallel()
if !scss.Supports() {
@@ -358,3 +359,61 @@ T1: {{ $r.Content }}
b.AssertFileContent("public/index.html", `color: blue`)
}
+
+func TestRebuildAssetMatchIssue12456(t *testing.T) {
+ t.Parallel()
+ if !scss.Supports() {
+ t.Skip()
+ }
+
+ files := `
+-- hugo.toml --
+disableKinds = ["term", "taxonomy", "section", "page"]
+disableLiveReload = true
+-- assets/a.scss --
+h1 {
+ color: red;
+}
+-- assets/dir/b.scss --
+h2 {
+ color: blue;
+}
+-- assets/dir/c.scss --
+h3 {
+ color: green;
+}
+-- layouts/index.html --
+{{ $a := slice (resources.Get "a.scss") }}
+{{ $b := resources.Match "dir/*.scss" }}
+
+{{/* Add styles in a specific order. */}}
+{{ $styles := slice $a $b }}
+
+{{ $stylesheets := slice }}
+ {{ range $styles }}
+ {{ $stylesheets = $stylesheets | collections.Append . }}
+{{ end }}
+
+
+{{ range $stylesheets }}
+ {{ with . | resources.ToCSS | fingerprint }}
+ <link as="style" href="{{ .RelPermalink }}" rel="preload stylesheet">
+ {{ end }}
+{{ end }}
+ `
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: t,
+ TxtarString: files,
+ NeedsOsFS: true,
+ Running: true,
+ // LogLevel: logg.LevelTrace,
+ }).Build()
+
+ b.AssertFileContent("public/index.html", `b.60a9f3bdc189ee8a857afd5b7e1b93ad1644de0873761a7c9bc84f781a821942.css`)
+
+ b.EditFiles("assets/dir/b.scss", `h2 { color: orange; }`).Build()
+
+ b.AssertFileContent("public/index.html", `b.46b2d77c7ffe37ee191678f72df991ecb1319f849957151654362f09b0ef467f.css`)
+}
diff --git a/resources/transform.go b/resources/transform.go
index b498924f5..9adec38cc 100644
--- a/resources/transform.go
+++ b/resources/transform.go
@@ -49,6 +49,7 @@ var (
_ resource.ReadSeekCloserResource = (*resourceAdapter)(nil)
_ resource.Resource = (*resourceAdapter)(nil)
_ resource.Staler = (*resourceAdapterInner)(nil)
+ _ identity.IdentityGroupProvider = (*resourceAdapterInner)(nil)
_ resource.Source = (*resourceAdapter)(nil)
_ resource.Identifier = (*resourceAdapter)(nil)
_ resource.ResourceNameTitleProvider = (*resourceAdapter)(nil)
@@ -657,6 +658,10 @@ type resourceAdapterInner struct {
*publishOnce
}
+func (r *resourceAdapterInner) GetIdentityGroup() identity.Identity {
+ return r.target.GetIdentityGroup()
+}
+
func (r *resourceAdapterInner) StaleVersion() uint32 {
// Both of these are incremented on change.
return r.Staler.StaleVersion() + r.target.StaleVersion()