Skip to content

Commit

Permalink
Fix resource bundling for overlapping page.md vs page.txt
Browse files Browse the repository at this point in the history
Fixes #12320
  • Loading branch information
bep committed Apr 2, 2024
1 parent 6738a3e commit 983b8d5
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 2 deletions.
9 changes: 7 additions & 2 deletions hugolib/content_map_page.go
Expand Up @@ -489,12 +489,17 @@ func (m *pageMap) forEachResourceInPage(

rw.Handle = func(resourceKey string, n contentNodeI, match doctree.DimensionFlag) (bool, error) {
if isBranch {
ownerKey, _ := m.treePages.LongestPrefixAll(resourceKey)
if ownerKey != keyPage && path.Dir(ownerKey) != path.Dir(resourceKey) {
// A resourceKey always represents a filename with extension.
// 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 {
// Stop walking downwards, someone else owns this resource.
rw.SkipPrefix(ownerKey + "/")
return false, nil
}

}
return handle(resourceKey, n, match)
}
Expand Down
39 changes: 39 additions & 0 deletions hugolib/pagebundler_test.go
Expand Up @@ -919,3 +919,42 @@ GetMatch: {{ with .Resources.GetMatch "f1.*" }}{{ .Name }}: {{ .Content }}|{{ en

b.AssertFileContent("public/mybundle/index.html", "GetMatch: f1.en.txt: F1.|")
}

func TestBundleBranchIssue12320(t *testing.T) {
t.Parallel()

files := `
-- hugo.toml --
disableKinds = ['rss','sitemap','taxonomy','term']
defaultContentLanguage = 'en'
defaultContentLanguageInSubdir = true
[languages.en]
baseURL = "https://en.example.org/"
contentDir = "content/en"
[languages.fr]
baseURL = "https://fr.example.org/"
contentDir = "content/fr"
-- content/en/s1/p1.md --
---
title: p1
---
-- content/en/s1/p1.txt --
---
p1.txt
---
-- layouts/_default/single.html --
{{ .Title }}|
-- layouts/_default/list.html --
{{ .Title }}|
`

b := Test(t, files)

b.AssertFileExists("public/en/s1/index.html", true)
b.AssertFileExists("public/en/s1/p1/index.html", true)
b.AssertFileExists("public/en/s1/p1.txt", true)

b.AssertFileExists("public/fr/s1/index.html", false)
b.AssertFileExists("public/fr/s1/p1/index.html", false)
b.AssertFileExists("public/fr/s1/p1.txt", false) // failing test
}

0 comments on commit 983b8d5

Please sign in to comment.