-
Notifications
You must be signed in to change notification settings - Fork 36
/
cmd_runner_interface.go
66 lines (49 loc) · 1.63 KB
/
cmd_runner_interface.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package system
import (
"io"
"time"
)
type Command struct {
Name string
Args []string
Env map[string]string
UseIsolatedEnv bool
WorkingDir string
// On Linux when enabled inherits process group
KeepAttached bool
// Don't echo stdout/stderr
Quiet bool
Stdin io.Reader
// Full stdout and stderr will be captured to memory
// and returned in the Result unless custom Stdout/Stderr are specified.
Stdout io.Writer
Stderr io.Writer
}
type Process interface {
// Wait is the only way to get back process result information.
// It must not be called multiple times.
Wait() <-chan Result
// TerminateNicely can be called multiple times.
// It must only be called after Wait().
TerminateNicely(killGracePeriod time.Duration) error
}
type Result struct {
// Full stdout and stderr are captured to memory
Stdout string
Stderr string
ExitStatus int
Error error
}
type CmdRunner interface {
// RunComplexCommand returns error as nil:
// - command runs and exits with a zero exit status
// RunComplexCommand returns error:
// - command runs and exits with a non-zero exit status
// - command does not run
RunComplexCommand(cmd Command) (stdout, stderr string, exitStatus int, err error)
RunComplexCommandAsync(cmd Command) (Process, error)
RunCommand(cmdName string, args ...string) (stdout, stderr string, exitStatus int, err error)
RunCommandQuietly(cmdName string, args ...string) (stdout, stderr string, exitStatus int, err error)
RunCommandWithInput(input, cmdName string, args ...string) (stdout, stderr string, exitStatus int, err error)
CommandExists(cmdName string) (exists bool)
}