Mercurial > hg
annotate mercurial/hbisect.py @ 26362:3bfc473f4d33
gitweb, monoblue: fix vertical align of spans in .sourcelines
Empty lines in file view could produce an inexplicable margin before the next
line (most noticeable in browsers on webkit/blink engine). That was making
empty lines seem taller than the rest.
Instead of using default vertical align, let's set it to 'top'.
This issue is actually present in paper, and only recently got into gitweb
(2239626369f5) and monoblue (119202d4d7a4). There's a bit more to it in paper,
so that will be dealt with in a future patch.
Recipe to see live: preferably using a webkit/blink browser, such as chromium,
browse a file with empty lines, e.g. https://selenic.com/hg/file/3.5/README#l8
Selecting a block of text that includes empty lines will reveal white "breaks"
in the selection. Highlighted line (#l8) also shows such a break below itself.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Fri, 25 Sep 2015 03:02:38 +0800 |
parents | f0ad094db832 |
children | 56b2bcea2529 |
rev | line source |
---|---|
5775
2dd202a6e15b
bisect: make bisect a built-in command
Matt Mackall <mpm@selenic.com>
parents:
5774
diff
changeset
|
1 # changelog bisection for mercurial |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
2 # |
5775
2dd202a6e15b
bisect: make bisect a built-in command
Matt Mackall <mpm@selenic.com>
parents:
5774
diff
changeset
|
3 # Copyright 2007 Matt Mackall |
1861
65949d1c9bf7
Added copyright information to hbisect.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1856
diff
changeset
|
4 # Copyright 2005, 2006 Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
8228
eee2319c5895
add blank line after copyright notices and after header
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
5 # |
1861
65949d1c9bf7
Added copyright information to hbisect.py
Thomas Arendsen Hein <thomas@intevation.de>
parents:
1856
diff
changeset
|
6 # 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
|
7 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8152
diff
changeset
|
8 # This software may be used and distributed according to the terms of the |
10263 | 9 # GNU General Public License version 2 or any later version. |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
10 |
25952
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
11 from __future__ import absolute_import |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
12 |
25113
0ca8410ea345
util: drop alias for collections.deque
Martin von Zweigbergk <martinvonz@google.com>
parents:
23877
diff
changeset
|
13 import collections |
20034
1e5b38a919dd
cleanup: move stdlib imports to their own import statement
Augie Fackler <raf@durin42.com>
parents:
18463
diff
changeset
|
14 import os |
25952
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
15 |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
16 from .i18n import _ |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
17 from .node import ( |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
18 hex, |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
19 short, |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
20 ) |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
21 from . import ( |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
22 error, |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
23 util, |
f0ad094db832
hbisect: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25113
diff
changeset
|
24 ) |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
25 |
5775
2dd202a6e15b
bisect: make bisect a built-in command
Matt Mackall <mpm@selenic.com>
parents:
5774
diff
changeset
|
26 def bisect(changelog, state): |
6858
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
27 """find the next node (if any) for testing during a bisect search. |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
28 returns a (nodes, number, good) tuple. |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
29 |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
30 'nodes' is the final result of the bisect if 'number' is 0. |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
31 Otherwise 'number' indicates the remaining possible candidates for |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
32 the search and 'nodes' contains the next bisect target. |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
33 'good' is True if bisect is searching for a first good changeset, False |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
34 if searching for a first bad one. |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
35 """ |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
36 |
5737 | 37 clparents = changelog.parentrevs |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8109
diff
changeset
|
38 skip = set([changelog.rev(n) for n in state['skip']]) |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
39 |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
40 def buildancestors(bad, good): |
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
41 # only the earliest bad revision matters |
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
42 badrev = min([changelog.rev(n) for n in bad]) |
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
43 goodrevs = [changelog.rev(n) for n in good] |
9583
0491be4448bf
bisect: limit considered set to descendants of first good rev
Matt Mackall <mpm@selenic.com>
parents:
8482
diff
changeset
|
44 goodrev = min(goodrevs) |
0491be4448bf
bisect: limit considered set to descendants of first good rev
Matt Mackall <mpm@selenic.com>
parents:
8482
diff
changeset
|
45 # build visit array |
0491be4448bf
bisect: limit considered set to descendants of first good rev
Matt Mackall <mpm@selenic.com>
parents:
8482
diff
changeset
|
46 ancestors = [None] * (len(changelog) + 1) # an extra for [-1] |
0491be4448bf
bisect: limit considered set to descendants of first good rev
Matt Mackall <mpm@selenic.com>
parents:
8482
diff
changeset
|
47 |
14895
a35d6f822e3e
hbisect: do not assume that min(good) is an ancestor of min(bad)
Alexander Krauss <krauss@in.tum.de>
parents:
14894
diff
changeset
|
48 # set nodes descended from goodrevs |
a35d6f822e3e
hbisect: do not assume that min(good) is an ancestor of min(bad)
Alexander Krauss <krauss@in.tum.de>
parents:
14894
diff
changeset
|
49 for rev in goodrevs: |
a35d6f822e3e
hbisect: do not assume that min(good) is an ancestor of min(bad)
Alexander Krauss <krauss@in.tum.de>
parents:
14894
diff
changeset
|
50 ancestors[rev] = [] |
18463
07771e233cf1
bisect: use changelog for iteration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18358
diff
changeset
|
51 for rev in changelog.revs(goodrev + 1): |
9583
0491be4448bf
bisect: limit considered set to descendants of first good rev
Matt Mackall <mpm@selenic.com>
parents:
8482
diff
changeset
|
52 for prev in clparents(rev): |
0491be4448bf
bisect: limit considered set to descendants of first good rev
Matt Mackall <mpm@selenic.com>
parents:
8482
diff
changeset
|
53 if ancestors[prev] == []: |
0491be4448bf
bisect: limit considered set to descendants of first good rev
Matt Mackall <mpm@selenic.com>
parents:
8482
diff
changeset
|
54 ancestors[rev] = [] |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
55 |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
56 # clear good revs from array |
14894
3db92e3948d5
hbisect: more consistent variable name
Alexander Krauss <krauss@in.tum.de>
parents:
14893
diff
changeset
|
57 for rev in goodrevs: |
3db92e3948d5
hbisect: more consistent variable name
Alexander Krauss <krauss@in.tum.de>
parents:
14893
diff
changeset
|
58 ancestors[rev] = None |
18463
07771e233cf1
bisect: use changelog for iteration
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18358
diff
changeset
|
59 for rev in changelog.revs(len(changelog), goodrev): |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
60 if ancestors[rev] is None: |
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
61 for prev in clparents(rev): |
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
62 ancestors[prev] = None |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
63 |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
64 if ancestors[badrev] is None: |
5777 | 65 return badrev, None |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
66 return badrev, ancestors |
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
67 |
14215
e5a59d31bb04
hbisect: use real Booleans instead of 0/1
Martin Geisler <mg@aragost.com>
parents:
12067
diff
changeset
|
68 good = False |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
69 badrev, ancestors = buildancestors(state['bad'], state['good']) |
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
70 if not ancestors: # looking for bad to good transition? |
14215
e5a59d31bb04
hbisect: use real Booleans instead of 0/1
Martin Geisler <mg@aragost.com>
parents:
12067
diff
changeset
|
71 good = True |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
72 badrev, ancestors = buildancestors(state['good'], state['bad']) |
5777 | 73 bad = changelog.node(badrev) |
5776
35ec669cdd43
bisect: handle search for bad to good transitions
Matt Mackall <mpm@selenic.com>
parents:
5775
diff
changeset
|
74 if not ancestors: # now we're confused |
20094
06ef32c3b4bb
bisect: report "both good and bad" as such, not as "not directly related"
Mads Kiilerich <madski@unity3d.com>
parents:
18463
diff
changeset
|
75 if (len(state['bad']) == 1 and len(state['good']) == 1 and |
06ef32c3b4bb
bisect: report "both good and bad" as such, not as "not directly related"
Mads Kiilerich <madski@unity3d.com>
parents:
18463
diff
changeset
|
76 state['bad'] != state['good']): |
12005
c6b1be675d3c
bisect: better message for unrelated starting revisions
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
77 raise util.Abort(_("starting revisions are not directly related")) |
12067
a4fbbe0fbc38
Lowercase error messages
Martin Geisler <mg@lazybytes.net>
parents:
12005
diff
changeset
|
78 raise util.Abort(_("inconsistent state, %s:%s is good and bad") |
6217
fe8dbbe9520d
Avoid importing mercurial.node/mercurial.repo stuff from mercurial.hg
Joel Rosdahl <joel@rosdahl.net>
parents:
5777
diff
changeset
|
79 % (badrev, short(bad))) |
5723
e3b09819496b
bisect: switch to rev-based calculation
Matt Mackall <mpm@selenic.com>
parents:
5722
diff
changeset
|
80 |
5768
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
81 # build children dict |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
82 children = {} |
25113
0ca8410ea345
util: drop alias for collections.deque
Martin von Zweigbergk <martinvonz@google.com>
parents:
23877
diff
changeset
|
83 visit = collections.deque([badrev]) |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
84 candidates = [] |
5768
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
85 while visit: |
16803
107a3270a24a
cleanup: use the deque type where appropriate
Bryan O'Sullivan <bryano@fb.com>
parents:
16647
diff
changeset
|
86 rev = visit.popleft() |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
87 if ancestors[rev] == []: |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
88 candidates.append(rev) |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
89 for prev in clparents(rev): |
5768
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
90 if prev != -1: |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
91 if prev in children: |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
92 children[prev].append(rev) |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
93 else: |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
94 children[prev] = [rev] |
78d14403bdc7
bisect: use a dict for children
Matt Mackall <mpm@selenic.com>
parents:
5767
diff
changeset
|
95 visit.append(prev) |
5767
dd5f8ed31057
bisect: propagate ancestor lists directly to children
Matt Mackall <mpm@selenic.com>
parents:
5766
diff
changeset
|
96 |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
97 candidates.sort() |
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
98 # have we narrowed it down to one entry? |
6858
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
99 # or have all other possible candidates besides 'bad' have been skipped? |
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
100 tot = len(candidates) |
6858
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
101 unskipped = [c for c in candidates if (c not in skip) and (c != badrev)] |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
102 if tot == 1 or not unskipped: |
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
103 return ([changelog.node(rev) for rev in candidates], 0, good) |
7902
afddc32b2b3f
bisect: use integer division
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7557
diff
changeset
|
104 perfect = tot // 2 |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
105 |
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
106 # find the best node to test |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
107 best_rev = None |
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
108 best_len = -1 |
8463
43186df4bb8e
bisect: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8228
diff
changeset
|
109 poison = set() |
5769
49809f4a38d8
bisect: calculate candidate set while finding children
Matt Mackall <mpm@selenic.com>
parents:
5768
diff
changeset
|
110 for rev in candidates: |
5772
4c46636eafe5
bisect: skip calculations on candidates with too many ancestors
Matt Mackall <mpm@selenic.com>
parents:
5771
diff
changeset
|
111 if rev in poison: |
8482
fc27c91fff2c
hbisect: use set.update for bulk updates
Martin Geisler <mg@lazybytes.net>
parents:
8463
diff
changeset
|
112 # poison children |
fc27c91fff2c
hbisect: use set.update for bulk updates
Martin Geisler <mg@lazybytes.net>
parents:
8463
diff
changeset
|
113 poison.update(children.get(rev, [])) |
5772
4c46636eafe5
bisect: skip calculations on candidates with too many ancestors
Matt Mackall <mpm@selenic.com>
parents:
5771
diff
changeset
|
114 continue |
5773
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
115 |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
116 a = ancestors[rev] or [rev] |
5770
f5b858fc8067
bisect: find best node in ancestor collection pass
Matt Mackall <mpm@selenic.com>
parents:
5769
diff
changeset
|
117 ancestors[rev] = None |
5773
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
118 |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
119 x = len(a) # number of ancestors |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
120 y = tot - x # number of non-ancestors |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
121 value = min(x, y) # how good is this test? |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
122 if value > best_len and rev not in skip: |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
123 best_len = value |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
124 best_rev = rev |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
125 if value == perfect: # found a perfect candidate? quit early |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
126 break |
5772
4c46636eafe5
bisect: skip calculations on candidates with too many ancestors
Matt Mackall <mpm@selenic.com>
parents:
5771
diff
changeset
|
127 |
7557
21233de9c053
Circumvent removal of valid bisect candidates due to previously skipped ones
Bernhard Leiner <bleiner@gmail.com>
parents:
7227
diff
changeset
|
128 if y < perfect and rev not in skip: # all downhill from here? |
8482
fc27c91fff2c
hbisect: use set.update for bulk updates
Martin Geisler <mg@lazybytes.net>
parents:
8463
diff
changeset
|
129 # poison children |
fc27c91fff2c
hbisect: use set.update for bulk updates
Martin Geisler <mg@lazybytes.net>
parents:
8463
diff
changeset
|
130 poison.update(children.get(rev, [])) |
5773
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
131 continue |
5772
4c46636eafe5
bisect: skip calculations on candidates with too many ancestors
Matt Mackall <mpm@selenic.com>
parents:
5771
diff
changeset
|
132 |
5773
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
133 for c in children.get(rev, []): |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
134 if ancestors[c]: |
8152
08e1baf924ca
replace set-like dictionaries with real sets
Martin Geisler <mg@lazybytes.net>
parents:
8109
diff
changeset
|
135 ancestors[c] = list(set(ancestors[c] + a)) |
5773
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
136 else: |
2f6105ab4c54
bisect: merge ancestor lists when pushing to children
Matt Mackall <mpm@selenic.com>
parents:
5772
diff
changeset
|
137 ancestors[c] = a + [c] |
5734
944b231fa0e7
bisect: move reporting out of core bisect function
Matt Mackall <mpm@selenic.com>
parents:
5733
diff
changeset
|
138 |
5737 | 139 assert best_rev is not None |
140 best_node = changelog.node(best_rev) | |
1367
a7678cbd7c28
bisect extension for mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
diff
changeset
|
141 |
6858
8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
Bernhard Leiner <bleiner@gmail.com>
parents:
6217
diff
changeset
|
142 return ([best_node], tot, good) |
7227
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
143 |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
144 |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
145 def load_state(repo): |
16647
14913fcb30c6
bisect: track the current changeset (issue3382)
Bryan O'Sullivan <bryano@fb.com>
parents:
15406
diff
changeset
|
146 state = {'current': [], 'good': [], 'bad': [], 'skip': []} |
7227
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
147 if os.path.exists(repo.join("bisect.state")): |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20095
diff
changeset
|
148 for l in repo.vfs("bisect.state"): |
7227
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
149 kind, node = l[:-1].split() |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
150 node = repo.lookup(node) |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
151 if kind not in state: |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
152 raise util.Abort(_("unknown bisect kind %s") % kind) |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
153 state[kind].append(node) |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
154 return state |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
155 |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
156 |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
157 def save_state(repo, state): |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20095
diff
changeset
|
158 f = repo.vfs("bisect.state", "w", atomictemp=True) |
7227
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
159 wlock = repo.wlock() |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
160 try: |
18358
93293813d753
bisect: store state sorted
Mads Kiilerich <mads@kiilerich.com>
parents:
17537
diff
changeset
|
161 for kind in sorted(state): |
7227
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
162 for node in state[kind]: |
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
163 f.write("%s %s\n" % (kind, hex(node))) |
15057
774da7121fc9
atomictempfile: make close() consistent with other file-like objects.
Greg Ward <greg@gerg.ca>
parents:
14895
diff
changeset
|
164 f.close() |
7227
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
165 finally: |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7902
diff
changeset
|
166 wlock.release() |
7227
e1afb50ec2aa
bisect: ability to check revision with command
Alexander Solovyov <piranha@piranha.org.ua>
parents:
6861
diff
changeset
|
167 |
15135
f19de58af225
revset.bisect: move bisect() code to hbisect.py
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15057
diff
changeset
|
168 def get(repo, status): |
f19de58af225
revset.bisect: move bisect() code to hbisect.py
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15057
diff
changeset
|
169 """ |
f19de58af225
revset.bisect: move bisect() code to hbisect.py
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15057
diff
changeset
|
170 Return a list of revision(s) that match the given status: |
f19de58af225
revset.bisect: move bisect() code to hbisect.py
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15057
diff
changeset
|
171 |
15153
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
172 - ``good``, ``bad``, ``skip``: csets explicitly marked as good/bad/skip |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
16834
diff
changeset
|
173 - ``goods``, ``bads`` : csets topologically good/bad |
15153
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
174 - ``range`` : csets taking part in the bisection |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
175 - ``pruned`` : csets that are goods, bads or skipped |
15138
883d28233a4d
revset.bisect: add new 'untested' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15137
diff
changeset
|
176 - ``untested`` : csets whose fate is yet unknown |
15147
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
177 - ``ignored`` : csets ignored due to DAG topology |
16647
14913fcb30c6
bisect: track the current changeset (issue3382)
Bryan O'Sullivan <bryano@fb.com>
parents:
15406
diff
changeset
|
178 - ``current`` : the cset currently being bisected |
15135
f19de58af225
revset.bisect: move bisect() code to hbisect.py
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15057
diff
changeset
|
179 """ |
f19de58af225
revset.bisect: move bisect() code to hbisect.py
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15057
diff
changeset
|
180 state = load_state(repo) |
16647
14913fcb30c6
bisect: track the current changeset (issue3382)
Bryan O'Sullivan <bryano@fb.com>
parents:
15406
diff
changeset
|
181 if status in ('good', 'bad', 'skip', 'current'): |
14913fcb30c6
bisect: track the current changeset (issue3382)
Bryan O'Sullivan <bryano@fb.com>
parents:
15406
diff
changeset
|
182 return map(repo.changelog.rev, state[status]) |
15135
f19de58af225
revset.bisect: move bisect() code to hbisect.py
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15057
diff
changeset
|
183 else: |
17493 | 184 # In the following sets, we do *not* call 'bisect()' with more |
17509 | 185 # than one level of recursion, because that can be very, very |
15146
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
186 # time consuming. Instead, we always develop the expression as |
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
187 # much as possible. |
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
188 |
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
189 # 'range' is all csets that make the bisection: |
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
190 # - have a good ancestor and a bad descendant, or conversely |
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
191 # that's because the bisection can go either way |
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
192 range = '( bisect(bad)::bisect(good) | bisect(good)::bisect(bad) )' |
15136
18219c0789ae
revset.bisect: add new 'range' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15135
diff
changeset
|
193 |
15404
c1eb8398fe82
localrepo: convert various repo.set() users to repo.revs()
Matt Mackall <mpm@selenic.com>
parents:
15308
diff
changeset
|
194 _t = repo.revs('bisect(good)::bisect(bad)') |
15153
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
195 # The sets of topologically good or bad csets |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
196 if len(_t) == 0: |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
197 # Goods are topologically after bads |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
198 goods = 'bisect(good)::' # Pruned good csets |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
199 bads = '::bisect(bad)' # Pruned bad csets |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
200 else: |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
201 # Goods are topologically before bads |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
202 goods = '::bisect(good)' # Pruned good csets |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
203 bads = 'bisect(bad)::' # Pruned bad csets |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
204 |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
205 # 'pruned' is all csets whose fate is already known: good, bad, skip |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
206 skips = 'bisect(skip)' # Pruned skipped csets |
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
207 pruned = '( (%s) | (%s) | (%s) )' % (goods, bads, skips) |
15136
18219c0789ae
revset.bisect: add new 'range' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15135
diff
changeset
|
208 |
15146
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
209 # 'untested' is all cset that are- in 'range', but not in 'pruned' |
b39d85be78a8
hbisect.get: use simpler code with repo.set(), fix 'pruned' set
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15138
diff
changeset
|
210 untested = '( (%s) - (%s) )' % (range, pruned) |
15136
18219c0789ae
revset.bisect: add new 'range' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15135
diff
changeset
|
211 |
15147
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
212 # 'ignored' is all csets that were not used during the bisection |
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
213 # due to DAG topology, but may however have had an impact. |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
16834
diff
changeset
|
214 # E.g., a branch merged between bads and goods, but whose branch- |
15147
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
215 # point is out-side of the range. |
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
216 iba = '::bisect(bad) - ::bisect(good)' # Ignored bads' ancestors |
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
217 iga = '::bisect(good) - ::bisect(bad)' # Ignored goods' ancestors |
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
218 ignored = '( ( (%s) | (%s) ) - (%s) )' % (iba, iga, range) |
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
219 |
15136
18219c0789ae
revset.bisect: add new 'range' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15135
diff
changeset
|
220 if status == 'range': |
15404
c1eb8398fe82
localrepo: convert various repo.set() users to repo.revs()
Matt Mackall <mpm@selenic.com>
parents:
15308
diff
changeset
|
221 return repo.revs(range) |
15137
91f93dcd72aa
revset.bisect: add new 'pruned' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15136
diff
changeset
|
222 elif status == 'pruned': |
15404
c1eb8398fe82
localrepo: convert various repo.set() users to repo.revs()
Matt Mackall <mpm@selenic.com>
parents:
15308
diff
changeset
|
223 return repo.revs(pruned) |
15138
883d28233a4d
revset.bisect: add new 'untested' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15137
diff
changeset
|
224 elif status == 'untested': |
15404
c1eb8398fe82
localrepo: convert various repo.set() users to repo.revs()
Matt Mackall <mpm@selenic.com>
parents:
15308
diff
changeset
|
225 return repo.revs(untested) |
15147
395ca8cd2669
revset.bisect: add 'ignored' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15146
diff
changeset
|
226 elif status == 'ignored': |
15404
c1eb8398fe82
localrepo: convert various repo.set() users to repo.revs()
Matt Mackall <mpm@selenic.com>
parents:
15308
diff
changeset
|
227 return repo.revs(ignored) |
15153
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
228 elif status == "goods": |
15404
c1eb8398fe82
localrepo: convert various repo.set() users to repo.revs()
Matt Mackall <mpm@selenic.com>
parents:
15308
diff
changeset
|
229 return repo.revs(goods) |
15153
fa0a464e4ca5
hbisect: add two new revset descriptions: 'goods' and 'bads'
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15147
diff
changeset
|
230 elif status == "bads": |
15404
c1eb8398fe82
localrepo: convert various repo.set() users to repo.revs()
Matt Mackall <mpm@selenic.com>
parents:
15308
diff
changeset
|
231 return repo.revs(bads) |
15136
18219c0789ae
revset.bisect: add new 'range' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15135
diff
changeset
|
232 else: |
18219c0789ae
revset.bisect: add new 'range' set to the bisect keyword
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15135
diff
changeset
|
233 raise error.ParseError(_('invalid bisect state')) |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
234 |
15406
1f677c7e494d
bisect: remove superfluous parameter in label()
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15404
diff
changeset
|
235 def label(repo, node): |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
236 rev = repo.changelog.rev(node) |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
237 |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
238 # Try explicit sets |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
239 if rev in get(repo, 'good'): |
15308
ab341fbb05b1
bisect: add i18n contexts
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15154
diff
changeset
|
240 # i18n: bisect changeset status |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
241 return _('good') |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
242 if rev in get(repo, 'bad'): |
15308
ab341fbb05b1
bisect: add i18n contexts
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15154
diff
changeset
|
243 # i18n: bisect changeset status |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
244 return _('bad') |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
245 if rev in get(repo, 'skip'): |
15308
ab341fbb05b1
bisect: add i18n contexts
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15154
diff
changeset
|
246 # i18n: bisect changeset status |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
247 return _('skipped') |
16647
14913fcb30c6
bisect: track the current changeset (issue3382)
Bryan O'Sullivan <bryano@fb.com>
parents:
15406
diff
changeset
|
248 if rev in get(repo, 'untested') or rev in get(repo, 'current'): |
15308
ab341fbb05b1
bisect: add i18n contexts
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15154
diff
changeset
|
249 # i18n: bisect changeset status |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
250 return _('untested') |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
251 if rev in get(repo, 'ignored'): |
15308
ab341fbb05b1
bisect: add i18n contexts
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15154
diff
changeset
|
252 # i18n: bisect changeset status |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
253 return _('ignored') |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
254 |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
255 # Try implicit sets |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
256 if rev in get(repo, 'goods'): |
15308
ab341fbb05b1
bisect: add i18n contexts
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15154
diff
changeset
|
257 # i18n: bisect changeset status |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
258 return _('good (implicit)') |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
259 if rev in get(repo, 'bads'): |
15308
ab341fbb05b1
bisect: add i18n contexts
Wagner Bruna <wbruna@softwareexpress.com.br>
parents:
15154
diff
changeset
|
260 # i18n: bisect changeset status |
15154
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
261 return _('bad (implicit)') |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
262 |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
263 return None |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
264 |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
265 def shortlabel(label): |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
266 if label: |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
267 return label[0].upper() |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
268 |
aa2e908c521e
hbisect: add functions to return a label for a cset bisection status
"Yann E. MORIN" <yann.morin.1998@anciens.enib.fr>
parents:
15153
diff
changeset
|
269 return None |