diff --git a/cmd/main.go b/cmd/main.go index bfc1d017..85ccbbbd 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -237,7 +237,8 @@ func run(opts *options) error { if exitErr == nil || opts.rerunFailsMaxAttempts == 0 { return finishRun(opts, exec, exitErr) } - if err := hasErrors(exitErr, exec); err != nil { + fmt.Printf("Executor has %#v", exec.FullPackages()) + if err := hasErrors(exitErr, exec, true); err != nil { return finishRun(opts, exec, err) } diff --git a/cmd/rerunfails.go b/cmd/rerunfails.go index aadaf428..382c2261 100644 --- a/cmd/rerunfails.go +++ b/cmd/rerunfails.go @@ -81,7 +81,7 @@ func rerunFailed(ctx context.Context, opts *options, scanConfig testjson.ScanCon if exitErr != nil { nextRec.lastErr = exitErr } - if err := hasErrors(exitErr, scanConfig.Execution); err != nil { + if err := hasErrors(exitErr, scanConfig.Execution, true); err != nil { return err } } @@ -93,7 +93,7 @@ func rerunFailed(ctx context.Context, opts *options, scanConfig testjson.ScanCon // startGoTestFn is a shim for testing var startGoTestFn = startGoTest -func hasErrors(err error, exec *testjson.Execution) error { +func hasErrors(err error, exec *testjson.Execution, ignorePanic bool) error { switch { case len(exec.Errors()) > 0: return fmt.Errorf("rerun aborted because previous run had errors") @@ -101,6 +101,9 @@ func hasErrors(err error, exec *testjson.Execution) error { case ExitCodeWithDefault(err) > 1: return fmt.Errorf("unexpected go test exit code: %v", err) case exec.HasPanic(): + if ignorePanic { + return nil + } return fmt.Errorf("rerun aborted because previous run had a suspected panic and some test may not have run") default: return nil diff --git a/testjson/execution.go b/testjson/execution.go index dd6e5070..68cd63f5 100644 --- a/testjson/execution.go +++ b/testjson/execution.go @@ -562,6 +562,21 @@ func (e *Execution) HasPanic() bool { return false } +func (e *Execution) FullPackages() []Package { + ps := []Package{} + for _, p := range e.packages { + ps = append(ps, *p) + } + return ps +} + +func (e *Execution) PrintPackages() { + fmt.Println("Print packages") + for k, p := range e.packages { + fmt.Printf("Package '%s' has content %v\n", k, *p) + } +} + func (e *Execution) end() []TestEvent { e.done = true var result []TestEvent // nolint: prealloc