]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
templates: Fix handling of multiple defers in the same template
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 9 Jan 2025 03:09:25 +0000 (04:09 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Thu, 9 Jan 2025 06:59:25 +0000 (07:59 +0100)
Fixes #13236

hugolib/hugo_sites_build.go
tpl/templates/defer_integration_test.go

index 60fb8ecc02f9c610de839a8a2917c5203d853e06..1518e2db848eeb9e26c83b63ba5e943dceb76986 100644 (file)
@@ -508,6 +508,7 @@ func (s *Site) executeDeferredTemplates(de *deps.DeferredExecutions) error {
                                }
 
                                content = append(content[:low], append([]byte(deferred.Result), content[high:]...)...)
+                               forward = len(deferred.Result)
                                changed = true
 
                                return nil
index 8b06e7722422e61aa8f371f0471a48899762023a..77be91cee84b8049c83bfd828e10844e7dd3efd5 100644 (file)
@@ -220,3 +220,30 @@ Home
        b.Assert(err, qt.Not(qt.IsNil))
        b.Assert(err.Error(), qt.Contains, "resources.PostProcess cannot be used in a deferred template")
 }
+
+// Issue #13236.
+func TestDeferMultipleInSameTemplate(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+-- layouts/index.html --
+Home.
+...
+{{ with (templates.Defer (dict "data" (dict "a" "b") )) }}
+ Defer 1
+{{ end }}
+...
+{{ with (templates.Defer (dict "data" (dict "a" "c") )) }}
+Defer 2
+{{ end }}
+{{ with (templates.Defer (dict "data" (dict "a" "d") )) }}
+Defer 3
+{{ end }}{{ with (templates.Defer (dict "data" (dict "a" "d") )) }}{{ end }}
+End.
+`
+
+       b := hugolib.Test(t, files)
+
+       b.AssertFileContent("public/index.html", "Home.", "Defer 1", "Defer 2", "Defer 3", "End.")
+}