##// END OF EJS Templates
interhg: upgrade comments to online help and improve them...
Cédric Duval -
r8824:67ee7587 default
parent child Browse files
Show More
@@ -1,82 +1,84 b''
1 # interhg.py - interhg
1 # interhg.py - interhg
2 #
2 #
3 # Copyright 2007 OHASHI Hideya <ohachige@gmail.com>
3 # Copyright 2007 OHASHI Hideya <ohachige@gmail.com>
4 #
4 #
5 # Contributor(s):
5 # Contributor(s):
6 # Edward Lee <edward.lee@engineering.uiuc.edu>
6 # Edward Lee <edward.lee@engineering.uiuc.edu>
7 #
7 #
8 # This software may be used and distributed according to the terms of the
8 # This software may be used and distributed according to the terms of the
9 # GNU General Public License version 2, incorporated herein by reference.
9 # GNU General Public License version 2, incorporated herein by reference.
10 #
10
11 # The `interhg' Mercurial extension allows you to change changelog and
11 '''expand expressions into changelog and summaries
12 # summary text just like InterWiki way.
12
13 #
13 This extension allows the use of a special syntax in summaries,
14 # To enable this extension:
14 which will be automatically expanded into links or any other
15 #
15 arbitrary expression, much like InterWiki does.
16 # [extensions]
16
17 # interhg =
17 To enable this extension, add the following lines to your hgrc:
18 #
18
19 # These are some example patterns (link to bug tracking, etc.)
19 [extensions]
20 #
20 interhg =
21 # [interhg]
21
22 # issues = s!issue(\d+)!<a href="http://bts/issue\1">issue\1<\/a>!
22 A few example patterns (link to bug tracking, etc.):
23 # bugzilla = s!((?:bug|b=|(?=#?\d{4,}))(?:\s*#?)(\d+))!<a..=\2">\1</a>!i
23
24 # boldify = s/(^|\s)#(\d+)\b/ <b>#\2<\/b>/
24 [interhg]
25 #
25 issues = s!issue(\d+)!<a href="http://bts/issue\1">issue\1<\/a>!
26 # Add any number of names and patterns to match
26 bugzilla = s!((?:bug|b=|(?=#?\d{4,}))(?:\s*#?)(\d+))!<a..=\2">\1</a>!i
27 boldify = s/(^|\s)#(\d+)\b/ <b>#\2<\/b>/
28 '''
27
29
28 import re
30 import re
29 from mercurial.hgweb import hgweb_mod
31 from mercurial.hgweb import hgweb_mod
30 from mercurial import templatefilters, extensions
32 from mercurial import templatefilters, extensions
31 from mercurial.i18n import _
33 from mercurial.i18n import _
32
34
33 orig_escape = templatefilters.filters["escape"]
35 orig_escape = templatefilters.filters["escape"]
34
36
35 interhg_table = []
37 interhg_table = []
36
38
37 def interhg_escape(x):
39 def interhg_escape(x):
38 escstr = orig_escape(x)
40 escstr = orig_escape(x)
39 for regexp, format in interhg_table:
41 for regexp, format in interhg_table:
40 escstr = regexp.sub(format, escstr)
42 escstr = regexp.sub(format, escstr)
41 return escstr
43 return escstr
42
44
43 templatefilters.filters["escape"] = interhg_escape
45 templatefilters.filters["escape"] = interhg_escape
44
46
45 def interhg_refresh(orig, self):
47 def interhg_refresh(orig, self):
46 interhg_table[:] = []
48 interhg_table[:] = []
47 for key, pattern in self.repo.ui.configitems('interhg'):
49 for key, pattern in self.repo.ui.configitems('interhg'):
48 # grab the delimiter from the character after the "s"
50 # grab the delimiter from the character after the "s"
49 unesc = pattern[1]
51 unesc = pattern[1]
50 delim = re.escape(unesc)
52 delim = re.escape(unesc)
51
53
52 # identify portions of the pattern, taking care to avoid escaped
54 # identify portions of the pattern, taking care to avoid escaped
53 # delimiters. the replace format and flags are optional, but delimiters
55 # delimiters. the replace format and flags are optional, but delimiters
54 # are required.
56 # are required.
55 match = re.match(r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$'
57 match = re.match(r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$'
56 % (delim, delim, delim), pattern)
58 % (delim, delim, delim), pattern)
57 if not match:
59 if not match:
58 self.repo.ui.warn(_("interhg: invalid pattern for %s: %s\n")
60 self.repo.ui.warn(_("interhg: invalid pattern for %s: %s\n")
59 % (key, pattern))
61 % (key, pattern))
60 continue
62 continue
61
63
62 # we need to unescape the delimiter for regexp and format
64 # we need to unescape the delimiter for regexp and format
63 delim_re = re.compile(r'(?<!\\)\\%s' % delim)
65 delim_re = re.compile(r'(?<!\\)\\%s' % delim)
64 regexp = delim_re.sub(unesc, match.group(1))
66 regexp = delim_re.sub(unesc, match.group(1))
65 format = delim_re.sub(unesc, match.group(2))
67 format = delim_re.sub(unesc, match.group(2))
66
68
67 # the pattern allows for 6 regexp flags, so set them if necessary
69 # the pattern allows for 6 regexp flags, so set them if necessary
68 flagin = match.group(3)
70 flagin = match.group(3)
69 flags = 0
71 flags = 0
70 if flagin:
72 if flagin:
71 for flag in flagin.upper():
73 for flag in flagin.upper():
72 flags |= re.__dict__[flag]
74 flags |= re.__dict__[flag]
73
75
74 try:
76 try:
75 regexp = re.compile(regexp, flags)
77 regexp = re.compile(regexp, flags)
76 interhg_table.append((regexp, format))
78 interhg_table.append((regexp, format))
77 except re.error:
79 except re.error:
78 self.repo.ui.warn(_("interhg: invalid regexp for %s: %s\n")
80 self.repo.ui.warn(_("interhg: invalid regexp for %s: %s\n")
79 % (key, regexp))
81 % (key, regexp))
80 return orig(self)
82 return orig(self)
81
83
82 extensions.wrapfunction(hgweb_mod.hgweb, 'refresh', interhg_refresh)
84 extensions.wrapfunction(hgweb_mod.hgweb, 'refresh', interhg_refresh)
General Comments 0
You need to be logged in to leave comments. Login now