]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Throw error if resources.PostProcess is used in a deferred template
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 17 Jul 2024 09:10:46 +0000 (11:10 +0200)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 17 Jul 2024 10:47:25 +0000 (12:47 +0200)
That just doesn't work.

See #12655

tpl/templates/defer_integration_test.go
tpl/tplimpl/template_ast_transformers.go

index 2c2bf0d80c10dedf8b7e0e7e9cb8d12f0e4e16ba..8b06e7722422e61aa8f371f0471a48899762023a 100644 (file)
@@ -200,3 +200,23 @@ func TestDeferFromContentAdapterShouldFail(t *testing.T) {
        b.Assert(err, qt.Not(qt.IsNil))
        b.Assert(err.Error(), qt.Contains, "error calling Defer: this method cannot be called before the site is fully initialized")
 }
+
+func TestDeferPostProcessShouldThrowAnError(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+-- assets/mytext.txt --
+ABCD.
+-- layouts/index.html --
+Home
+{{ with (templates.Defer (dict "key" "foo")) }}
+{{ $mytext := resources.Get "mytext.txt" | minify | resources.PostProcess }}
+{{ end }}
+
+`
+       b, err := hugolib.TestE(t, files)
+
+       b.Assert(err, qt.Not(qt.IsNil))
+       b.Assert(err.Error(), qt.Contains, "resources.PostProcess cannot be used in a deferred template")
+}
index ab6cf7b073815cfa0e5cfe04e0fd619190f4c3f6..57730f82e6d082771dd5b7d21062374ba00ef8be 100644 (file)
@@ -16,6 +16,7 @@ package tplimpl
 import (
        "errors"
        "fmt"
+       "strings"
 
        "github.com/gohugoio/hugo/helpers"
        htmltemplate "github.com/gohugoio/hugo/tpl/internal/go_templates/htmltemplate"
@@ -248,7 +249,12 @@ func (c *templateContext) handleDefer(withNode *parse.WithNode) {
        n := l.Nodes[0].(*parse.ActionNode)
 
        inner := withNode.List.CopyList()
-       innerHash := helpers.MD5String(inner.String())
+       s := inner.String()
+       if strings.Contains(s, "resources.PostProcess") {
+               c.err = errors.New("resources.PostProcess cannot be used in a deferred template")
+               return
+       }
+       innerHash := helpers.MD5String(s)
        deferredID := tpl.HugoDeferredTemplatePrefix + innerHash
 
        c.deferNodes[deferredID] = inner