diff options
author | Joe Mooring <[email protected]> | 2024-03-25 14:17:57 -0700 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-03-27 09:59:59 +0100 |
commit | 54a8f0ce21015df7f9927dca358b6d09a560e37b (patch) | |
tree | b0e642432936d2c0a3b0a6b2de171814275655ca /resources | |
parent | 38e05bd3c7afdd676ac924222c66579978846b84 (diff) | |
download | hugo-54a8f0ce21015df7f9927dca358b6d09a560e37b.tar.gz hugo-54a8f0ce21015df7f9927dca358b6d09a560e37b.zip |
resources: Use different cache key when copying resources
Closes #10412
Closes #12310
Diffstat (limited to 'resources')
-rw-r--r-- | resources/resource_factories/create/create.go | 4 | ||||
-rw-r--r-- | resources/resources_integration_test.go | 47 |
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") +} |