]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tpl: Fix overlapping layout sections
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 30 Apr 2025 17:49:42 +0000 (19:49 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 30 Apr 2025 19:04:03 +0000 (21:04 +0200)
Fixes #13672

tpl/tplimpl/templatestore.go
tpl/tplimpl/templatestore_integration_test.go

index e6cd49c6684cda1360c95805b407bc91e8a7b49d..4adf76b293555ea3200e1002cb0037a583a5321c 100644 (file)
@@ -323,6 +323,9 @@ func (ti *TemplInfo) findBestMatchBaseof(s *TemplateStore, d1 TemplateDescriptor
        }
 
        ti.baseVariants.WalkPath(k1, func(k2 string, v map[TemplateDescriptor]*TemplWithBaseApplied) (bool, error) {
+               if !s.inPath(k1, k2) {
+                       return false, nil
+               }
                slashCountK2 := strings.Count(k2, "/")
                distance := slashCountK1 - slashCountK2
 
@@ -615,6 +618,9 @@ func (s *TemplateStore) LookupShortcode(q TemplateQuery) *TemplInfo {
        defer s.putBest(best)
 
        s.treeShortcodes.WalkPath(k1, func(k2 string, m map[string]map[TemplateDescriptor]*TemplInfo) (bool, error) {
+               if !s.inPath(k1, k2) {
+                       return false, nil
+               }
                slashCountK2 := strings.Count(k2, "/")
                distance := slashCountK1 - slashCountK2
 
@@ -780,8 +786,18 @@ func (s *TemplateStore) findBestMatchGet(key string, category Category, consider
        }
 }
 
+func (s *TemplateStore) inPath(k1, k2 string) bool {
+       if k1 != k2 && !strings.HasPrefix(k1, k2+"/") {
+               return false
+       }
+       return true
+}
+
 func (s *TemplateStore) findBestMatchWalkPath(q TemplateQuery, k1 string, slashCountK1 int, best *bestMatch) {
        s.treeMain.WalkPath(k1, func(k2 string, v map[nodeKey]*TemplInfo) (bool, error) {
+               if !s.inPath(k1, k2) {
+                       return false, nil
+               }
                slashCountK2 := strings.Count(k2, "/")
                distance := slashCountK1 - slashCountK2
 
index 638341581d9bc473611c74cc5eea5e8ec43fd9c1..8d3e5246823afacaad04bef0099418a3bfd8ed04 100644 (file)
@@ -1396,3 +1396,19 @@ layouts/taxononmy.html.html
                b.AssertFileExists("public/p1/index.html", false)
        }
 }
+
+func TestTemplateLoopBlogVsBlogrollIssue13672(t *testing.T) {
+       t.Parallel()
+       files := `
+-- hugo.toml --
+-- layouts/blog/all.html --
+blog/all.html
+-- layouts/blogroll/all.html --
+blogroll/all.html
+-- content/blogroll/p1.md --
+`
+
+       b := hugolib.Test(t, files)
+
+       b.AssertFileContent("public/blogroll/p1/index.html", "blogroll/all.html")
+}