mirror of
https://github.com/go-task/task.git
synced 2025-06-15 00:15:10 +02:00
14
task.go
14
task.go
@ -116,10 +116,24 @@ func (e *Executor) RunTask(ctx context.Context, call Call) error {
|
|||||||
return &MaximumTaskCallExceededError{task: call.Task}
|
return &MaximumTaskCallExceededError{task: call.Task}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
call.Vars, err = e.getVariables(call)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if err := e.runDeps(ctx, call); err != nil {
|
if err := e.runDeps(ctx, call); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// FIXME: doing again, since a var may have been overriden
|
||||||
|
// using the `set:` attribute of a dependecy.
|
||||||
|
// Remove this when `set` (that is deprecated) be removed
|
||||||
|
call.Vars, err = e.getVariables(call)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
if !e.Force {
|
if !e.Force {
|
||||||
upToDate, err := e.isTaskUpToDate(ctx, call)
|
upToDate, err := e.isTaskUpToDate(ctx, call)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
30
variables.go
30
variables.go
@ -21,7 +21,9 @@ var (
|
|||||||
ErrMultilineResultCmd = errors.New("Got multiline result from command")
|
ErrMultilineResultCmd = errors.New("Got multiline result from command")
|
||||||
)
|
)
|
||||||
|
|
||||||
var templateFuncs template.FuncMap
|
var (
|
||||||
|
templateFuncs template.FuncMap
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
taskFuncs := template.FuncMap{
|
taskFuncs := template.FuncMap{
|
||||||
@ -51,18 +53,13 @@ func init() {
|
|||||||
|
|
||||||
// ReplaceVariables writes vars into initial string
|
// ReplaceVariables writes vars into initial string
|
||||||
func (e *Executor) ReplaceVariables(initial string, call Call) (string, error) {
|
func (e *Executor) ReplaceVariables(initial string, call Call) (string, error) {
|
||||||
vars, err := e.getVariables(call)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
templ, err := template.New("").Funcs(templateFuncs).Parse(initial)
|
templ, err := template.New("").Funcs(templateFuncs).Parse(initial)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
var b bytes.Buffer
|
var b bytes.Buffer
|
||||||
if err = templ.Execute(&b, vars); err != nil {
|
if err = templ.Execute(&b, call.Vars); err != nil {
|
||||||
return "", err
|
return "", err
|
||||||
}
|
}
|
||||||
return b.String(), nil
|
return b.String(), nil
|
||||||
@ -85,27 +82,36 @@ func (e *Executor) getVariables(call Call) (Vars, error) {
|
|||||||
t := e.Tasks[call.Task]
|
t := e.Tasks[call.Task]
|
||||||
|
|
||||||
result := make(Vars, len(t.Vars)+len(e.taskvars)+len(call.Vars))
|
result := make(Vars, len(t.Vars)+len(e.taskvars)+len(call.Vars))
|
||||||
merge := func(vars Vars) error {
|
merge := func(vars Vars, runTemplate bool) error {
|
||||||
for k, v := range vars {
|
for k, v := range vars {
|
||||||
|
if runTemplate {
|
||||||
|
var err error
|
||||||
|
v, err = e.ReplaceVariables(v, call)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
v, err := e.handleDynamicVariableContent(v)
|
v, err := e.handleDynamicVariableContent(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
result[k] = v
|
result[k] = v
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := merge(e.taskvars); err != nil {
|
if err := merge(e.taskvars, false); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := merge(t.Vars); err != nil {
|
if err := merge(t.Vars, true); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := merge(getEnvironmentVariables()); err != nil {
|
if err := merge(getEnvironmentVariables(), false); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if err := merge(call.Vars); err != nil {
|
if err := merge(call.Vars, false); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user