Skip to content

Commit

Permalink
Fix .Page.Pages with similary named sections
Browse files Browse the repository at this point in the history
Fixes #12169
  • Loading branch information
bep committed Feb 28, 2024
1 parent a322282 commit 6a8b25e
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 19 deletions.
35 changes: 16 additions & 19 deletions hugolib/content_map_page.go
Expand Up @@ -348,31 +348,28 @@ func (m *pageMap) getPagesInSection(q pageMapQueryPagesInSection) page.Pages {
w := &doctree.NodeShiftTreeWalker[contentNodeI]{
Tree: m.treePages,
Prefix: prefix,
Handle: func(key string, n contentNodeI, match doctree.DimensionFlag) (bool, error) {
if q.Recursive {
if p, ok := n.(*pageState); ok && include(p) {
pas = append(pas, p)
}
return false, nil
}

// We store both leafs and branches in the same tree, so for non-recursive walks,
// we need to walk until the end, but can skip
// any not belonging to child branches.
if otherBranch != "" && strings.HasPrefix(key, otherBranch) {
return false, nil
}
}

w.Handle = func(key string, n contentNodeI, match doctree.DimensionFlag) (bool, error) {
if q.Recursive {
if p, ok := n.(*pageState); ok && include(p) {
pas = append(pas, p)
}
return false, nil
}

if n.isContentNodeBranch() {
otherBranch = key + "/"
}
if p, ok := n.(*pageState); ok && include(p) {
pas = append(pas, p)
}

return false, nil
},
if n.isContentNodeBranch() {
currentBranch := key + "/"
if otherBranch == "" || otherBranch != currentBranch {
w.SkipPrefix(currentBranch)
}
otherBranch = currentBranch
}
return false, nil
}

err := w.Walk(context.Background())
Expand Down
30 changes: 30 additions & 0 deletions hugolib/pagecollections_test.go
Expand Up @@ -663,3 +663,33 @@ RegularPagesRecursive: {{ range .RegularPagesRecursive }}{{ .Kind }}:{{ .RelPerm

b.AssertFileContent("public/index.html", `RegularPagesRecursive: page:/p1/|page:/post/p2/||End.`)
}

// Issue #12169.
func TestPagesSimilarSectionNames(t *testing.T) {
files := `
-- hugo.toml --
-- content/draftsection/_index.md --
---
draft: true
---
-- content/draftsection/sub/_index.md --got
-- content/draftsection/sub/d1.md --
-- content/s1/_index.md --
-- content/s1/p1.md --
-- content/s1-foo/_index.md --
-- content/s1-foo/p2.md --
-- content/s1-foo/s2/_index.md --
-- content/s1-foo/s2/p3.md --
-- content/s1-foo/s2-foo/_index.md --
-- content/s1-foo/s2-foo/p4.md --
-- layouts/_default/list.html --
{{ .RelPermalink }}: Pages: {{ range .Pages }}{{ .RelPermalink }}|{{ end }}$
`
b := Test(t, files)

b.AssertFileContent("public/index.html", "/: Pages: /s1-foo/|/s1/|$")
b.AssertFileContent("public/s1/index.html", "/s1/: Pages: /s1/p1/|$")
b.AssertFileContent("public/s1-foo/index.html", "/s1-foo/: Pages: /s1-foo/p2/|/s1-foo/s2-foo/|/s1-foo/s2/|$")
b.AssertFileContent("public/s1-foo/s2/index.html", "/s1-foo/s2/: Pages: /s1-foo/s2/p3/|$")
}

0 comments on commit 6a8b25e

Please sign in to comment.