diff options
author | Bjørn Erik Pedersen <[email protected]> | 2024-02-20 17:31:26 +0100 |
---|---|---|
committer | Bjørn Erik Pedersen <[email protected]> | 2024-02-20 18:42:14 +0100 |
commit | eceeb19751e78ed76f43a68fb5ce5251837e1049 (patch) | |
tree | bf810a19f1915c411f0375f65640e1af13a39fb6 | |
parent | 621194a3197d27e3b5909bca9b3efa6ae70da86c (diff) | |
download | hugo-eceeb19751e78ed76f43a68fb5ce5251837e1049.tar.gz hugo-eceeb19751e78ed76f43a68fb5ce5251837e1049.zip |
Fix rebuilding of pages without default content language
Fixes #12082
-rw-r--r-- | hugolib/content_map_page.go | 67 | ||||
-rw-r--r-- | hugolib/rebuild_test.go | 37 |
2 files changed, 70 insertions, 34 deletions
diff --git a/hugolib/content_map_page.go b/hugolib/content_map_page.go index 9994fb04f..5f0b11210 100644 --- a/hugolib/content_map_page.go +++ b/hugolib/content_map_page.go @@ -130,49 +130,48 @@ type pageTrees struct { // so we mark all entries as stale (which will trigger cache invalidation), then // return the first. func (t *pageTrees) collectAndMarkStaleIdentities(p *paths.Path) []identity.Identity { - ids := t.collectAndMarkStaleIdentitiesFor(p.Base()) - - if p.Component() == files.ComponentFolderContent { - // It may also be a bundled content resource. - key := p.ForBundleType(paths.PathTypeContentResource).Base() - tree := t.treeResources - if n := tree.Get(key); n != nil { - n.ForEeachIdentity(func(id identity.Identity) bool { - ids = append(ids, id) - return false - }) - if n, ok := tree.GetRaw(key); ok { - n.MarkStale() - } - } - } - return ids -} - -func (t *pageTrees) collectAndMarkStaleIdentitiesFor(key string) []identity.Identity { + key := p.Base() var ids []identity.Identity - tree := t.treePages - if n := tree.Get(key); n != nil { - n.ForEeachIdentity(func(id identity.Identity) bool { - ids = append(ids, id) + // We need only one identity sample per dimensio. + nCount := 0 + cb := func(n contentNodeI) bool { + if n == nil { return false - }) - if n, ok := tree.GetRaw(key); ok { - n.MarkStale() } - } - - tree = t.treeResources - if n := tree.Get(key); n != nil { + n.MarkStale() + if nCount > 0 { + return true + } + nCount++ n.ForEeachIdentity(func(id identity.Identity) bool { ids = append(ids, id) return false }) - if n, ok := tree.GetRaw(key); ok { - n.MarkStale() - } + + return false } + tree := t.treePages + nCount = 0 + tree.ForEeachInDimension(key, doctree.DimensionLanguage.Index(), + cb, + ) + tree = t.treeResources + nCount = 0 + tree.ForEeachInDimension(key, doctree.DimensionLanguage.Index(), + cb, + ) + + if p.Component() == files.ComponentFolderContent { + // It may also be a bundled content resource. + key := p.ForBundleType(paths.PathTypeContentResource).Base() + tree = t.treeResources + nCount = 0 + tree.ForEeachInDimension(key, doctree.DimensionLanguage.Index(), + cb, + ) + + } return ids } diff --git a/hugolib/rebuild_test.go b/hugolib/rebuild_test.go index cf98f55da..54d6888c0 100644 --- a/hugolib/rebuild_test.go +++ b/hugolib/rebuild_test.go @@ -1268,6 +1268,43 @@ Single: {{ .Title }}|{{ .Content }}|Bundled File: {{ with .Resources.GetMatch "f b.AssertFileContent("public/nn/p1/index.html", "B nn edit.") } +func TestRebuildEditContentNonDefaultLanguageDifferentBundles(t *testing.T) { + t.Parallel() + + files := ` +-- hugo.toml -- +baseURL = "https://example.com" +disableLiveReload = true +defaultContentLanguage = "en" +defaultContentLanguageInSubdir = true +[languages] +[languages.en] +weight = 1 +contentDir = "content/en" +[languages.nn] +weight = 2 +contentDir = "content/nn" +-- content/en/p1en/index.md -- +--- +title: "P1 en" +--- +-- content/nn/p1nn/index.md -- +--- +title: "P1 nn" +--- +P1 nn. +-- layouts/_default/single.html -- +Single: {{ .Title }}|{{ .Content }}| +` + + b := TestRunning(t, files) + + b.AssertFileContent("public/nn/p1nn/index.html", "Single: P1 nn|<p>P1 nn.</p>") + b.EditFileReplaceAll("content/nn/p1nn/index.md", "P1 nn.", "P1 nn edit.").Build() + b.AssertFileContent("public/nn/p1nn/index.html", "Single: P1 nn|<p>P1 nn edit.</p>\n|") + b.AssertFileContent("public/nn/p1nn/index.html", "P1 nn edit.") +} + func TestRebuildVariationsAssetsSassImport(t *testing.T) { if !htesting.IsCI() { t.Skip("skip CI only") |