summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-03-30 09:12:49 +0100
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>2019-03-30 10:17:25 +0100
commit439ab0339d9ac6972caabaa55fa41887ace839cb (patch)
treed68f5df34683a34e258fe5e49f672ad862a2bb64
parentb6a60f718e376066456da37e7bb997a7697edc31 (diff)
resources: Fix image publish ordering issue
Fixes #5730
-rw-r--r--resources/image.go3
-rw-r--r--resources/image_test.go44
-rw-r--r--resources/testhelpers_test.go3
3 files changed, 49 insertions, 1 deletions
diff --git a/resources/image.go b/resources/image.go
index 202b54fc2..f1aae2996 100644
--- a/resources/image.go
+++ b/resources/image.go
@@ -510,6 +510,9 @@ func (i *Image) encodeTo(conf imageConfig, img image.Image, w io.Writer) error {
func (i *Image) clone() *Image {
g := *i.genericResource
g.resourceContent = &resourceContent{}
+ if g.publishOnce != nil {
+ g.publishOnce = &publishOnce{logger: g.publishOnce.logger}
+ }
return &Image{
imaging: i.imaging,
diff --git a/resources/image_test.go b/resources/image_test.go
index fd1eb5410..6639dbb24 100644
--- a/resources/image_test.go
+++ b/resources/image_test.go
@@ -152,6 +152,50 @@ func TestImageTransformLongFilename(t *testing.T) {
assert.Equal("/a/_hu59e56ffff1bc1d8d122b1403d34e039f_90587_c876768085288f41211f768147ba2647.jpg", resized.RelPermalink())
}
+// https://github.com/gohugoio/hugo/issues/5730
+func TestImagePermalinkPublishOrder(t *testing.T) {
+ for _, checkOriginalFirst := range []bool{true, false} {
+ name := "OriginalFirst"
+ if !checkOriginalFirst {
+ name = "ResizedFirst"
+ }
+
+ t.Run(name, func(t *testing.T) {
+
+ assert := require.New(t)
+ spec := newTestResourceOsFs(assert)
+
+ check1 := func(img *Image) {
+ resizedLink := "/a/sunset_hu59e56ffff1bc1d8d122b1403d34e039f_90587_100x50_resize_q75_box.jpg"
+ assert.Equal(resizedLink, img.RelPermalink())
+ assertImageFile(assert, spec.PublishFs, resizedLink, 100, 50)
+ }
+
+ check2 := func(img *Image) {
+ assert.Equal("/a/sunset.jpg", img.RelPermalink())
+ assertImageFile(assert, spec.PublishFs, "a/sunset.jpg", 900, 562)
+ }
+
+ orignal := fetchImageForSpec(spec, assert, "sunset.jpg")
+ assert.NotNil(orignal)
+
+ if checkOriginalFirst {
+ check2(orignal)
+ }
+
+ resized, err := orignal.Resize("100x50")
+ assert.NoError(err)
+
+ check1(resized)
+
+ if !checkOriginalFirst {
+ check2(orignal)
+ }
+ })
+ }
+
+}
+
func TestImageTransformConcurrent(t *testing.T) {
var wg sync.WaitGroup
diff --git a/resources/testhelpers_test.go b/resources/testhelpers_test.go
index 200a795e3..d064fa570 100644
--- a/resources/testhelpers_test.go
+++ b/resources/testhelpers_test.go
@@ -135,13 +135,14 @@ func fetchResourceForSpec(spec *Spec, assert *require.Assertions, name string) r
factory := newTargetPaths("/a")
- r, err := spec.New(ResourceSourceDescriptor{TargetPaths: factory, SourceFilename: name})
+ r, err := spec.New(ResourceSourceDescriptor{TargetPaths: factory, LazyPublish: true, SourceFilename: name})
assert.NoError(err)
return r.(resource.ContentResource)
}
func assertImageFile(assert *require.Assertions, fs afero.Fs, filename string, width, height int) {
+ filename = filepath.Clean(filename)
f, err := fs.Open(filename)
if err != nil {
printFs(fs, "", os.Stdout)