]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tocss: Fix the import resolving from absolute to relative assets paths
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 24 Feb 2024 10:51:16 +0000 (11:51 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sat, 24 Feb 2024 15:41:18 +0000 (16:41 +0100)
Fixes #12137

hugofs/rootmapping_fs.go
hugolib/filesystems/basefs.go
hugolib/filesystems/basefs_test.go
resources/resource_transformers/tocss/dartsass/transform.go
resources/resource_transformers/tocss/scss/tocss.go

index ce4243fbb0e229ecc3bc66ff3e6b23d8ccb16373..9a89914beb73eaba51a222487e1382609574cfa2 100644 (file)
@@ -338,12 +338,17 @@ func (c ComponentPath) ComponentPathJoined() string {
 
 type ReverseLookupProvder interface {
        ReverseLookup(filename string, checkExists bool) ([]ComponentPath, error)
+       ReverseLookupComponent(component, filename string, checkExists bool) ([]ComponentPath, error)
 }
 
 // func (fs *RootMappingFs) ReverseStat(filename string) ([]FileMetaInfo, error)
-func (fs *RootMappingFs) ReverseLookup(in string, checkExists bool) ([]ComponentPath, error) {
-       in = fs.cleanName(in)
-       key := filepathSeparator + in
+func (fs *RootMappingFs) ReverseLookup(filename string, checkExists bool) ([]ComponentPath, error) {
+       return fs.ReverseLookupComponent("", filename, checkExists)
+}
+
+func (fs *RootMappingFs) ReverseLookupComponent(component, filename string, checkExists bool) ([]ComponentPath, error) {
+       filename = fs.cleanName(filename)
+       key := filepathSeparator + filename
 
        s, roots := fs.getRootsReverse(key)
 
@@ -357,6 +362,9 @@ func (fs *RootMappingFs) ReverseLookup(in string, checkExists bool) ([]Component
        dir, name := filepath.Split(base)
 
        for _, first := range roots {
+               if component != "" && first.FromBase != component {
+                       continue
+               }
                if first.Meta.Rename != nil {
                        name = first.Meta.Rename(name, true)
                }
index 25c58d516b9e6b9b31a0efa18a4365913db31f41..5479e22662e63038df7830f8912b756fcf960cd8 100644 (file)
@@ -362,7 +362,7 @@ func (d *SourceFilesystem) ReverseLookup(filename string, checkExists bool) ([]h
        var cps []hugofs.ComponentPath
        hugofs.WalkFilesystems(d.Fs, func(fs afero.Fs) bool {
                if rfs, ok := fs.(hugofs.ReverseLookupProvder); ok {
-                       if c, err := rfs.ReverseLookup(filename, checkExists); err == nil {
+                       if c, err := rfs.ReverseLookupComponent(d.Name, filename, checkExists); err == nil {
                                cps = append(cps, c...)
                        }
                }
index f5b7b6170e5e501dffc34bd18fd43c8b49048a44..f50bdb09f023561dc5533251ffea81a05ea51b60 100644 (file)
@@ -478,6 +478,36 @@ Home.
        _ = stat("blog/b1.md")
 }
 
+func TestReverseLookupShouldOnlyConsiderFilesInCurrentComponent(t *testing.T) {
+       files := `
+-- hugo.toml --
+baseURL = "https://example.com/"
+[module]
+[[module.mounts]]
+source = "files/layouts"
+target = "layouts"
+[[module.mounts]]
+source = "files/layouts/assets"
+target = "assets"
+-- files/layouts/l1.txt --
+l1
+-- files/layouts/assets/l2.txt --
+l2
+`
+       b := hugolib.Test(t, files)
+
+       assetsFs := b.H.Assets
+
+       for _, checkExists := range []bool{false, true} {
+               cps, err := assetsFs.ReverseLookup(filepath.FromSlash("files/layouts/assets/l2.txt"), checkExists)
+               b.Assert(err, qt.IsNil)
+               b.Assert(cps, qt.HasLen, 1)
+               cps, err = assetsFs.ReverseLookup(filepath.FromSlash("files/layouts/l2.txt"), checkExists)
+               b.Assert(err, qt.IsNil)
+               b.Assert(cps, qt.HasLen, 0)
+       }
+}
+
 func TestStaticComposite(t *testing.T) {
        files := `
 -- hugo.toml --
index a9600f380ad404170c9020d52aea4ed54dde7423..17f16a6885118c2f02da2331aa0dc5097681ba5a 100644 (file)
@@ -144,7 +144,7 @@ func (t importResolver) CanonicalizeURL(url string) (string, error) {
        var pathDir string
        if isURL {
                var found bool
-               prevDir, found = t.c.sfs.MakePathRelative(filepath.Dir(filePath), false)
+               prevDir, found = t.c.sfs.MakePathRelative(filepath.Dir(filePath), true)
 
                if !found {
                        // Not a member of this filesystem, let Dart Sass handle it.
index a3f2a5289a7cdb97a32fb33f548121d2a3bae7f0..3a46e60169113351d20a1568c6d0ac154ee6a09e 100644 (file)
@@ -86,7 +86,7 @@ func (t *toCSSTransformation) Transform(ctx *resources.ResourceTransformationCtx
                if prev == "stdin" {
                        prevDir = baseDir
                } else {
-                       prevDir, _ = t.c.sfs.MakePathRelative(filepath.Dir(prev), false)
+                       prevDir, _ = t.c.sfs.MakePathRelative(filepath.Dir(prev), true)
 
                        if prevDir == "" {
                                // Not a member of this filesystem. Let LibSASS handle it.