Skip to content

Commit 5268df6

Browse files
committed
only get variable map twice and implement vars template
ref #40
1 parent 82e1c0f commit 5268df6

File tree

2 files changed

+32
-12
lines changed

2 files changed

+32
-12
lines changed

task.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,24 @@ func (e *Executor) RunTask(ctx context.Context, call Call) error {
116116
return &MaximumTaskCallExceededError{task: call.Task}
117117
}
118118

119+
var err error
120+
call.Vars, err = e.getVariables(call)
121+
if err != nil {
122+
return err
123+
}
124+
119125
if err := e.runDeps(ctx, call); err != nil {
120126
return err
121127
}
122128

129+
// FIXME: doing again, since a var may have been overriden
130+
// using the `set:` attribute of a dependecy.
131+
// Remove this when `set` (that is deprecated) be removed
132+
call.Vars, err = e.getVariables(call)
133+
if err != nil {
134+
return err
135+
}
136+
123137
if !e.Force {
124138
upToDate, err := e.isTaskUpToDate(ctx, call)
125139
if err != nil {

variables.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,9 @@ var (
2121
ErrMultilineResultCmd = errors.New("Got multiline result from command")
2222
)
2323

24-
var templateFuncs template.FuncMap
24+
var (
25+
templateFuncs template.FuncMap
26+
)
2527

2628
func init() {
2729
taskFuncs := template.FuncMap{
@@ -51,18 +53,13 @@ func init() {
5153

5254
// ReplaceVariables writes vars into initial string
5355
func (e *Executor) ReplaceVariables(initial string, call Call) (string, error) {
54-
vars, err := e.getVariables(call)
55-
if err != nil {
56-
return "", err
57-
}
58-
5956
templ, err := template.New("").Funcs(templateFuncs).Parse(initial)
6057
if err != nil {
6158
return "", err
6259
}
6360

6461
var b bytes.Buffer
65-
if err = templ.Execute(&b, vars); err != nil {
62+
if err = templ.Execute(&b, call.Vars); err != nil {
6663
return "", err
6764
}
6865
return b.String(), nil
@@ -85,27 +82,36 @@ func (e *Executor) getVariables(call Call) (Vars, error) {
8582
t := e.Tasks[call.Task]
8683

8784
result := make(Vars, len(t.Vars)+len(e.taskvars)+len(call.Vars))
88-
merge := func(vars Vars) error {
85+
merge := func(vars Vars, runTemplate bool) error {
8986
for k, v := range vars {
87+
if runTemplate {
88+
var err error
89+
v, err = e.ReplaceVariables(v, call)
90+
if err != nil {
91+
return err
92+
}
93+
}
94+
9095
v, err := e.handleDynamicVariableContent(v)
9196
if err != nil {
9297
return err
9398
}
99+
94100
result[k] = v
95101
}
96102
return nil
97103
}
98104

99-
if err := merge(e.taskvars); err != nil {
105+
if err := merge(e.taskvars, false); err != nil {
100106
return nil, err
101107
}
102-
if err := merge(t.Vars); err != nil {
108+
if err := merge(t.Vars, true); err != nil {
103109
return nil, err
104110
}
105-
if err := merge(getEnvironmentVariables()); err != nil {
111+
if err := merge(getEnvironmentVariables(), false); err != nil {
106112
return nil, err
107113
}
108-
if err := merge(call.Vars); err != nil {
114+
if err := merge(call.Vars, false); err != nil {
109115
return nil, err
110116
}
111117

0 commit comments

Comments
 (0)