From 621194a3197d27e3b5909bca9b3efa6ae70da86c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Tue, 20 Feb 2024 14:46:03 +0100 Subject: [PATCH] Fix dart sass import regression Fixes #12072 --- commands/server.go | 2 +- hugolib/filesystems/basefs.go | 10 +++++----- hugolib/filesystems/basefs_test.go | 6 +++--- hugolib/pagecollections.go | 2 +- resources/resource_transformers/js/options.go | 2 +- .../resource_transformers/tocss/dartsass/transform.go | 3 ++- resources/resource_transformers/tocss/scss/tocss.go | 2 +- 7 files changed, 14 insertions(+), 13 deletions(-) diff --git a/commands/server.go b/commands/server.go index 78155521f..d08bc5277 100644 --- a/commands/server.go +++ b/commands/server.go @@ -1087,7 +1087,7 @@ func (s *staticSyncer) syncsStaticEvents(staticEvents []fsnotify.Event) error { fromPath := ev.Name - relPath, found := sourceFs.MakePathRelative(fromPath) + relPath, found := sourceFs.MakePathRelative(fromPath, true) if !found { // Not member of this virtual host. diff --git a/hugolib/filesystems/basefs.go b/hugolib/filesystems/basefs.go index b37fb8cb4..25c58d516 100644 --- a/hugolib/filesystems/basefs.go +++ b/hugolib/filesystems/basefs.go @@ -336,7 +336,7 @@ func (s *SourceFilesystems) ResolvePaths(filename string, checkExists bool) []hu // It will return an empty string if the filename is not a member of a static filesystem. func (s SourceFilesystems) MakeStaticPathRelative(filename string) string { for _, staticFs := range s.Static { - rel, _ := staticFs.MakePathRelative(filename) + rel, _ := staticFs.MakePathRelative(filename, true) if rel != "" { return rel } @@ -345,8 +345,8 @@ func (s SourceFilesystems) MakeStaticPathRelative(filename string) string { } // MakePathRelative creates a relative path from the given filename. -func (d *SourceFilesystem) MakePathRelative(filename string) (string, bool) { - cps, err := d.ReverseLookup(filename) +func (d *SourceFilesystem) MakePathRelative(filename string, checkExists bool) (string, bool) { + cps, err := d.ReverseLookup(filename, checkExists) if err != nil { panic(err) } @@ -358,11 +358,11 @@ func (d *SourceFilesystem) MakePathRelative(filename string) (string, bool) { } // ReverseLookup returns the component paths for the given filename. -func (d *SourceFilesystem) ReverseLookup(filename string) ([]hugofs.ComponentPath, error) { +func (d *SourceFilesystem) ReverseLookup(filename string, checkExists bool) ([]hugofs.ComponentPath, error) { 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, true); err == nil { + if c, err := rfs.ReverseLookup(filename, checkExists); err == nil { cps = append(cps, c...) } } diff --git a/hugolib/filesystems/basefs_test.go b/hugolib/filesystems/basefs_test.go index 5398055ed..ebbb378d3 100644 --- a/hugolib/filesystems/basefs_test.go +++ b/hugolib/filesystems/basefs_test.go @@ -380,11 +380,11 @@ Main. ` b := hugolib.Test(t, files) - rel, found := b.H.BaseFs.Assets.MakePathRelative(filepath.FromSlash("/themes/t1/src/main.js")) + rel, found := b.H.BaseFs.Assets.MakePathRelative(filepath.FromSlash("/themes/t1/src/main.js"), true) b.Assert(found, qt.Equals, true) b.Assert(rel, qt.Equals, filepath.FromSlash("foo/bar/main.js")) - rel, found = b.H.BaseFs.Assets.MakePathRelative(filepath.FromSlash("/bar.txt")) + rel, found = b.H.BaseFs.Assets.MakePathRelative(filepath.FromSlash("/bar.txt"), true) b.Assert(found, qt.Equals, true) b.Assert(rel, qt.Equals, filepath.FromSlash("foo/baz.txt")) } @@ -460,7 +460,7 @@ Home. b.AssertFileContent("public/index.html", "Home.") stat := func(path string) hugofs.FileMetaInfo { - ps, err := b.H.BaseFs.Content.ReverseLookup(filepath.FromSlash(path)) + ps, err := b.H.BaseFs.Content.ReverseLookup(filepath.FromSlash(path), true) b.Assert(err, qt.IsNil) b.Assert(ps, qt.HasLen, 1) first := ps[0] diff --git a/hugolib/pagecollections.go b/hugolib/pagecollections.go index 505b10bd7..58c646334 100644 --- a/hugolib/pagecollections.go +++ b/hugolib/pagecollections.go @@ -243,7 +243,7 @@ func (c *pageFinder) getContentNodeFromRefReverseLookup(ref string, fi hugofs.Fi realFilename := filepath.Join(dir, ref) - pcs, err := s.BaseFs.Content.ReverseLookup(realFilename) + pcs, err := s.BaseFs.Content.ReverseLookup(realFilename, true) if err != nil { return nil, err } diff --git a/resources/resource_transformers/js/options.go b/resources/resource_transformers/js/options.go index df32e7012..1c29ad67c 100644 --- a/resources/resource_transformers/js/options.go +++ b/resources/resource_transformers/js/options.go @@ -218,7 +218,7 @@ func createBuildPlugins(depsManager identity.Manager, c *Client, opts Options) ( isStdin := args.Importer == stdinImporter var relDir string if !isStdin { - rel, found := fs.MakePathRelative(args.Importer) + rel, found := fs.MakePathRelative(args.Importer, true) if !found { // Not in any of the /assets folders. // This is an import from a node_modules, let diff --git a/resources/resource_transformers/tocss/dartsass/transform.go b/resources/resource_transformers/tocss/dartsass/transform.go index 73eca6a53..a9600f380 100644 --- a/resources/resource_transformers/tocss/dartsass/transform.go +++ b/resources/resource_transformers/tocss/dartsass/transform.go @@ -138,12 +138,13 @@ func (t importResolver) CanonicalizeURL(url string) (string, error) { if url == sass.HugoVarsNamespace { return url, nil } + filePath, isURL := paths.UrlToFilename(url) var prevDir string var pathDir string if isURL { var found bool - prevDir, found = t.c.sfs.MakePathRelative(filepath.Dir(filePath)) + prevDir, found = t.c.sfs.MakePathRelative(filepath.Dir(filePath), false) if !found { // Not a member of this filesystem, let Dart Sass handle it. diff --git a/resources/resource_transformers/tocss/scss/tocss.go b/resources/resource_transformers/tocss/scss/tocss.go index a4c4e6d8e..a3f2a5289 100644 --- a/resources/resource_transformers/tocss/scss/tocss.go +++ b/resources/resource_transformers/tocss/scss/tocss.go @@ -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)) + prevDir, _ = t.c.sfs.MakePathRelative(filepath.Dir(prev), false) if prevDir == "" { // Not a member of this filesystem. Let LibSASS handle it.