Skip to content

Commit bfc2065

Browse files
committed
feat: updates cmd executor to have preExec and postExec functions
that will enable users of this library to log prior to their tasks being executed
1 parent 2903efd commit bfc2065

File tree

1 file changed

+27
-6
lines changed

1 file changed

+27
-6
lines changed

pkg/executor/cmd-executor.go

+27-6
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@ import (
1212
)
1313

1414
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
1820
}
1921

2022
type CmdExecutor struct {
@@ -71,7 +73,12 @@ func killPID(pid int, logger log.Logger) error {
7173
return nil
7274
}
7375

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 {
7582
if err := ex.parentCtx.Err(); err != nil {
7683
return err
7784
}
@@ -90,6 +97,10 @@ func (ex *CmdExecutor) exec(newCmd func(context.Context) *exec.Cmd) error {
9097
cmd.SysProcAttr.Foreground = true
9198
}
9299

100+
if args.PreExec != nil {
101+
args.PreExec(cmd)
102+
}
103+
93104
if err := cmd.Start(); err != nil {
94105
return err
95106
}
@@ -157,6 +168,10 @@ func (ex *CmdExecutor) exec(newCmd func(context.Context) *exec.Cmd) error {
157168
return err
158169
}
159170

171+
if args.PostExec != nil {
172+
args.PostExec(cmd)
173+
}
174+
160175
logger.Debug("command fully executed and processed")
161176
return nil
162177
}
@@ -179,7 +194,10 @@ func (ex *CmdExecutor) execCommandGroup(cg CommandGroup) error {
179194
mu: sync.Mutex{},
180195
}
181196

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 {
183201
ex.logger.Debug("command failed, got", "err", err)
184202
return
185203
}
@@ -204,7 +222,10 @@ func (ex *CmdExecutor) execCommandGroup(cg CommandGroup) error {
204222

205223
for i := range cg.Commands {
206224
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 {
208229
return err
209230
}
210231
}

0 commit comments

Comments
 (0)