diff --git a/mercurial/hbisect.py b/mercurial/hbisect.py --- a/mercurial/hbisect.py +++ b/mercurial/hbisect.py @@ -161,6 +161,7 @@ def get(repo, status): - ``good``, ``bad``, ``skip``: as the names imply - ``range`` : all csets taking part in the bisection - ``pruned`` : good|bad|skip, excluding out-of-range csets + - ``untested`` : csets whose fate is yet unknown """ state = load_state(repo) if status in ('good', 'bad', 'skip'): @@ -194,6 +195,9 @@ def get(repo, status): elif status == 'pruned': # We do not want skipped csets that are out-of-range return [c for c in range if c in (goods | bads | skips)] + elif status == 'untested': + # Return the csets in range that are not pruned + return [c for c in range if not c in (goods | bads | skips)] else: raise error.ParseError(_('invalid bisect state')) diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -242,6 +242,7 @@ def bisect(repo, subset, x): - ``range`` : all csets taking part in the bisection - ``pruned`` : good|bad|skip, excluding out-of-range csets + - ``untested`` : csets whose fate is yet unknown """ status = getstring(x, _("bisect requires a string")).lower() return [r for r in subset if r in hbisect.get(repo, status)] diff --git a/tests/test-bisect2.t b/tests/test-bisect2.t --- a/tests/test-bisect2.t +++ b/tests/test-bisect2.t @@ -252,6 +252,21 @@ complex bisect test 1 # first bad rev i $ hg bisect -b 17 # -> update to rev 6 Testing changeset 6:a214d5d3811a (15 changesets remaining, ~3 tests) 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ hg log -q -r 'bisect(untested)' + 1:4ca5088da217 + 2:051e12f87bf1 + 3:0950834f0a9c + 4:5c668c22234f + 5:385a529b6670 + 6:a214d5d3811a + 8:dab8161ac8fc + 9:3c77083deb4a + 10:429fcd26f52d + 11:82ca6f06eccd + 12:9f259202bbe7 + 13:b0a32c86eb31 + 15:857b178a7cf3 + 16:609d82a7ebae $ hg bisect -g # -> update to rev 13 Testing changeset 13:b0a32c86eb31 (9 changesets remaining, ~3 tests) 3 files updated, 0 files merged, 1 files removed, 0 files unresolved @@ -296,6 +311,16 @@ complex bisect test 1 # first bad rev i 10:429fcd26f52d 13:b0a32c86eb31 17:228c06deef46 + $ hg log -q -r 'bisect(untested)' + 1:4ca5088da217 + 2:051e12f87bf1 + 3:0950834f0a9c + 4:5c668c22234f + 5:385a529b6670 + 11:82ca6f06eccd + 12:9f259202bbe7 + 15:857b178a7cf3 + 16:609d82a7ebae complex bisect test 2 # first good rev is 13 @@ -310,6 +335,17 @@ complex bisect test 2 # first good rev $ hg bisect -b # -> update to rev 12 Testing changeset 12:9f259202bbe7 (5 changesets remaining, ~2 tests) 3 files updated, 0 files merged, 1 files removed, 0 files unresolved + $ hg log -q -r 'bisect(untested)' + 2:051e12f87bf1 + 3:0950834f0a9c + 4:5c668c22234f + 5:385a529b6670 + 8:dab8161ac8fc + 9:3c77083deb4a + 11:82ca6f06eccd + 12:9f259202bbe7 + 13:b0a32c86eb31 + 15:857b178a7cf3 $ hg bisect -b # -> update to rev 13 Testing changeset 13:b0a32c86eb31 (3 changesets remaining, ~1 tests) 1 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -520,9 +556,15 @@ end at merge: 17 bad, 11 good (but 9 is 13:b0a32c86eb31 15:857b178a7cf3 17:228c06deef46 + $ hg log -q -r 'bisect(untested)' + 12:9f259202bbe7 + 16:609d82a7ebae $ hg bisect --extend Extending search to changeset 8:dab8161ac8fc 2 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ hg log -q -r 'bisect(untested)' + 12:9f259202bbe7 + 16:609d82a7ebae $ hg bisect -g # dab8161ac8fc Testing changeset 9:3c77083deb4a (3 changesets remaining, ~1 tests) 1 files updated, 0 files merged, 0 files removed, 0 files unresolved @@ -550,6 +592,10 @@ end at merge: 17 bad, 11 good (but 9 is 13:b0a32c86eb31 15:857b178a7cf3 17:228c06deef46 + $ hg log -q -r 'bisect(untested)' + 10:429fcd26f52d + 12:9f259202bbe7 + 16:609d82a7ebae user adds irrelevant but consistent information (here: -g 2) to bisect state @@ -558,9 +604,15 @@ user adds irrelevant but consistent info $ hg bisect -g 8 Testing changeset 11:82ca6f06eccd (3 changesets remaining, ~1 tests) 2 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg log -q -r 'bisect(untested)' + 11:82ca6f06eccd + 12:9f259202bbe7 $ hg bisect -g 2 Testing changeset 11:82ca6f06eccd (3 changesets remaining, ~1 tests) 0 files updated, 0 files merged, 0 files removed, 0 files unresolved + $ hg log -q -r 'bisect(untested)' + 11:82ca6f06eccd + 12:9f259202bbe7 $ hg bisect -b The first bad revision is: changeset: 11:82ca6f06eccd @@ -578,3 +630,5 @@ user adds irrelevant but consistent info 8:dab8161ac8fc 11:82ca6f06eccd 13:b0a32c86eb31 + $ hg log -q -r 'bisect(untested)' + 12:9f259202bbe7