mirror of
https://github.com/gohugoio/hugo.git
synced 2025-08-09 19:47:02 +02:00
tpl: Fix theme overrides when theme has old layout setup (e.g. _default)
Fixes #13715
This commit is contained in:
@@ -1133,14 +1133,23 @@ func (s *TemplateStore) insertTemplate2(
|
||||
tree.Insert(key, m)
|
||||
}
|
||||
|
||||
if !replace {
|
||||
if v, found := m[nk]; found {
|
||||
if len(pi.Identifiers()) >= len(v.PathInfo.Identifiers()) {
|
||||
nkExisting, existingFound := m[nk]
|
||||
if !replace && existingFound && fi != nil && nkExisting.Fi != nil {
|
||||
// See issue #13715.
|
||||
// We do the merge on the file system level, but from Hugo v0.146.0 we have a situation where
|
||||
// the project may well have a different layouts layout compared to the theme(s) it uses.
|
||||
// We could possibly have fixed that on a lower (file system) level, but since this is just
|
||||
// a temporary situation (until all projects are updated),
|
||||
// do a replace here if the file comes from higher up in the module chain.
|
||||
replace = fi.Meta().ModuleOrdinal < nkExisting.Fi.Meta().ModuleOrdinal
|
||||
}
|
||||
|
||||
if !replace && existingFound {
|
||||
if len(pi.Identifiers()) >= len(nkExisting.PathInfo.Identifiers()) {
|
||||
// e.g. /pages/home.foo.html and /pages/home.html where foo may be a valid language name in another site.
|
||||
return nil, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ti := &TemplInfo{
|
||||
PathInfo: pi,
|
||||
|
@@ -1103,6 +1103,23 @@ All.
|
||||
b.AssertLogContains("unrecognized render hook")
|
||||
}
|
||||
|
||||
func TestLayoutOverrideThemeWhenThemeOnOldFormatIssue13715(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
files := `
|
||||
-- hugo.toml --
|
||||
theme = "mytheme"
|
||||
-- layouts/list.html --
|
||||
layouts/list.html
|
||||
-- themes/mytheme/layouts/_default/list.html --
|
||||
mytheme/layouts/_default/list.html
|
||||
|
||||
`
|
||||
|
||||
b := hugolib.Test(t, files)
|
||||
b.AssertFileContent("public/index.html", "layouts/list.html")
|
||||
}
|
||||
|
||||
func BenchmarkExecuteWithContext(b *testing.B) {
|
||||
files := `
|
||||
-- hugo.toml --
|
||||
|
Reference in New Issue
Block a user