Mercurial > hg
changeset 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 | 16d54bbdbf89 |
children | 84511b1d9724 |
files | mercurial/hgweb/hgweb_mod.py mercurial/hgweb/webutil.py |
diffstat | 2 files changed, 44 insertions(+), 44 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hgweb/hgweb_mod.py Sat Aug 22 15:32:16 2015 -0700 +++ b/mercurial/hgweb/hgweb_mod.py Sat Aug 22 15:40:33 2015 -0700 @@ -6,7 +6,7 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -import os, re +import os from mercurial import ui, hg, hook, error, encoding, templater, util, repoview from mercurial.templatefilters import websub from mercurial.i18n import _ @@ -60,7 +60,6 @@ urlel = os.path.dirname(urlel) return reversed(breadcrumb) - class requestcontext(object): """Holds state/context for an individual request. @@ -163,7 +162,7 @@ # web.templates in .hg/hgrc to get access to any file readable # by the user running the CGI script self.templatepath = self.config('web', 'templates', untrusted=False) - self.websubtable = self.loadwebsub() + self.websubtable = webutil.getwebsubs(r) # The CGI scripts are often run by a user different from the repo owner. # Trust the settings from the .hg/hgrc files by default. @@ -369,47 +368,6 @@ return [''] return tmpl('error', error=inst.message) - def loadwebsub(self): - websubtable = [] - websubdefs = self.repo.ui.configitems('websub') - # we must maintain interhg backwards compatibility - websubdefs += self.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: - self.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: - self.repo.ui.warn(_("websub: invalid regexp for %s: %s\n") - % (key, regexp)) - return websubtable - def templater(self, req): # determine scheme, port and server name
--- 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