Mercurial > hg
diff mercurial/hgweb/webutil.py @ 26162:268b39770c28
hgweb: extract web substitutions table generation to own function
It doesn't use any state in hgweb except for the repo instance.
Move it to a standalone function.
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Sat, 22 Aug 2015 15:40:33 -0700 |
parents | a103ecb8a04a |
children | 41957e50e109 |
line wrap: on
line diff
--- a/mercurial/hgweb/webutil.py Sat Aug 22 15:32:16 2015 -0700 +++ b/mercurial/hgweb/webutil.py Sat Aug 22 15:40:33 2015 -0700 @@ -7,6 +7,7 @@ # GNU General Public License version 2 or any later version. import os, copy +import re from mercurial import match, patch, error, ui, util, pathutil, context from mercurial.i18n import _ from mercurial.node import hex, nullid, short @@ -540,3 +541,44 @@ # default termwidth breaks under mod_wsgi def termwidth(self): return 80 + +def getwebsubs(repo): + websubtable = [] + websubdefs = repo.ui.configitems('websub') + # we must maintain interhg backwards compatibility + websubdefs += repo.ui.configitems('interhg') + for key, pattern in websubdefs: + # grab the delimiter from the character after the "s" + unesc = pattern[1] + delim = re.escape(unesc) + + # identify portions of the pattern, taking care to avoid escaped + # delimiters. the replace format and flags are optional, but + # delimiters are required. + match = re.match( + r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$' + % (delim, delim, delim), pattern) + if not match: + repo.ui.warn(_("websub: invalid pattern for %s: %s\n") + % (key, pattern)) + continue + + # we need to unescape the delimiter for regexp and format + delim_re = re.compile(r'(?<!\\)\\%s' % delim) + regexp = delim_re.sub(unesc, match.group(1)) + format = delim_re.sub(unesc, match.group(2)) + + # the pattern allows for 6 regexp flags, so set them if necessary + flagin = match.group(3) + flags = 0 + if flagin: + for flag in flagin.upper(): + flags |= re.__dict__[flag] + + try: + regexp = re.compile(regexp, flags) + websubtable.append((regexp, format)) + except re.error: + repo.ui.warn(_("websub: invalid regexp for %s: %s\n") + % (key, regexp)) + return websubtable