]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix branch resource overlapping bundle path
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 9 Jan 2025 05:01:58 +0000 (06:01 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 9 Jan 2025 07:00:30 +0000 (08:00 +0100)
Fixes #13228

hugolib/content_map_page.go
hugolib/content_map_test.go

index b369dfe13fddbbda752d02551822984421f91b65..b48504203d75846f9471967c86478f066503321a 100644 (file)
@@ -509,8 +509,23 @@ func (m *pageMap) forEachResourceInPage(
                        // A page key points to the logical path of a page, which when sourced from the filesystem
                        // may represent a directory (bundles) or a single content file (e.g. p1.md).
                        // So, to avoid any overlapping ambiguity, we start looking from the owning directory.
-                       ownerKey, _ := m.treePages.LongestPrefixAll(path.Dir(resourceKey))
-                       if ownerKey != keyPage {
+                       s := resourceKey
+
+                       for {
+                               s = path.Dir(s)
+                               ownerKey, found := m.treePages.LongestPrefixAll(s)
+                               if !found {
+                                       return true, nil
+                               }
+                               if ownerKey == keyPage {
+                                       break
+                               }
+
+                               if s != ownerKey && strings.HasPrefix(s, ownerKey) {
+                                       // Keep looking
+                                       continue
+                               }
+
                                // Stop walking downwards, someone else owns this resource.
                                rw.SkipPrefix(ownerKey + "/")
                                return false, nil
index a9f719f4a835b63eaebb73530eef798a46b8571f..6a12458462fb4c69d7f9611b53d52744b5a4ea29 100644 (file)
@@ -361,6 +361,35 @@ p1-foo.txt
        b.AssertFileExists("public/s1/p1/index.html", true)
 }
 
+// Issue 13228.
+func TestBranchResourceOverlap(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+disableKinds = ['page','rss','section','sitemap','taxonomy','term']
+-- content/_index.md --
+---
+title: home
+---
+-- content/s1/_index.md --
+---
+title: s1
+---
+-- content/s1x/a.txt --
+a.txt
+-- layouts/index.html --
+Home.
+{{ range .Resources.Match "**" }}
+  {{ .Name }}|
+{{ end }}
+`
+
+       b := Test(t, files)
+
+       b.AssertFileContent("public/index.html", "s1x/a.txt|")
+}
+
 func TestSitemapOverrideFilename(t *testing.T) {
        t.Parallel()