1
0
mirror of https://github.com/go-task/task.git synced 2025-08-10 22:42:19 +02:00

Changes from PR Review:

- Remove ^task syntax from `defer`
- Support task call syntax in defer
This commit is contained in:
Jacob McCollum
2022-01-02 16:38:06 -05:00
parent 69e9effc88
commit 09c9d55695
5 changed files with 62 additions and 11 deletions

View File

@@ -1062,8 +1062,8 @@ task: [task-2] echo 'failing' && exit 2
failing failing
task: [task-2] echo 'echo ran' task: [task-2] echo 'echo ran'
echo ran echo ran
task: [task-1] echo 'task-1 ran' task: [task-1] echo 'task-1 ran successfully'
task-1 ran task-1 ran successfully
`) `)
assert.Error(t, e.Run(context.Background(), taskfile.Call{Task: "task-2"})) assert.Error(t, e.Run(context.Background(), taskfile.Call{Task: "task-2"}))
fmt.Println(buff.String()) fmt.Println(buff.String())

View File

@@ -39,11 +39,19 @@ func (c *Cmd) UnmarshalYAML(unmarshal func(interface{}) error) error {
} }
if err := unmarshal(&deferredCmd); err == nil && deferredCmd.Defer != "" { if err := unmarshal(&deferredCmd); err == nil && deferredCmd.Defer != "" {
c.Defer = true c.Defer = true
if strings.HasPrefix(deferredCmd.Defer, "^") { c.Cmd = deferredCmd.Defer
c.Task = strings.TrimPrefix(deferredCmd.Defer, "^") return nil
} else { }
c.Cmd = deferredCmd.Defer var deferredCall struct {
Defer struct {
Task string
Vars *Vars
} }
}
if err := unmarshal(&deferredCall); err == nil && deferredCall.Defer.Task != "" {
c.Defer = true
c.Task = deferredCall.Defer.Task
c.Vars = deferredCall.Defer.Vars
return nil return nil
} }
var taskCall struct { var taskCall struct {

38
taskfile/defer.go Normal file
View File

@@ -0,0 +1,38 @@
package taskfile
// Defer is the parameters to a defer operation.
// It can be exactly one of:
// - A string command
// - A task call
type Defer struct {
Cmd string
Call *Call
}
// isValid returns true when Defer describes a valid action.
// In order for a Defer to be valid, one of Cmd or Call.Task
// must be non-empty.
func (d *Defer) isValid() bool {
return d.Cmd != "" || (d.Call != nil && d.Call.Task != "")
}
// UnmarshalYAML implements yaml.Unmarshaler interface
func (d *Defer) UnmarshalYAML(unmarshal func(interface{}) error) error {
var cmd string
if err := unmarshal(&cmd); err == nil {
d.Cmd = cmd
return nil
}
var taskCall struct {
Task string
Vars *Vars
}
if err := unmarshal(&taskCall); err != nil {
return err
}
d.Call = &Call{
Task: taskCall.Task,
Vars: taskCall.Vars,
}
return nil
}

View File

@@ -19,7 +19,7 @@ vars:
PARAM1: VALUE1 PARAM1: VALUE1
PARAM2: VALUE2 PARAM2: VALUE2
` `
yamlDeferredTask = `defer: ^some_task` yamlDeferredCall = `defer: { task: some_task, vars: { PARAM1: "var" } }`
yamlDeferredCmd = `defer: echo 'test'` yamlDeferredCmd = `defer: echo 'test'`
) )
tests := []struct { tests := []struct {
@@ -49,9 +49,14 @@ vars:
&taskfile.Cmd{Cmd: "echo 'test'", Defer: true}, &taskfile.Cmd{Cmd: "echo 'test'", Defer: true},
}, },
{ {
yamlDeferredTask, yamlDeferredCall,
&taskfile.Cmd{}, &taskfile.Cmd{},
&taskfile.Cmd{Task: "some_task", Defer: true}, &taskfile.Cmd{Task: "some_task", Vars: &taskfile.Vars{
Keys: []string{"PARAM1"},
Mapping: map[string]taskfile.Var{
"PARAM1": taskfile.Var{Static: "var"},
},
}, Defer: true},
}, },
{ {
yamlDep, yamlDep,

View File

@@ -2,10 +2,10 @@ version: "3"
tasks: tasks:
task-1: task-1:
- echo 'task-1 ran' - echo 'task-1 ran {{.PARAM}}'
task-2: task-2:
- defer: "^task-1" - defer: { task: "task-1", vars: { PARAM: "successfully" } }
- defer: echo 'echo ran' - defer: echo 'echo ran'
- defer: echo 'failing' && exit 2 - defer: echo 'failing' && exit 2
- echo 'cmd ran' - echo 'cmd ran'