diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-03-30 09:12:49 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2019-03-30 10:17:25 +0100 |
commit | 439ab0339d9ac6972caabaa55fa41887ace839cb (patch) | |
tree | d68f5df34683a34e258fe5e49f672ad862a2bb64 | |
parent | b6a60f718e376066456da37e7bb997a7697edc31 (diff) |
resources: Fix image publish ordering issue
Fixes #5730
-rw-r--r-- | resources/image.go | 3 | ||||
-rw-r--r-- | resources/image_test.go | 44 | ||||
-rw-r--r-- | resources/testhelpers_test.go | 3 |
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) |