// 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
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()