summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoe Mooring <joe.mooring@veriphor.com>2024-03-25 14:17:57 -0700
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2024-03-27 09:59:59 +0100
commit54a8f0ce21015df7f9927dca358b6d09a560e37b (patch)
treeb0e642432936d2c0a3b0a6b2de171814275655ca
parent38e05bd3c7afdd676ac924222c66579978846b84 (diff)
resources: Use different cache key when copying resources
Closes #10412 Closes #12310
-rw-r--r--resources/resource_factories/create/create.go4
-rw-r--r--resources/resources_integration_test.go47
2 files changed, 49 insertions, 2 deletions
diff --git a/resources/resource_factories/create/create.go b/resources/resource_factories/create/create.go
index 061ecf1e7..4725cf390 100644
--- a/resources/resource_factories/create/create.go
+++ b/resources/resource_factories/create/create.go
@@ -57,7 +57,7 @@ func New(rs *resources.Spec) *Client {
// Copy copies r to the new targetPath.
func (c *Client) Copy(r resource.Resource, targetPath string) (resource.Resource, error) {
- key := dynacache.CleanKey(targetPath)
+ key := dynacache.CleanKey(targetPath) + "__copy"
return c.rs.ResourceCache.GetOrCreate(key, func() (resource.Resource, error) {
return resources.Copy(r, targetPath), nil
})
@@ -66,7 +66,7 @@ func (c *Client) Copy(r resource.Resource, targetPath string) (resource.Resource
// Get creates a new Resource by opening the given pathname in the assets filesystem.
func (c *Client) Get(pathname string) (resource.Resource, error) {
pathname = path.Clean(pathname)
- key := dynacache.CleanKey(pathname)
+ key := dynacache.CleanKey(pathname) + "__get"
return c.rs.ResourceCache.GetOrCreate(key, func() (resource.Resource, error) {
// The resource file will not be read before it gets used (e.g. in .Content),
diff --git a/resources/resources_integration_test.go b/resources/resources_integration_test.go
index a0b35196a..ba580b4dc 100644
--- a/resources/resources_integration_test.go
+++ b/resources/resources_integration_test.go
@@ -227,3 +227,50 @@ eventDate: 2023-11-01T07:00:00-08:00
b.AssertFileContent("public/index.html", "2023-11|p9|p8|p7|2023-10|p6|p5|p4|2023-09|p3|p2|p1|")
}
+
+// Issue 10412
+func TestImageTransformThenCopy(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- hugo.toml --
+disableKinds = ['page','rss','section','sitemap','taxonomy','term']
+-- assets/pixel.png --
+iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==
+-- layouts/index.html --
+{{- with resources.Get "pixel.png" }}
+ {{- with .Resize "200x" | resources.Copy "pixel.png" }}
+ <img src="{{ .RelPermalink }}" width="{{ .Width }}" height="{{ .Height }}">|{{ .Key }}
+ {{- end }}
+{{- end }}
+`
+
+ b := hugolib.Test(t, files)
+
+ b.AssertFileExists("public/pixel.png", true)
+ b.AssertFileContent("public/index.html",
+ `<img src="/pixel.png" width="200" height="200">|/pixel.png`,
+ )
+}
+
+// Issue 12310
+func TestUseDifferentCacheKeyForResourceCopy(t *testing.T) {
+ t.Parallel()
+
+ files := `
+-- hugo.toml --
+disableKinds = ['page','section','rss','sitemap','taxonomy','term']
+-- assets/a.txt --
+This was assets/a.txt
+-- layouts/index.html --
+{{ $nilResource := resources.Get "/p1/b.txt" }}
+{{ $r := resources.Get "a.txt" }}
+{{ $r = resources.Copy "/p1/b.txt" $r }}
+{{ $r.RelPermalink }}
+`
+
+ b, err := hugolib.TestE(t, files)
+
+ b.Assert(err, qt.IsNil)
+ b.AssertFileContent("public/p1/b.txt", "This was assets/a.txt")
+}