@@ -12,9 +12,11 @@ import (
12
12
)
13
13
14
14
type CommandGroup struct {
15
- Groups []CommandGroup
16
- Commands []func (context.Context ) * exec.Cmd
17
- Parallel bool
15
+ Groups []CommandGroup
16
+ Commands []func (context.Context ) * exec.Cmd
17
+ PreExecCommand func (cmd * exec.Cmd )
18
+ PostExecCommmand func (cmd * exec.Cmd )
19
+ Parallel bool
18
20
}
19
21
20
22
type CmdExecutor struct {
@@ -71,7 +73,12 @@ func killPID(pid int, logger log.Logger) error {
71
73
return nil
72
74
}
73
75
74
- func (ex * CmdExecutor ) exec (newCmd func (context.Context ) * exec.Cmd ) error {
76
+ type execArgs struct {
77
+ PreExec func (cmd * exec.Cmd )
78
+ PostExec func (cmd * exec.Cmd )
79
+ }
80
+
81
+ func (ex * CmdExecutor ) exec (newCmd func (context.Context ) * exec.Cmd , args execArgs ) error {
75
82
if err := ex .parentCtx .Err (); err != nil {
76
83
return err
77
84
}
@@ -90,6 +97,10 @@ func (ex *CmdExecutor) exec(newCmd func(context.Context) *exec.Cmd) error {
90
97
cmd .SysProcAttr .Foreground = true
91
98
}
92
99
100
+ if args .PreExec != nil {
101
+ args .PreExec (cmd )
102
+ }
103
+
93
104
if err := cmd .Start (); err != nil {
94
105
return err
95
106
}
@@ -157,6 +168,10 @@ func (ex *CmdExecutor) exec(newCmd func(context.Context) *exec.Cmd) error {
157
168
return err
158
169
}
159
170
171
+ if args .PostExec != nil {
172
+ args .PostExec (cmd )
173
+ }
174
+
160
175
logger .Debug ("command fully executed and processed" )
161
176
return nil
162
177
}
@@ -179,7 +194,10 @@ func (ex *CmdExecutor) execCommandGroup(cg CommandGroup) error {
179
194
mu : sync.Mutex {},
180
195
}
181
196
182
- if err := ce .exec (cmd ); err != nil {
197
+ if err := ce .exec (cmd , execArgs {
198
+ PreExec : cg .PreExecCommand ,
199
+ PostExec : cg .PostExecCommmand ,
200
+ }); err != nil {
183
201
ex .logger .Debug ("command failed, got" , "err" , err )
184
202
return
185
203
}
@@ -204,7 +222,10 @@ func (ex *CmdExecutor) execCommandGroup(cg CommandGroup) error {
204
222
205
223
for i := range cg .Commands {
206
224
cmd := cg .Commands [i ]
207
- if err := ex .exec (cmd ); err != nil {
225
+ if err := ex .exec (cmd , execArgs {
226
+ PreExec : cg .PreExecCommand ,
227
+ PostExec : cg .PostExecCommmand ,
228
+ }); err != nil {
208
229
return err
209
230
}
210
231
}
0 commit comments