From 0052ad2309c49ede2c280a526b43c0a1328249a4 Mon Sep 17 00:00:00 2001 From: Timothy Rule <34501912+trulede@users.noreply.github.com> Date: Tue, 11 Nov 2025 19:50:01 +0100 Subject: [PATCH] fix: do not re-evaluate variables for `defer:` (#2418) --- task.go | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/task.go b/task.go index 8aa1ca4b..4162e4c5 100644 --- a/task.go +++ b/task.go @@ -210,7 +210,7 @@ func (e *Executor) RunTask(ctx context.Context, call *Call) error { for i := range t.Cmds { if t.Cmds[i].Defer { - defer e.runDeferred(t, call, i, &deferredExitCode) + defer e.runDeferred(t, call, i, t.Vars, &deferredExitCode) continue } @@ -277,17 +277,11 @@ func (e *Executor) runDeps(ctx context.Context, t *ast.Task) error { return g.Wait() } -func (e *Executor) runDeferred(t *ast.Task, call *Call, i int, deferredExitCode *uint8) { +func (e *Executor) runDeferred(t *ast.Task, call *Call, i int, vars *ast.Vars, deferredExitCode *uint8) { ctx, cancel := context.WithCancel(context.Background()) defer cancel() - origTask, err := e.GetTask(call) - if err != nil { - return - } - cmd := t.Cmds[i] - vars, _ := e.Compiler.GetVariables(origTask, call) cache := &templater.Cache{Vars: vars} extra := map[string]any{}