Fix it so the owning taxonomy gets rerendered in server when new tags are added
Some checks failed
Test / test (1.23.x, ubuntu-latest) (push) Has been cancelled
Test / test (1.23.x, windows-latest) (push) Has been cancelled
Test / test (1.24.x, ubuntu-latest) (push) Has been cancelled
Test / test (1.24.x, windows-latest) (push) Has been cancelled

Updates #13648
This commit is contained in:
Bjørn Erik Pedersen 2025-04-27 18:58:25 +02:00
parent 673a4d00eb
commit a1cb15e1cf
3 changed files with 46 additions and 0 deletions

View file

@ -1330,6 +1330,7 @@ func (h *HugoSites) resolveAndResetDependententPageOutputs(ctx context.Context,
// This needs no reset, so no need to check it. // This needs no reset, so no need to check it.
return nil return nil
} }
// First check the top level dependency manager. // First check the top level dependency manager.
for _, id := range changes { for _, id := range changes {
checkedCounter.Add(1) checkedCounter.Add(1)
@ -1645,6 +1646,8 @@ func (sa *sitePagesAssembler) assembleTermsAndTranslations() error {
views = sa.pageMap.cfg.taxonomyConfig.views views = sa.pageMap.cfg.taxonomyConfig.views
) )
rebuild := sa.s.h.isRebuild()
lockType := doctree.LockTypeWrite lockType := doctree.LockTypeWrite
w := &doctree.NodeShiftTreeWalker[contentNodeI]{ w := &doctree.NodeShiftTreeWalker[contentNodeI]{
Tree: pages, Tree: pages,
@ -1677,6 +1680,14 @@ func (sa *sitePagesAssembler) assembleTermsAndTranslations() error {
pi := sa.Site.Conf.PathParser().Parse(files.ComponentFolderContent, viewTermKey+"/_index.md") pi := sa.Site.Conf.PathParser().Parse(files.ComponentFolderContent, viewTermKey+"/_index.md")
term := pages.Get(pi.Base()) term := pages.Get(pi.Base())
if term == nil { if term == nil {
if rebuild {
// A new tag was added in server mode.
taxonomy := pages.Get(viewName.pluralTreeKey)
if taxonomy != nil {
sa.assembleChanges.Add(taxonomy.GetIdentity())
}
}
m := &pageMeta{ m := &pageMeta{
term: v, term: v,
singular: viewName.singular, singular: viewName.singular,

View file

@ -324,6 +324,14 @@ func (h *HugoSites) assemble(ctx context.Context, l logg.LevelLogger, bcfg *Buil
} }
} }
// Handle new terms from assemblePagesStep2.
changes = bcfg.WhatChanged.Drain()
if len(changes) > 0 {
if err := h.resolveAndClearStateForIdentities(ctx, l, nil, changes); err != nil {
return err
}
}
h.renderFormats = output.Formats{} h.renderFormats = output.Formats{}
for _, s := range h.Sites { for _, s := range h.Sites {
s.s.initRenderFormats() s.s.initRenderFormats()

View file

@ -1865,3 +1865,30 @@ p1-content|
b.EditFileReplaceAll("content/p1/index.md", "p1-content", "p1-content-foo").Build() b.EditFileReplaceAll("content/p1/index.md", "p1-content", "p1-content-foo").Build()
b.AssertFileContent("public/p1/index.html", "p1-content-foo") b.AssertFileContent("public/p1/index.html", "p1-content-foo")
} }
func TestRebuildEditTagIssue13648(t *testing.T) {
t.Parallel()
files := `
-- hugo.toml --
baseURL = "https://example.com"
disableLiveReload = true
-- layouts/all.html --
All. {{ range .Pages }}{{ .Title }}|{{ end }}
-- content/p1.md --
---
title: "P1"
tags: ["tag1"]
---
`
b := TestRunning(t, files)
b.AssertFileContent("public/tags/index.html", "All. Tag1|")
b.EditFileReplaceAll("content/p1.md", "tag1", "tag2").Build()
// Note that the below is still not correct, as this is effectively a rename, and
// Tag2 should be removed from the list.
// But that is a harder problem to tackle.
b.AssertFileContent("public/tags/index.html", "All. Tag1|Tag2|")
}