]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
tpl: Fix theme overrides when theme has old layout setup (e.g. _default)
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Fri, 16 May 2025 07:26:17 +0000 (09:26 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 18 May 2025 10:48:24 +0000 (12:48 +0200)
Fixes #13715

tpl/tplimpl/templatestore.go
tpl/tplimpl/templatestore_integration_test.go

index 53880eb330fa622d03ee4e8bf098ed92c4d99426..c6a6d4cd58fd092fff0ee111dc22f06c581d8618 100644 (file)
@@ -1133,12 +1133,21 @@ func (s *TemplateStore) insertTemplate2(
                tree.Insert(key, m)
        }
 
-       if !replace {
-               if v, found := m[nk]; found {
-                       if len(pi.Identifiers()) >= len(v.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
-                       }
+       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
                }
        }
 
index 75ec0376fe962c518bcf9d6475bc71569e29598b..e10d7149a9d7332a5de6e827846a1024ca7dc01a 100644 (file)
@@ -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 --