commit dd9eaf19fdeb37ce5861405beceaf018faac6386
parent 46a2ea6d0d3aba04213362fc72f5a3a28e3c3404
Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Date: Fri, 27 May 2022 13:23:37 +0200
Don't use the baseURL /path as part of the resource cache key
As that prevents Hugo projects with sub paths in their `baseURL` to use themes with cached resources.
Fixes #9787
Diffstat:
3 files changed, 86 insertions(+), 24 deletions(-)
diff --git a/hugolib/integrationtest_builder.go b/hugolib/integrationtest_builder.go
@@ -41,13 +41,15 @@ func NewIntegrationTestBuilder(conf IntegrationTestConfig) *IntegrationTestBuild
}
if conf.NeedsOsFS {
- tempDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-integration-test")
- c.Assert(err, qt.IsNil)
- conf.WorkingDir = filepath.Join(tempDir, conf.WorkingDir)
- if !conf.PrintAndKeepTempDir {
- c.Cleanup(clean)
- } else {
- fmt.Println("\nUsing WorkingDir dir:", conf.WorkingDir)
+ if !filepath.IsAbs(conf.WorkingDir) {
+ tempDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-integration-test")
+ c.Assert(err, qt.IsNil)
+ conf.WorkingDir = filepath.Join(tempDir, conf.WorkingDir)
+ if !conf.PrintAndKeepTempDir {
+ c.Cleanup(clean)
+ } else {
+ fmt.Println("\nUsing WorkingDir dir:", conf.WorkingDir)
+ }
}
} else if conf.WorkingDir == "" {
conf.WorkingDir = helpers.FilePathSeparator
diff --git a/resources/resource.go b/resources/resource.go
@@ -20,6 +20,7 @@ import (
"os"
"path"
"path/filepath"
+ "strings"
"sync"
"github.com/gohugoio/hugo/resources/internal"
@@ -267,7 +268,10 @@ func (l *genericResource) Data() any {
}
func (l *genericResource) Key() string {
- return l.RelPermalink()
+ if l.spec.BasePath == "" {
+ return l.RelPermalink()
+ }
+ return strings.TrimPrefix(l.RelPermalink(), l.spec.BasePath)
}
func (l *genericResource) MediaType() media.Type {
diff --git a/resources/resource_transformers/postcss/integration_test.go b/resources/resource_transformers/postcss/integration_test.go
@@ -23,6 +23,7 @@ import (
qt "github.com/frankban/quicktest"
"github.com/gohugoio/hugo/htesting"
+ "github.com/gohugoio/hugo/hugofs"
"github.com/gohugoio/hugo/hugolib"
)
@@ -55,6 +56,9 @@ h1 {
-- config.toml --
disablekinds = ['taxonomy', 'term', 'page']
+baseURL = "https://example.com"
+[build]
+useResourceCacheWhen = 'never'
-- content/p1.md --
-- data/hugo.toml --
slogan = "Hugo Rocks!"
@@ -99,25 +103,40 @@ func TestTransformPostCSS(t *testing.T) {
}
c := qt.New(t)
-
- b := hugolib.NewIntegrationTestBuilder(
- hugolib.IntegrationTestConfig{
- T: c,
- NeedsOsFS: true,
- NeedsNpmInstall: true,
- LogLevel: jww.LevelInfo,
- TxtarString: postCSSIntegrationTestFiles,
- }).Build()
-
- b.AssertLogContains("Hugo Environment: production")
- b.AssertLogContains(filepath.FromSlash(fmt.Sprintf("PostCSS Config File: %s/postcss.config.js", b.Cfg.WorkingDir)))
- b.AssertLogContains(filepath.FromSlash(fmt.Sprintf("package.json: %s/package.json", b.Cfg.WorkingDir)))
-
- b.AssertFileContent("public/index.html", `
-Styles RelPermalink: /css/styles.css
+ tempDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-integration-test")
+ c.Assert(err, qt.IsNil)
+ c.Cleanup(clean)
+
+ for _, s := range []string{"never", "always"} {
+
+ repl := strings.NewReplacer(
+ "https://example.com",
+ "https://example.com/foo",
+ "useResourceCacheWhen = 'never'",
+ fmt.Sprintf("useResourceCacheWhen = '%s'", s),
+ )
+
+ files := repl.Replace(postCSSIntegrationTestFiles)
+
+ fmt.Println("===>", s, files)
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: c,
+ NeedsOsFS: true,
+ NeedsNpmInstall: true,
+ LogLevel: jww.LevelInfo,
+ WorkingDir: tempDir,
+ TxtarString: files,
+ }).Build()
+
+ b.AssertFileContent("public/index.html", `
+Styles RelPermalink: /foo/css/styles.css
Styles Content: Len: 770917|
`)
+ }
+
}
// 9880
@@ -186,3 +205,40 @@ func TestTransformPostCSSImporSkipInlineImportsNotFound(t *testing.T) {
s.AssertFileContent("public/css/styles.css", `@import "components/doesnotexist.css";`)
}
+
+// Issue 9787
+func TestTransformPostCSSResourceCacheWithPathInBaseURL(t *testing.T) {
+ if !htesting.IsCI() {
+ t.Skip("Skip long running test when running locally")
+ }
+
+ c := qt.New(t)
+ tempDir, clean, err := htesting.CreateTempDir(hugofs.Os, "hugo-integration-test")
+ c.Assert(err, qt.IsNil)
+ c.Cleanup(clean)
+
+ for i := 0; i < 2; i++ {
+ files := postCSSIntegrationTestFiles
+
+ if i == 1 {
+ files = strings.ReplaceAll(files, "https://example.com", "https://example.com/foo")
+ files = strings.ReplaceAll(files, "useResourceCacheWhen = 'never'", " useResourceCacheWhen = 'always'")
+ }
+
+ b := hugolib.NewIntegrationTestBuilder(
+ hugolib.IntegrationTestConfig{
+ T: c,
+ NeedsOsFS: true,
+ NeedsNpmInstall: true,
+ LogLevel: jww.LevelInfo,
+ TxtarString: files,
+ WorkingDir: tempDir,
+ }).Build()
+
+ b.AssertFileContent("public/index.html", `
+Styles Content: Len: 770917
+`)
+
+ }
+
+}