ref: 6dec671fb930029e18ba9aa5135b3a27adcddb21
parent: c0d7188ec85e7a4b61489e38896108d877f6d902
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Thu Sep 19 06:12:29 EDT 2019
Fix cache key transformed resources Fixes #6348
--- a/hugolib/hugo_smoke_test.go
+++ b/hugolib/hugo_smoke_test.go
@@ -301,33 +301,3 @@
b.CreateSites().Build(BuildCfg{})}
-
-func TestBundleMany(t *testing.T) {-
- b := newTestSitesBuilder(t).WithSimpleConfigFile()
- for i := 1; i <= 50; i++ {- b.WithContent(fmt.Sprintf("bundle%d/index.md", i), fmt.Sprintf(`----
-title: "Page %d"
----
-
-`, i))
- b.WithSourceFile(fmt.Sprintf("content/bundle%d/data.yaml", i), fmt.Sprintf(`-data: v%d
-`, i))
- }
-
- b.WithTemplatesAdded("_default/single.html", `-{{ $yaml := .Resources.GetMatch "*.yaml" }}-{{ $data := $yaml | transform.Unmarshal }}-data content: {{ $yaml.Content | safeHTML }}-data unmarshaled: {{ $data.data }}-`)
-
- b.CreateSites().Build(BuildCfg{})-
- for i := 1; i <= 50; i++ {- b.AssertFileContent(fmt.Sprintf("public/bundle%d/data.yaml", i), fmt.Sprintf("data: v%d", i))- b.AssertFileContent(fmt.Sprintf("public/bundle%d/index.html", i), fmt.Sprintf("data unmarshaled: v%d", i))- }
-}
--- a/hugolib/pagebundler_test.go
+++ b/hugolib/pagebundler_test.go
@@ -20,6 +20,8 @@
"strings"
"testing"
+ "github.com/gohugoio/hugo/helpers"
+
"github.com/gohugoio/hugo/hugofs"
"github.com/gohugoio/hugo/common/loggers"
@@ -1215,4 +1217,61 @@
page|bundle sub p2|
`)
+}
+
+func TestBundleTransformMany(t *testing.T) {+
+ b := newTestSitesBuilder(t).WithSimpleConfigFile().Running()
+
+ for i := 1; i <= 50; i++ {+ b.WithContent(fmt.Sprintf("bundle%d/index.md", i), fmt.Sprintf(`+---
+title: "Page"
+weight: %d
+---
+
+`, i))
+ b.WithSourceFile(fmt.Sprintf("content/bundle%d/data.yaml", i), fmt.Sprintf(`data: v%d`, i))+
+ b.WithSourceFile(fmt.Sprintf("assets/data%d/data.yaml", i), fmt.Sprintf(`vdata: v%d`, i))+
+ }
+
+ b.WithTemplatesAdded("_default/single.html", `+{{ $bundleYaml := .Resources.GetMatch "*.yaml" }}+{{ $assetsYaml := resources.GetMatch (printf "data%d/*.yaml" .Weight) }}+{{ $data1 := $bundleYaml | transform.Unmarshal }}+{{ $data2 := $assetsYaml | transform.Unmarshal }}+{{ $bundleFingerprinted := $bundleYaml | fingerprint "md5" }}+{{ $assetsFingerprinted := $assetsYaml | fingerprint "md5" }}+
+data content unmarshaled: {{ $data1.data }}+data assets content unmarshaled: {{ $data2.vdata }}+bundle fingerprinted: {{ $bundleFingerprinted.RelPermalink }}+assets fingerprinted: {{ $assetsFingerprinted.RelPermalink }}+`)
+
+ for i := 0; i < 3; i++ {+
+ b.Build(BuildCfg{})+
+ for i := 1; i <= 50; i++ {+ b.AssertFileContent(fmt.Sprintf("public/bundle%d/data.yaml", i), fmt.Sprintf("data: v%d", i))+ b.AssertFileContent(fmt.Sprintf("public/bundle%d/index.html", i), fmt.Sprintf("data content unmarshaled: v%d", i))+ b.AssertFileContent(fmt.Sprintf("public/bundle%d/index.html", i), fmt.Sprintf("data assets content unmarshaled: v%d", i))+
+ md5Asset := helpers.MD5String(fmt.Sprintf(`vdata: v%d`, i))
+ b.AssertFileContent(fmt.Sprintf("public/bundle%d/index.html", i), fmt.Sprintf("assets fingerprinted: /data%d/data.%s.yaml", i, md5Asset))+
+ // The original is not used, make sure it's not published.
+ b.Assert(b.CheckExists(fmt.Sprintf("public/data%d/data.yaml", i)), qt.Equals, false)+
+ md5Bundle := helpers.MD5String(fmt.Sprintf(`data: v%d`, i))
+ b.AssertFileContent(fmt.Sprintf("public/bundle%d/index.html", i), fmt.Sprintf("bundle fingerprinted: /bundle%d/data.%s.yaml", i, md5Bundle))+
+ }
+
+ b.EditFiles("assets/data/foo.yaml", "FOO")+
+ }
}
--- a/resources/transform.go
+++ b/resources/transform.go
@@ -304,7 +304,7 @@
key = key + "_" + tr.Key().Value()
}
- base := ResourceCacheKey(r.target.TargetPath())
+ base := ResourceCacheKey(r.target.Key())
key = cache.cleanKey(base) + "_" + helpers.MD5String(key)
@@ -537,6 +537,7 @@
resource.ContentProvider
resource.Resource
+ resource.Identifier
}
type transformationUpdate struct {--
⑨