URI: 
       Fix one more resource change eviction logic issue - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit bb59a7ed979db459275e5fac96f80a51ff3b5674
   DIR parent 503d20954f10507b9b43c6ee1c38001e53cf0b14
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Sun,  5 May 2024 10:44:35 +0200
       
       Fix one more resource change eviction logic issue
       
       This is how we should have fixed #1239.
       
       Fixes #12456
       
       Diffstat:
         M hugolib/hugo_sites_build.go         |      47 ++-----------------------------
         M resources/resource_transformers/to… |      61 ++++++++++++++++++++++++++++++-
         M resources/transform.go              |       5 +++++
       
       3 files changed, 67 insertions(+), 46 deletions(-)
       ---
   DIR diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go
       @@ -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())
        
   DIR diff --git a/resources/resource_transformers/tocss/scss/scss_integration_test.go b/resources/resource_transformers/tocss/scss/scss_integration_test.go
       @@ -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`)
       +}
   DIR diff --git a/resources/transform.go b/resources/transform.go
       @@ -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()