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:
@@ -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())
|
||||||
|
@@ -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
38
taskfile/defer.go
Normal 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
|
||||||
|
}
|
@@ -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,
|
||||||
|
4
testdata/deferred/Taskfile.yml
vendored
4
testdata/deferred/Taskfile.yml
vendored
@@ -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'
|
||||||
|
Reference in New Issue
Block a user