From f521336c8147d00e9caa0b4ba4ab64bc43c69101 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Pedersen?= Date: Fri, 23 Feb 2024 09:37:05 +0100 Subject: [PATCH] hugolib: Fix a .Page.GetPage from bundle case Fixes #12120 --- hugolib/pagecollections.go | 9 ++------- hugolib/pagecollections_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/hugolib/pagecollections.go b/hugolib/pagecollections.go index 3783dadab..fe7c2f1e7 100644 --- a/hugolib/pagecollections.go +++ b/hugolib/pagecollections.go @@ -166,19 +166,14 @@ func (c *pageFinder) getContentNodeForRef(context page.Page, isReflink, hadExten // Given the above, for regular pages we use the containing folder. var baseDir string if pi := context.PathInfo(); pi != nil { - if pi.IsBranchBundle() || (hadExtension) { + if pi.IsBranchBundle() || (hadExtension && strings.HasPrefix(ref, "../")) { baseDir = pi.Dir() } else { baseDir = pi.ContainerDir() } } - rel := path.Join(baseDir, inRef) - - if !hadExtension && !paths.HasExt(rel) { - // See comment above. - rel += defaultContentExt - } + rel := path.Join(baseDir, ref) relPath := contentPathParser.Parse(files.ComponentFolderContent, rel) diff --git a/hugolib/pagecollections_test.go b/hugolib/pagecollections_test.go index eaa80a109..1cb1cbd70 100644 --- a/hugolib/pagecollections_test.go +++ b/hugolib/pagecollections_test.go @@ -386,6 +386,33 @@ Home. {{ with .Page.GetPage "p1.xyz" }}{{ else }}OK 1{{ end }} {{ with .Site.Get b.AssertFileContent("public/index.html", "Home. OK 1 OK 2") } +func TestGetPageIssue12120(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +disableKinds = ['home','rss','section','sitemap','taxonomy','term'] +-- content/s1/p1/index.md -- +--- +title: p1 +layout: p1 +--- +-- content/s1/p2.md -- +--- +title: p2 +layout: p2 +--- +-- layouts/_default/p1.html -- +{{ (.GetPage "p2.md").Title }}| +-- layouts/_default/p2.html -- +{{ (.GetPage "p1").Title }}| +` + + b := Test(t, files) + b.AssertFileContent("public/s1/p1/index.html", "p2") // failing test + b.AssertFileContent("public/s1/p2/index.html", "p1") +} + func TestGetPageBundleToRegular(t *testing.T) { files := ` -- hugo.toml --