aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorBjørn Erik Pedersen <[email protected]>2024-02-20 17:31:26 +0100
committerBjørn Erik Pedersen <[email protected]>2024-02-20 18:42:14 +0100
commiteceeb19751e78ed76f43a68fb5ce5251837e1049 (patch)
treebf810a19f1915c411f0375f65640e1af13a39fb6
parent621194a3197d27e3b5909bca9b3efa6ae70da86c (diff)
downloadhugo-eceeb19751e78ed76f43a68fb5ce5251837e1049.tar.gz
hugo-eceeb19751e78ed76f43a68fb5ce5251837e1049.zip
Fix rebuilding of pages without default content language
Fixes #12082
-rw-r--r--hugolib/content_map_page.go67
-rw-r--r--hugolib/rebuild_test.go37
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")