hugolib: Emit ignorable warning when home page is a leaf bundle

Closes #13538
This commit is contained in:
Joe Mooring
2025-06-06 13:21:41 -07:00
committed by Bjørn Erik Pedersen
parent 8e61f1fe12
commit 01241d5dc9
4 changed files with 45 additions and 3 deletions

View File

@@ -21,6 +21,7 @@ import (
"github.com/gohugoio/hugo/hugofs/files"
"github.com/gohugoio/hugo/resources"
"github.com/gohugoio/hugo/common/constants"
"github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/common/paths"
@@ -39,6 +40,14 @@ func (h *HugoSites) newPage(m *pageMeta) (*pageState, *paths.Path, error) {
// Make sure that any partially created page part is marked as stale.
m.MarkStale()
}
if p != nil && pth != nil && p.IsHome() && pth.IsLeafBundle() {
msg := "Using %s in your content's root directory is usually incorrect for your home page. "
msg += "You should use %s instead. If you don't rename this file, your home page will be "
msg += "treated as a leaf bundle, meaning it won't be able to have any child pages or sections."
h.Log.Warnidf(constants.WarnHomePageIsLeafBundle, msg, pth.PathNoLeadingSlash(), strings.ReplaceAll(pth.PathNoLeadingSlash(), "index", "_index"))
}
return p, pth, err
}

View File

@@ -1968,3 +1968,35 @@ Title: {{ .Title }}
"deprecated: path in front matter was deprecated",
)
}
// Issue 13538
func TestHomePageIsLeafBundle(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
defaultContentLanguage = 'de'
defaultContentLanguageInSubdir = true
[languages.de]
weight = 1
[languages.en]
weight = 2
-- layouts/all.html --
{{ .Title }}
-- content/index.de.md --
---
title: home de
---
-- content/index.en.org --
---
title: home en
---
`
b := Test(t, files, TestOptWarn())
b.AssertFileContent("public/de/index.html", "home de")
b.AssertFileContent("public/en/index.html", "home en")
b.AssertLogContains("Using index.de.md in your content's root directory is usually incorrect for your home page. You should use _index.de.md instead.")
b.AssertLogContains("Using index.en.org in your content's root directory is usually incorrect for your home page. You should use _index.en.org instead.")
}