diff options
Diffstat (limited to 'pkg/bisect')
| -rw-r--r-- | pkg/bisect/bisect.go | 33 | ||||
| -rw-r--r-- | pkg/bisect/bisect_test.go | 40 |
2 files changed, 59 insertions, 14 deletions
diff --git a/pkg/bisect/bisect.go b/pkg/bisect/bisect.go index c3a80a3e8..4fbeeec4f 100644 --- a/pkg/bisect/bisect.go +++ b/pkg/bisect/bisect.go @@ -187,7 +187,7 @@ func (env *env) bisect() (*Result, error) { } else if testRes.verdict != vcs.BisectBad { return nil, fmt.Errorf("the crash wasn't reproduced on the original commit") } - bad, good, rep1, err := env.commitRange() + bad, good, rep1, results1, err := env.commitRange() if err != nil { return nil, err } @@ -195,6 +195,9 @@ func (env *env) bisect() (*Result, error) { return &Result{Report: rep1, Commit: bad}, nil // still not fixed/happens on the oldest release } results := map[string]*testResult{cfg.Kernel.Commit: testRes} + for _, res := range results1 { + results[res.com.Hash] = res + } commits, err := env.bisecter.Bisect(bad.Hash, good.Hash, cfg.Trace, func() (vcs.BisectResult, error) { testRes1, err := env.test() if err != nil { @@ -232,58 +235,60 @@ func (env *env) bisect() (*Result, error) { return res, nil } -func (env *env) commitRange() (*vcs.Commit, *vcs.Commit, *report.Report, error) { +func (env *env) commitRange() (*vcs.Commit, *vcs.Commit, *report.Report, []*testResult, error) { if env.cfg.Fix { return env.commitRangeForFix() } return env.commitRangeForBug() } -func (env *env) commitRangeForFix() (*vcs.Commit, *vcs.Commit, *report.Report, error) { +func (env *env) commitRangeForFix() (*vcs.Commit, *vcs.Commit, *report.Report, []*testResult, error) { env.log("testing current HEAD %v", env.head.Hash) if _, err := env.repo.SwitchCommit(env.head.Hash); err != nil { - return nil, nil, nil, err + return nil, nil, nil, nil, err } res, err := env.test() if err != nil { - return nil, nil, nil, err + return nil, nil, nil, nil, err } if res.verdict != vcs.BisectGood { - return env.head, nil, res.rep, nil + return env.head, nil, res.rep, []*testResult{res}, nil } - return env.head, env.commit, nil, nil + return env.head, env.commit, nil, []*testResult{res}, nil } -func (env *env) commitRangeForBug() (*vcs.Commit, *vcs.Commit, *report.Report, error) { +func (env *env) commitRangeForBug() (*vcs.Commit, *vcs.Commit, *report.Report, []*testResult, error) { cfg := env.cfg tags, err := env.bisecter.PreviousReleaseTags(cfg.Kernel.Commit) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, nil, err } if len(tags) == 0 { - return nil, nil, nil, fmt.Errorf("no release tags before this commit") + return nil, nil, nil, nil, fmt.Errorf("no release tags before this commit") } lastBad := env.commit var lastRep *report.Report + var results []*testResult for _, tag := range tags { env.log("testing release %v", tag) com, err := env.repo.SwitchCommit(tag) if err != nil { - return nil, nil, nil, err + return nil, nil, nil, nil, err } res, err := env.test() if err != nil { - return nil, nil, nil, err + return nil, nil, nil, nil, err } + results = append(results, res) if res.verdict == vcs.BisectGood { - return lastBad, com, nil, nil + return lastBad, com, nil, results, nil } if res.verdict == vcs.BisectBad { lastBad = com lastRep = res.rep } } - return lastBad, nil, lastRep, nil + return lastBad, nil, lastRep, results, nil } type testResult struct { diff --git a/pkg/bisect/bisect_test.go b/pkg/bisect/bisect_test.go index 04609e701..01dbfd44e 100644 --- a/pkg/bisect/bisect_test.go +++ b/pkg/bisect/bisect_test.go @@ -245,6 +245,46 @@ func TestBisectionResults(t *testing.T) { sameBinaryEnd: 504, noopChange: true, }, + { + name: "cause-same-binary-release1", + startCommit: 905, + commitLen: 1, + expectRep: true, + culprit: 500, + sameBinaryStart: 405, + sameBinaryEnd: 500, + noopChange: true, + }, + { + name: "cause-same-binary-release2", + startCommit: 905, + commitLen: 1, + expectRep: true, + culprit: 501, + sameBinaryStart: 500, + sameBinaryEnd: 501, + noopChange: true, + }, + { + name: "cause-same-binary-release3", + startCommit: 905, + commitLen: 1, + expectRep: true, + culprit: 405, + sameBinaryStart: 404, + sameBinaryEnd: 405, + noopChange: true, + }, + { + name: "fix-same-binary-last", + fix: true, + startCommit: 400, + commitLen: 1, + culprit: 905, + sameBinaryStart: 904, + sameBinaryEnd: 905, + noopChange: true, + }, } for _, test := range tests { test := test |
