Mercurial > hg
annotate hgext/interhg.py @ 6858:8f256bf98219
Add support for multiple possible bisect results (issue1228, issue1182)
The real reason for both issue is that bisect can not handle cases where there
are multiple possibilities for the result.
Example (from issue1228):
rev 0 -> good
rev 1 -> skipped
rev 2 -> skipped
rev 3 -> skipped
rev 4 -> bad
Note that this patch does not only fix the reported Assertion Error but also
the problem of a non converging bisect:
hg init
for i in `seq 3`; do echo $i > $i; hg add $i; hg ci -m$i; done
hg bisect -b 2
hg bisect -g 0
hg bisect -s
From this state on, you can:
a) mark as bad forever (non converging!)
b) mark as good to get an inconsistent state
c) skip for the Assertion Error
Minor description and code edits by pmezard.
author | Bernhard Leiner <bleiner@gmail.com> |
---|---|
date | Sat, 02 Aug 2008 22:10:10 +0200 |
parents | 9f1e6ab76069 |
children | 2af657eafeba |
rev | line source |
---|---|
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
1 # interhg.py - interhg |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
2 # |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
3 # Copyright 2007 OHASHI Hideya <ohachige@gmail.com> |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
4 # |
5288
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
5 # Contributor(s): |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
6 # Edward Lee <edward.lee@engineering.uiuc.edu> |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
7 # |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
8 # This software may be used and distributed according to the terms |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
9 # of the GNU General Public License, incorporated herein by reference. |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
10 # |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
11 # The `interhg' Mercurial extension allows you to change changelog and |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
12 # summary text just like InterWiki way. |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
13 # |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
14 # To enable this extension: |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
15 # |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
16 # [extensions] |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
17 # interhg = |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
18 # |
5288
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
19 # These are some example patterns (link to bug tracking, etc.) |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
20 # |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
21 # [interhg] |
5288
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
22 # issues = s!issue(\d+)!<a href="http://bts/issue\1">issue\1<\/a>! |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
23 # bugzilla = s!((?:bug|b=|(?=#?\d{4,}))(?:\s*#?)(\d+))!<a..=\2">\1</a>!i |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
24 # boldify = s/(^|\s)#(\d+)\b/ <b>#\2<\/b>/ |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
25 # |
5288
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
26 # Add any number of names and patterns to match |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
27 |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
28 import re |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
29 from mercurial.hgweb import hgweb_mod |
5976
9f1e6ab76069
templates: move filters to their own module
Matt Mackall <mpm@selenic.com>
parents:
5288
diff
changeset
|
30 from mercurial import templatefilters |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
31 |
5976
9f1e6ab76069
templates: move filters to their own module
Matt Mackall <mpm@selenic.com>
parents:
5288
diff
changeset
|
32 orig_escape = templatefilters.filters["escape"] |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
33 |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
34 interhg_table = [] |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
35 |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
36 def interhg_escape(x): |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
37 escstr = orig_escape(x) |
5288
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
38 for regexp, format in interhg_table: |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
39 escstr = regexp.sub(format, escstr) |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
40 return escstr |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
41 |
5976
9f1e6ab76069
templates: move filters to their own module
Matt Mackall <mpm@selenic.com>
parents:
5288
diff
changeset
|
42 templatefilters.filters["escape"] = interhg_escape |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
43 |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
44 orig_refresh = hgweb_mod.hgweb.refresh |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
45 |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
46 def interhg_refresh(self): |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
47 interhg_table[:] = [] |
5288
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
48 for key, pattern in self.repo.ui.configitems('interhg'): |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
49 # grab the delimiter from the character after the "s" |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
50 unesc = pattern[1] |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
51 delim = re.escape(unesc) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
52 |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
53 # identify portions of the pattern, taking care to avoid escaped |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
54 # delimiters. the replace format and flags are optional, but delimiters |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
55 # are required. |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
56 match = re.match(r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$' |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
57 % (delim, delim, delim), pattern) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
58 if not match: |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
59 self.repo.ui.warn("interhg: invalid pattern for %s: %s\n" |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
60 % (key, pattern)) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
61 continue |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
62 |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
63 # we need to unescape the delimiter for regexp and format |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
64 delim_re = re.compile(r'(?<!\\)\\%s' % delim) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
65 regexp = delim_re.sub(unesc, match.group(1)) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
66 format = delim_re.sub(unesc, match.group(2)) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
67 |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
68 # the pattern allows for 6 regexp flags, so set them if necessary |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
69 flagin = match.group(3) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
70 flags = 0 |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
71 if flagin: |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
72 for flag in flagin.upper(): |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
73 flags |= re.__dict__[flag] |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
74 |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
75 try: |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
76 regexp = re.compile(regexp, flags) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
77 interhg_table.append((regexp, format)) |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
78 except re.error: |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
79 self.repo.ui.warn("interhg: invalid regexp for %s: %s\n" |
18091102a633
interhg: allow more flexible pattern specification (fixes 2/3 of issue699)
Edward Lee <edward.lee@engineering.uiuc.edu>
parents:
4817
diff
changeset
|
80 % (key, regexp)) |
4817
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
81 return orig_refresh(self) |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
82 |
0ac6b537893f
interhg extension allows you to change changelog text like InterWiki.
OHASHI Hideya <ohachige@gmail.com>
parents:
diff
changeset
|
83 hgweb_mod.hgweb.refresh = interhg_refresh |