diff options
author | Bjørn Erik Pedersen <[email protected]> | 2022-05-27 13:23:37 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2022-05-27 19:11:16 +0200 |
commit | dd9eaf19fdeb37ce5861405beceaf018faac6386 (patch) | |
tree | 66fb496dc02dab4af49e924af1dce1d7e6df06ee | |
parent | 46a2ea6d0d3aba04213362fc72f5a3a28e3c3404 (diff) | |
download | hugo-dd9eaf19fdeb37ce5861405beceaf018faac6386.tar.gz hugo-dd9eaf19fdeb37ce5861405beceaf018faac6386.zip |
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
-rw-r--r-- | hugolib/integrationtest_builder.go | 16 | ||||
-rw-r--r-- | resources/resource.go | 6 | ||||
-rw-r--r-- | resources/resource_transformers/postcss/integration_test.go | 88 |
3 files changed, 86 insertions, 24 deletions
diff --git a/hugolib/integrationtest_builder.go b/hugolib/integrationtest_builder.go index 0ec202f89..df51b37c3 100644 --- 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 index e38090dbe..5773977a2 100644 --- 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 index fdebcc52c..ab48297e4 100644 --- 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 +`) + + } + +} |