diff options
Diffstat (limited to 'modules/process/manager.go')
-rw-r--r-- | modules/process/manager.go | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/modules/process/manager.go b/modules/process/manager.go index af6ee9b81d..27ed1d4964 100644 --- a/modules/process/manager.go +++ b/modules/process/manager.go @@ -157,7 +157,14 @@ func (pm *Manager) ExecDirEnvStdIn(timeout time.Duration, dir, desc string, env pm.Remove(pid) if err != nil { - err = fmt.Errorf("exec(%d:%s) failed: %v(%v) stdout: %v stderr: %v", pid, desc, err, ctx.Err(), stdOut, stdErr) + err = &Error{ + PID: pid, + Description: desc, + Err: err, + CtxErr: ctx.Err(), + Stdout: stdOut.String(), + Stderr: stdErr.String(), + } } return stdOut.String(), stdErr.String(), err @@ -176,3 +183,22 @@ func (l processList) Less(i, j int) bool { func (l processList) Swap(i, j int) { l[i], l[j] = l[j], l[i] } + +// Error is a wrapped error describing the error results of Process Execution +type Error struct { + PID int64 + Description string + Err error + CtxErr error + Stdout string + Stderr string +} + +func (err *Error) Error() string { + return fmt.Sprintf("exec(%d:%s) failed: %v(%v) stdout: %s stderr: %s", err.PID, err.Description, err.Err, err.CtxErr, err.Stdout, err.Stderr) +} + +// Unwrap implements the unwrappable implicit interface for go1.13 Unwrap() +func (err *Error) Unwrap() error { + return err.Err +} |