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.
--- 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