Skip to content

Commit

Permalink
Fix MediaType when reading images from cache
Browse files Browse the repository at this point in the history
Fixes #8931
  • Loading branch information
bep committed Apr 16, 2022
1 parent 0093eaa commit 397fce5
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 3 deletions.
22 changes: 19 additions & 3 deletions hugolib/integrationtest_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package hugolib

import (
"bytes"
"encoding/base64"
"fmt"
"io"
"os"
Expand Down Expand Up @@ -40,12 +41,13 @@ func NewIntegrationTestBuilder(conf IntegrationTestConfig) *IntegrationTestBuild
}

if conf.NeedsOsFS {
doClean := true
tempDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-integration-test")
c.Assert(err, qt.IsNil)
conf.WorkingDir = filepath.Join(tempDir, conf.WorkingDir)
if doClean {
if !conf.PrintAndKeepTempDir {
c.Cleanup(clean)
} else {
fmt.Println("\nUsing WorkingDir dir:", conf.WorkingDir)
}
} else if conf.WorkingDir == "" {
conf.WorkingDir = helpers.FilePathSeparator
Expand Down Expand Up @@ -278,10 +280,19 @@ func (s *IntegrationTestBuilder) initBuilder() {

logger := loggers.NewBasicLoggerForWriter(s.Cfg.LogLevel, &s.logBuff)

isBinaryRe := regexp.MustCompile(`^(.*)(\.png|\.jpg)$`)

for _, f := range s.data.Files {
filename := filepath.Join(s.Cfg.WorkingDir, f.Name)
data := bytes.TrimSuffix(f.Data, []byte("\n"))
if isBinaryRe.MatchString(filename) {
var err error
data, err = base64.StdEncoding.DecodeString(string(data))
s.Assert(err, qt.IsNil)

}
s.Assert(afs.MkdirAll(filepath.Dir(filename), 0777), qt.IsNil)
s.Assert(afero.WriteFile(afs, filename, bytes.TrimSuffix(f.Data, []byte("\n")), 0666), qt.IsNil)
s.Assert(afero.WriteFile(afs, filename, data, 0666), qt.IsNil)
}

cfg, _, err := LoadConfig(
Expand All @@ -297,6 +308,8 @@ func (s *IntegrationTestBuilder) initBuilder() {
},
)

s.Assert(err, qt.IsNil)

cfg.Set("workingDir", s.Cfg.WorkingDir)

fs := hugofs.NewFrom(afs, cfg)
Expand Down Expand Up @@ -457,6 +470,9 @@ type IntegrationTestConfig struct {
// Whether it needs the real file system (e.g. for js.Build tests).
NeedsOsFS bool

// Do not remove the temp dir after the test.
PrintAndKeepTempDir bool

// Whether to run npm install before Build.
NeedsNpmInstall bool

Expand Down
1 change: 1 addition & 0 deletions resources/image_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ func (c *imageCache) getOrCreate(
rp := img.getResourcePaths()
rp.relTargetDirFile.file = relTarget.file
img.setSourceFilename(info.Name)
img.setMediaType(conf.TargetFormat.MediaType())

if err := img.InitConfig(r); err != nil {
return err
Expand Down
69 changes: 69 additions & 0 deletions resources/integration_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// Copyright 2022 The Hugo Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package resources_test

import (
"strings"
"testing"

"github.com/gohugoio/hugo/hugolib"
)

// Issue 8931
func TestImageCache(t *testing.T) {

files := `
-- config.toml --
baseURL = "https://example.org"
-- content/mybundle/index.md --
---
title: "My Bundle"
---
-- content/mybundle/pixel.png --
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAAAABJRU5ErkJggg==
-- layouts/foo.html --
-- layouts/index.html --
{{ $p := site.GetPage "mybundle"}}
{{ $img := $p.Resources.Get "pixel.png" }}
{{ $gif := $img.Resize "1x1 gif" }}
{{ $bmp := $img.Resize "1x1 bmp" }}
gif: {{ $gif.RelPermalink }}|{{ $gif.MediaType }}|
bmp: {{ $bmp.RelPermalink }}|{{ $bmp.MediaType }}|
`

b := hugolib.NewIntegrationTestBuilder(
hugolib.IntegrationTestConfig{
T: t,
TxtarString: files,
NeedsOsFS: true,
Running: true,
}).Build()

assertImages := func() {
b.AssertFileContent("public/index.html", `
gif: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_1x1_resize_box_3.gif|image/gif|
bmp: /mybundle/pixel_hu8aa3346827e49d756ff4e630147c42b5_70_1x1_resize_box_3.bmp|image/bmp|
`)
}

assertImages()

b.EditFileReplace("content/mybundle/index.md", func(s string) string { return strings.ReplaceAll(s, "Bundle", "BUNDLE") })
b.Build()

assertImages()

}

0 comments on commit 397fce5

Please sign in to comment.