hugo

Unnamed repository; edit this file 'description' to name the repository.

git clone git://git.shimmy1996.com/hugo.git
commit 6dec671fb930029e18ba9aa5135b3a27adcddb21
parent c0d7188ec85e7a4b61489e38896108d877f6d902
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date:   Thu, 19 Sep 2019 10:12:29 +0200

Fix cache key transformed resources

Fixes #6348

Diffstat:
Mhugolib/hugo_smoke_test.go | 30------------------------------
Mhugolib/pagebundler_test.go | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mresources/transform.go | 3++-
3 files changed, 61 insertions(+), 31 deletions(-)
diff --git a/hugolib/hugo_smoke_test.go b/hugolib/hugo_smoke_test.go
@@ -301,33 +301,3 @@ The content.
 
 	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))
-	}
-}
diff --git a/hugolib/pagebundler_test.go b/hugolib/pagebundler_test.go
@@ -20,6 +20,8 @@ import (
 	"strings"
 	"testing"
 
+	"github.com/gohugoio/hugo/helpers"
+
 	"github.com/gohugoio/hugo/hugofs"
 
 	"github.com/gohugoio/hugo/common/loggers"
@@ -1216,3 +1218,60 @@ title: %q
 `)
 
 }
+
+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")
+
+	}
+}
diff --git a/resources/transform.go b/resources/transform.go
@@ -304,7 +304,7 @@ func (r *resourceAdapter) transform(publish, setContent bool) error {
 		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 @@ type transformableResource interface {
 
 	resource.ContentProvider
 	resource.Resource
+	resource.Identifier
 }
 
 type transformationUpdate struct {