]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Fix it so the owning taxonomy gets rerendered in server when new tags are added
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Sun, 27 Apr 2025 16:58:25 +0000 (18:58 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Mon, 28 Apr 2025 19:42:16 +0000 (21:42 +0200)
Updates #13648

hugolib/content_map_page.go
hugolib/hugo_sites_build.go
hugolib/rebuild_test.go

index c51b4a17ad39da8aab07712bec7552e64a959d53..be834fbb6d6200d97b3bfa2febed76b9e48a204f 100644 (file)
@@ -1330,6 +1330,7 @@ func (h *HugoSites) resolveAndResetDependententPageOutputs(ctx context.Context,
                                // This needs no reset, so no need to check it.
                                return nil
                        }
+
                        // First check the top level dependency manager.
                        for _, id := range changes {
                                checkedCounter.Add(1)
@@ -1645,6 +1646,8 @@ func (sa *sitePagesAssembler) assembleTermsAndTranslations() error {
                views   = sa.pageMap.cfg.taxonomyConfig.views
        )
 
+       rebuild := sa.s.h.isRebuild()
+
        lockType := doctree.LockTypeWrite
        w := &doctree.NodeShiftTreeWalker[contentNodeI]{
                Tree:     pages,
@@ -1677,6 +1680,14 @@ func (sa *sitePagesAssembler) assembleTermsAndTranslations() error {
                                        pi := sa.Site.Conf.PathParser().Parse(files.ComponentFolderContent, viewTermKey+"/_index.md")
                                        term := pages.Get(pi.Base())
                                        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{
                                                        term:     v,
                                                        singular: viewName.singular,
index ce4ca370c2145505e91f4344b6a70c3a15c37aad..ce8ddd14365edcb541a1d4b2eec226173d0bf72a 100644 (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{}
        for _, s := range h.Sites {
                s.s.initRenderFormats()
index 9d95a4b7554a42cc74a6697633daebfe536ff930..f5c0befcc0d3cf21e63a230c73c93fea1309bc20 100644 (file)
@@ -1865,3 +1865,30 @@ p1-content|
        b.EditFileReplaceAll("content/p1/index.md", "p1-content", "p1-content-foo").Build()
        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|")
+}