author | Matt Mackall <mpm@selenic.com> |
Mon, 31 Dec 2007 18:20:34 -0600 | |
changeset 5770 | f5b858fc8067 |
parent 5769 | 49809f4a38d8 |
child 5771 | 9d3f49f52a4a |
permissions | -rw-r--r-- |
1855
0ba9dee8cfbd
Fixed spacing/indentation, removed #! script header, added short description.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1854
diff
changeset
|
1 |
# bisect extension for mercurial |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
2 |
# |
1861
65949d1c9bf7
Added copyright information to hbisect.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1856
diff
changeset
|
3 |
# Copyright 2005, 2006 Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
65949d1c9bf7
Added copyright information to hbisect.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1856
diff
changeset
|
4 |
# Inspired by git bisect, extension skeleton taken from mq.py. |
65949d1c9bf7
Added copyright information to hbisect.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1856
diff
changeset
|
5 |
# |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
6 |
# This software may be used and distributed according to the terms |
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
7 |
# of the GNU General Public License, incorporated herein by reference. |
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
8 |
|
3891 | 9 |
from mercurial.i18n import _ |
5731
19691160d7f5
bisect: remove unused imports
Matt Mackall <mpm@selenic.com>
parents:
5730
diff
changeset
|
10 |
from mercurial import hg, util, cmdutil |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
11 |
import os |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
12 |
|
5737 | 13 |
def _bisect(changelog, state): |
14 |
clparents = changelog.parentrevs |
|
15 |
# only the earliest bad revision matters |
|
16 |
badrev = min([changelog.rev(n) for n in state['bad']]) |
|
17 |
bad = changelog.node(badrev) |
|
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
18 |
skip = dict.fromkeys([changelog.rev(n) for n in state['skip']]) |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
19 |
|
5737 | 20 |
# build ancestors array |
21 |
ancestors = [[]] * (changelog.count() + 1) # an extra for [-1] |
|
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
22 |
|
5737 | 23 |
# clear good revs from array |
24 |
for node in state['good']: |
|
25 |
ancestors[changelog.rev(node)] = None |
|
26 |
for rev in xrange(changelog.count(), -1, -1): |
|
27 |
if ancestors[rev] is None: |
|
28 |
for prev in clparents(rev): |
|
29 |
ancestors[prev] = None |
|
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
30 |
|
5737 | 31 |
if ancestors[badrev] is None: |
32 |
raise util.Abort(_("Inconsistent state, %s:%s is good and bad") |
|
33 |
% (badrev, hg.short(bad))) |
|
5723
e3b09819496b
bisect: switch to rev-based calculation
Matt Mackall <mpm@selenic.com>
parents:
5722
diff
changeset
|
34 |
|
5768
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
35 |
# build children dict |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
36 |
children = {} |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
37 |
visit = [badrev] |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
38 |
candidates = [] |
5768
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
39 |
while visit: |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
40 |
rev = visit.pop(0) |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
41 |
if ancestors[rev] == []: |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
42 |
candidates.append(rev) |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
43 |
for prev in clparents(rev): |
5768
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
44 |
if prev != -1: |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
45 |
if prev in children: |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
46 |
children[prev].append(rev) |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
47 |
else: |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
48 |
children[prev] = [rev] |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
49 |
visit.append(prev) |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
50 |
|
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
51 |
candidates.sort() |
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
52 |
# have we narrowed it down to one entry? |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
53 |
tot = len(candidates) |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
54 |
if tot == 1: |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
55 |
return (bad, 0) |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
56 |
|
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
57 |
# find the best node to test |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
58 |
best_rev = None |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
59 |
best_len = -1 |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
60 |
for rev in candidates: |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
61 |
l = ancestors[rev] |
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
62 |
ancestors[rev] = None |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
63 |
if l != None: |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
64 |
if not l: |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
65 |
a = [rev] |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
66 |
elif len(l) == 1: |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
67 |
a = l[0] + [rev] |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
68 |
else: |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
69 |
a = {} |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
70 |
for s in l: |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
71 |
a.update(dict.fromkeys(s)) |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
72 |
a[rev] = None |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
73 |
a = a.keys() |
5768
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
74 |
for c in children.get(rev, []): |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
75 |
if ancestors[c]: |
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
76 |
ancestors[c].append(a) |
5726
19cbe2aea2bc
bisect: switch individual ancestor lists from dict to list
Matt Mackall <mpm@selenic.com>
parents:
5725
diff
changeset
|
77 |
else: |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
78 |
ancestors[c] = [a] |
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
79 |
if n in skip: |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
80 |
continue |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
81 |
a = len(a) # number of ancestors |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
82 |
b = tot - a # number of non-ancestors |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
83 |
value = min(a, b) # how good is this test? |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
84 |
if value > best_len: |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
85 |
best_len = value |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
86 |
best_rev = rev |
5734
944b231fa0e7
bisect: move reporting out of core bisect function
Matt Mackall <mpm@selenic.com>
parents:
5733
diff
changeset
|
87 |
|
5737 | 88 |
assert best_rev is not None |
89 |
best_node = changelog.node(best_rev) |
|
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
90 |
|
5737 | 91 |
return (best_node, tot) |
5733 | 92 |
|
5737 | 93 |
def bisect(ui, repo, rev=None, extra=None, |
5766
23caedc5a28f
bisect: add noupdate option
Matt Mackall <mpm@selenic.com>
parents:
5738
diff
changeset
|
94 |
reset=None, good=None, bad=None, skip=None, noupdate=None): |
5729
73646515c435
bisect: slightly improve the help message
Matt Mackall <mpm@selenic.com>
parents:
5728
diff
changeset
|
95 |
"""Subdivision search of changesets |
4390
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
96 |
|
5729
73646515c435
bisect: slightly improve the help message
Matt Mackall <mpm@selenic.com>
parents:
5728
diff
changeset
|
97 |
This extension helps to find changesets which introduce problems. |
73646515c435
bisect: slightly improve the help message
Matt Mackall <mpm@selenic.com>
parents:
5728
diff
changeset
|
98 |
To use, mark the earliest changeset you know exhibits the problem |
4390
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
99 |
as bad, then mark the latest changeset which is free from the problem |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
100 |
as good. Bisect will update your working directory to a revision for |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
101 |
testing. Once you have performed tests, mark the working directory |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
102 |
as bad or good and bisect will either update to another candidate |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
103 |
changeset or announce that it has found the bad revision. |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
104 |
|
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
105 |
Note: bisect expects bad revisions to be descendants of good revisions. |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
106 |
If you are looking for the point at which a problem was fixed, then make |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
107 |
the problem-free state "bad" and the problematic state "good." |
052062b98f26
Flesh out bisect help text
Brendan Cully <brendan@kublai.com>
parents:
3891
diff
changeset
|
108 |
|
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
109 |
""" |
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
110 |
# backward compatibility |
5737 | 111 |
if rev in "good bad reset init".split(): |
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
112 |
ui.warn(_("(use of 'hg bisect <cmd>' is deprecated)\n")) |
5737 | 113 |
cmd, rev, extra = rev, extra, None |
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
114 |
if cmd == "good": |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
115 |
good = True |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
116 |
elif cmd == "bad": |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
117 |
bad = True |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
118 |
else: |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
119 |
reset = True |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
120 |
elif extra or good + bad + skip + reset > 1: |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
121 |
raise util.Abort("Incompatible arguments") |
1855
0ba9dee8cfbd
Fixed spacing/indentation, removed #! script header, added short description.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1854
diff
changeset
|
122 |
|
5737 | 123 |
if reset: |
124 |
p = repo.join("bisect.state") |
|
125 |
if os.path.exists(p): |
|
126 |
os.unlink(p) |
|
127 |
return |
|
128 |
||
129 |
# load state |
|
130 |
state = {'good': [], 'bad': [], 'skip': []} |
|
131 |
if os.path.exists(repo.join("bisect.state")): |
|
132 |
for l in repo.opener("bisect.state"): |
|
133 |
kind, node = l[:-1].split() |
|
134 |
node = repo.lookup(node) |
|
135 |
if kind not in state: |
|
136 |
raise util.Abort(_("unknown bisect kind %s") % kind) |
|
137 |
state[kind].append(node) |
|
138 |
||
139 |
# update state |
|
140 |
node = repo.lookup(rev or '.') |
|
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
141 |
if good: |
5737 | 142 |
state['good'].append(node) |
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
143 |
elif bad: |
5737 | 144 |
state['bad'].append(node) |
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
145 |
elif skip: |
5737 | 146 |
state['skip'].append(node) |
147 |
||
148 |
# save state |
|
5738
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
149 |
f = repo.opener("bisect.state", "w", atomictemp=True) |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
150 |
wlock = repo.wlock() |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
151 |
try: |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
152 |
for kind in state: |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
153 |
for node in state[kind]: |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
154 |
f.write("%s %s\n" % (kind, hg.hex(node))) |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
155 |
f.rename() |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
156 |
finally: |
2a54e2b177b6
bisect: use proper locking when updating bisect.state
Matt Mackall <mpm@selenic.com>
parents:
5737
diff
changeset
|
157 |
del wlock |
5737 | 158 |
|
159 |
if not state['good'] or not state['bad']: |
|
160 |
return |
|
161 |
||
162 |
# actually bisect |
|
163 |
node, changesets = _bisect(repo.changelog, state) |
|
164 |
if changesets == 0: |
|
165 |
ui.write(_("The first bad revision is:\n")) |
|
166 |
displayer = cmdutil.show_changeset(ui, repo, {}) |
|
167 |
displayer.show(changenode=node) |
|
168 |
elif node is not None: |
|
169 |
# compute the approximate number of remaining tests |
|
170 |
tests, size = 0, 2 |
|
171 |
while size <= changesets: |
|
172 |
tests, size = tests + 1, size * 2 |
|
173 |
rev = repo.changelog.rev(node) |
|
174 |
ui.write(_("Testing changeset %s:%s " |
|
175 |
"(%s changesets remaining, ~%s tests)\n") |
|
176 |
% (rev, hg.short(node), changesets, tests)) |
|
5766
23caedc5a28f
bisect: add noupdate option
Matt Mackall <mpm@selenic.com>
parents:
5738
diff
changeset
|
177 |
if not noupdate: |
23caedc5a28f
bisect: add noupdate option
Matt Mackall <mpm@selenic.com>
parents:
5738
diff
changeset
|
178 |
cmdutil.bail_if_changed(repo) |
23caedc5a28f
bisect: add noupdate option
Matt Mackall <mpm@selenic.com>
parents:
5738
diff
changeset
|
179 |
return hg.clean(repo, node) |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
180 |
|
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
181 |
cmdtable = { |
5737 | 182 |
"bisect": (bisect, |
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
183 |
[('r', 'reset', False, _('reset bisect state')), |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
184 |
('g', 'good', False, _('mark changeset good')), |
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
185 |
('b', 'bad', False, _('mark changeset bad')), |
5766
23caedc5a28f
bisect: add noupdate option
Matt Mackall <mpm@selenic.com>
parents:
5738
diff
changeset
|
186 |
('s', 'skip', False, _('skip testing changeset')), |
23caedc5a28f
bisect: add noupdate option
Matt Mackall <mpm@selenic.com>
parents:
5738
diff
changeset
|
187 |
('U', 'noupdate', False, _('do not update to target'))], |
5735
9079081b8982
bisect: use more standard command syntax and help
Matt Mackall <mpm@selenic.com>
parents:
5734
diff
changeset
|
188 |
_("hg bisect [-gbsr] [REV]")) |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
189 |
} |