Skip to content

Commit

Permalink
Fix rebuilding of pages without default content language
Browse files Browse the repository at this point in the history
Fixes #12082
  • Loading branch information
bep committed Feb 20, 2024
1 parent 621194a commit eceeb19
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 34 deletions.
67 changes: 33 additions & 34 deletions hugolib/content_map_page.go
Expand Up @@ -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
}

Expand Down
37 changes: 37 additions & 0 deletions hugolib/rebuild_test.go
Expand Up @@ -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")
Expand Down

0 comments on commit eceeb19

Please sign in to comment.