]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Don't use the baseURL /path as part of the resource cache key
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 27 May 2022 11:23:37 +0000 (13:23 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 27 May 2022 17:11:16 +0000 (19:11 +0200)
As that prevents Hugo projects with sub paths in their `baseURL` to use themes with cached resources.

Fixes #9787

hugolib/integrationtest_builder.go
resources/resource.go
resources/resource_transformers/postcss/integration_test.go

index 0ec202f89b44ec7b0ec71e8c9da585bbe4cd6c9f..df51b37c32d8ab99eda039b0bb0aa0e4a09aa20d 100644 (file)
@@ -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
index e38090dbe738aff8f35e597c411f159721fa5e34..5773977a26b61d53e1ea61ccb93107f1dca0c374 100644 (file)
@@ -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 {
index fdebcc52c37e98bd20303be2cb3388406eaf86bb..ab48297e4da3aa2bb08b32ec3215432142107a11 100644 (file)
@@ -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
+`)
+
+       }
+
+}