##// END OF EJS Templates
hgweb: extract web substitutions table generation to own function...
Gregory Szorc -
r26162:268b3977 default
parent child Browse files
Show More
@@ -6,7 +6,7 b''
6 6 # This software may be used and distributed according to the terms of the
7 7 # GNU General Public License version 2 or any later version.
8 8
9 import os, re
9 import os
10 10 from mercurial import ui, hg, hook, error, encoding, templater, util, repoview
11 11 from mercurial.templatefilters import websub
12 12 from mercurial.i18n import _
@@ -60,7 +60,6 b" def makebreadcrumb(url, prefix=''):"
60 60 urlel = os.path.dirname(urlel)
61 61 return reversed(breadcrumb)
62 62
63
64 63 class requestcontext(object):
65 64 """Holds state/context for an individual request.
66 65
@@ -163,7 +162,7 b' class hgweb(object):'
163 162 # web.templates in .hg/hgrc to get access to any file readable
164 163 # by the user running the CGI script
165 164 self.templatepath = self.config('web', 'templates', untrusted=False)
166 self.websubtable = self.loadwebsub()
165 self.websubtable = webutil.getwebsubs(r)
167 166
168 167 # The CGI scripts are often run by a user different from the repo owner.
169 168 # Trust the settings from the .hg/hgrc files by default.
@@ -369,47 +368,6 b' class hgweb(object):'
369 368 return ['']
370 369 return tmpl('error', error=inst.message)
371 370
372 def loadwebsub(self):
373 websubtable = []
374 websubdefs = self.repo.ui.configitems('websub')
375 # we must maintain interhg backwards compatibility
376 websubdefs += self.repo.ui.configitems('interhg')
377 for key, pattern in websubdefs:
378 # grab the delimiter from the character after the "s"
379 unesc = pattern[1]
380 delim = re.escape(unesc)
381
382 # identify portions of the pattern, taking care to avoid escaped
383 # delimiters. the replace format and flags are optional, but
384 # delimiters are required.
385 match = re.match(
386 r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$'
387 % (delim, delim, delim), pattern)
388 if not match:
389 self.repo.ui.warn(_("websub: invalid pattern for %s: %s\n")
390 % (key, pattern))
391 continue
392
393 # we need to unescape the delimiter for regexp and format
394 delim_re = re.compile(r'(?<!\\)\\%s' % delim)
395 regexp = delim_re.sub(unesc, match.group(1))
396 format = delim_re.sub(unesc, match.group(2))
397
398 # the pattern allows for 6 regexp flags, so set them if necessary
399 flagin = match.group(3)
400 flags = 0
401 if flagin:
402 for flag in flagin.upper():
403 flags |= re.__dict__[flag]
404
405 try:
406 regexp = re.compile(regexp, flags)
407 websubtable.append((regexp, format))
408 except re.error:
409 self.repo.ui.warn(_("websub: invalid regexp for %s: %s\n")
410 % (key, regexp))
411 return websubtable
412
413 371 def templater(self, req):
414 372
415 373 # determine scheme, port and server name
@@ -7,6 +7,7 b''
7 7 # GNU General Public License version 2 or any later version.
8 8
9 9 import os, copy
10 import re
10 11 from mercurial import match, patch, error, ui, util, pathutil, context
11 12 from mercurial.i18n import _
12 13 from mercurial.node import hex, nullid, short
@@ -540,3 +541,44 b' class wsgiui(ui.ui):'
540 541 # default termwidth breaks under mod_wsgi
541 542 def termwidth(self):
542 543 return 80
544
545 def getwebsubs(repo):
546 websubtable = []
547 websubdefs = repo.ui.configitems('websub')
548 # we must maintain interhg backwards compatibility
549 websubdefs += repo.ui.configitems('interhg')
550 for key, pattern in websubdefs:
551 # grab the delimiter from the character after the "s"
552 unesc = pattern[1]
553 delim = re.escape(unesc)
554
555 # identify portions of the pattern, taking care to avoid escaped
556 # delimiters. the replace format and flags are optional, but
557 # delimiters are required.
558 match = re.match(
559 r'^s%s(.+)(?:(?<=\\\\)|(?<!\\))%s(.*)%s([ilmsux])*$'
560 % (delim, delim, delim), pattern)
561 if not match:
562 repo.ui.warn(_("websub: invalid pattern for %s: %s\n")
563 % (key, pattern))
564 continue
565
566 # we need to unescape the delimiter for regexp and format
567 delim_re = re.compile(r'(?<!\\)\\%s' % delim)
568 regexp = delim_re.sub(unesc, match.group(1))
569 format = delim_re.sub(unesc, match.group(2))
570
571 # the pattern allows for 6 regexp flags, so set them if necessary
572 flagin = match.group(3)
573 flags = 0
574 if flagin:
575 for flag in flagin.upper():
576 flags |= re.__dict__[flag]
577
578 try:
579 regexp = re.compile(regexp, flags)
580 websubtable.append((regexp, format))
581 except re.error:
582 repo.ui.warn(_("websub: invalid regexp for %s: %s\n")
583 % (key, regexp))
584 return websubtable
General Comments 0
You need to be logged in to leave comments. Login now