]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix one more resource change eviction logic issue
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 5 May 2024 08:44:35 +0000 (10:44 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 5 May 2024 10:41:51 +0000 (12:41 +0200)
This is how we should have fixed #1239.

Fixes #12456

hugolib/hugo_sites_build.go
resources/resource_transformers/tocss/scss/scss_integration_test.go
resources/transform.go

index c96629cd6fdb98337a0c455e986953295e5f17af..6a9afee9994575a0404d73d263be6a2ffc2b3afe 100644 (file)
@@ -23,11 +23,9 @@ import (
        "path"
        "path/filepath"
        "strings"
-       "sync"
        "time"
 
        "github.com/bep/logg"
-       "github.com/gohugoio/hugo/cache/dynacache"
        "github.com/gohugoio/hugo/deps"
        "github.com/gohugoio/hugo/hugofs"
        "github.com/gohugoio/hugo/hugofs/files"
@@ -47,7 +45,6 @@ import (
        "github.com/gohugoio/hugo/resources/page"
        "github.com/gohugoio/hugo/resources/page/siteidentities"
        "github.com/gohugoio/hugo/resources/postpub"
-       "github.com/gohugoio/hugo/resources/resource"
 
        "github.com/spf13/afero"
 
@@ -764,48 +761,8 @@ func (h *HugoSites) processPartial(ctx context.Context, l logg.LevelLogger, conf
                                }
                        }
                case files.ComponentFolderAssets:
-                       p := pathInfo.Path()
-                       logger.Println("Asset changed", p)
-
-                       var matches []any
-                       var mu sync.Mutex
-
-                       h.MemCache.ClearMatching(
-                               func(k string, pm dynacache.PartitionManager) bool {
-                                       // Avoid going through everything.
-                                       return strings.HasPrefix(k, "/res")
-                               },
-                               func(k, v any) bool {
-                                       if strings.Contains(k.(string), p) {
-                                               mu.Lock()
-                                               defer mu.Unlock()
-                                               switch vv := v.(type) {
-                                               case resource.Resources:
-                                                       // GetMatch/Match.
-                                                       for _, r := range vv {
-                                                               matches = append(matches, r)
-                                                       }
-                                                       return true
-                                               default:
-                                                       matches = append(matches, vv)
-                                                       return true
-
-                                               }
-                                       }
-                                       return false
-                               })
-
-                       var hasID bool
-                       for _, r := range matches {
-                               identity.WalkIdentitiesShallow(r, func(level int, rid identity.Identity) bool {
-                                       hasID = true
-                                       changes = append(changes, rid)
-                                       return false
-                               })
-                       }
-                       if !hasID {
-                               changes = append(changes, pathInfo)
-                       }
+                       logger.Println("Asset changed", pathInfo.Path())
+                       changes = append(changes, pathInfo)
                case files.ComponentFolderData:
                        logger.Println("Data changed", pathInfo.Path())
 
index 02e2b920000d72b53ecd434dee0ac903841bee19..469463872028ec699cb8408b7fac9e9638d01225 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright 2021 The Hugo Authors. All rights reserved.
+// Copyright 2024 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.
@@ -328,6 +328,7 @@ Styles: {{ $r.RelPermalink }}
        b.AssertFileContent("public/index.html", "Styles: /scss/main.css")
 }
 
+// Issue #1239.
 func TestRebuildAssetGetMatch(t *testing.T) {
        t.Parallel()
        if !scss.Supports() {
@@ -358,3 +359,61 @@ T1: {{ $r.Content }}
 
        b.AssertFileContent("public/index.html", `color: blue`)
 }
+
+func TestRebuildAssetMatchIssue12456(t *testing.T) {
+       t.Parallel()
+       if !scss.Supports() {
+               t.Skip()
+       }
+
+       files := `
+-- hugo.toml --
+disableKinds = ["term", "taxonomy", "section", "page"]
+disableLiveReload = true
+-- assets/a.scss --
+h1 {
+       color: red;
+}
+-- assets/dir/b.scss --
+h2 {
+       color: blue;
+}
+-- assets/dir/c.scss --
+h3 {
+       color: green;
+}
+-- layouts/index.html --
+{{ $a := slice (resources.Get "a.scss") }}
+{{ $b := resources.Match "dir/*.scss" }}
+
+{{/* Add styles in a specific order. */}}
+{{ $styles := slice $a $b }}
+
+{{ $stylesheets := slice }}
+  {{ range $styles }}
+  {{ $stylesheets = $stylesheets | collections.Append . }}
+{{ end }}
+
+
+{{ range $stylesheets }}
+  {{ with . | resources.ToCSS | fingerprint }}
+    <link as="style"  href="{{ .RelPermalink }}" rel="preload stylesheet">
+  {{ end }}
+{{ end }}
+       `
+
+       b := hugolib.NewIntegrationTestBuilder(
+               hugolib.IntegrationTestConfig{
+                       T:           t,
+                       TxtarString: files,
+                       NeedsOsFS:   true,
+                       Running:     true,
+                       // LogLevel:    logg.LevelTrace,
+               }).Build()
+
+       b.AssertFileContent("public/index.html", `b.60a9f3bdc189ee8a857afd5b7e1b93ad1644de0873761a7c9bc84f781a821942.css`)
+
+       b.EditFiles("assets/dir/b.scss", `h2 { color: orange; }`).Build()
+
+       b.AssertFileContent("public/index.html", `b.46b2d77c7ffe37ee191678f72df991ecb1319f849957151654362f09b0ef467f.css`)
+}
index b498924f584c3c82cf4d17d0fc245cc92f534bdd..9adec38cca918e9fe0be667a87b570eab91053d3 100644 (file)
@@ -49,6 +49,7 @@ var (
        _ resource.ReadSeekCloserResource    = (*resourceAdapter)(nil)
        _ resource.Resource                  = (*resourceAdapter)(nil)
        _ resource.Staler                    = (*resourceAdapterInner)(nil)
+       _ identity.IdentityGroupProvider     = (*resourceAdapterInner)(nil)
        _ resource.Source                    = (*resourceAdapter)(nil)
        _ resource.Identifier                = (*resourceAdapter)(nil)
        _ resource.ResourceNameTitleProvider = (*resourceAdapter)(nil)
@@ -657,6 +658,10 @@ type resourceAdapterInner struct {
        *publishOnce
 }
 
+func (r *resourceAdapterInner) GetIdentityGroup() identity.Identity {
+       return r.target.GetIdentityGroup()
+}
+
 func (r *resourceAdapterInner) StaleVersion() uint32 {
        // Both of these are incremented on change.
        return r.Staler.StaleVersion() + r.target.StaleVersion()