// Executes a job, catching any panics. func (e *Executor) Run(f def.Formula, j def.Job, d string, stdin io.Reader, outS, errS io.WriteCloser, journal log15.Logger) def.JobResult { r := def.JobResult{ ID: j.Id(), ExitCode: -1, } try.Do(func() { e.Execute(f, j, d, &r, outS, errS, journal) }).Catch(executor.Error, func(err *errors.Error) { r.Error = err }).Catch(integrity.Error, func(err *errors.Error) { r.Error = err }).CatchAll(func(err error) { r.Error = executor.UnknownError.Wrap(err).(*errors.Error) }).Done() return r }