|
|
# interhg.py - interhg
|
|
|
#
|
|
|
# Copyright 2007 OHASHI Hideya <ohachige@gmail.com>
|
|
|
#
|
|
|
# This software may be used and distributed according to the terms
|
|
|
# of the GNU General Public License, incorporated herein by reference.
|
|
|
#
|
|
|
# The `interhg' Mercurial extension allows you to change changelog and
|
|
|
# summary text just like InterWiki way.
|
|
|
#
|
|
|
# To enable this extension:
|
|
|
#
|
|
|
# [extensions]
|
|
|
# interhg =
|
|
|
#
|
|
|
# This is an example to link to a bug tracking system.
|
|
|
#
|
|
|
# [interhg]
|
|
|
# pat1 = s/issue(\d+)/ <a href="http:\/\/bts\/issue\1">issue\1<\/a> /
|
|
|
#
|
|
|
# You can add patterns to use pat2, pat3, ...
|
|
|
# For exapmle.
|
|
|
#
|
|
|
# pat2 = s/(^|\s)#(\d+)\b/ <b>#\2<\/b> /
|
|
|
|
|
|
import re
|
|
|
from mercurial.hgweb import hgweb_mod
|
|
|
from mercurial import templater
|
|
|
|
|
|
orig_escape = templater.common_filters["escape"]
|
|
|
|
|
|
interhg_table = []
|
|
|
|
|
|
def interhg_escape(x):
|
|
|
escstr = orig_escape(x)
|
|
|
for pat in interhg_table:
|
|
|
regexp = pat[0]
|
|
|
format = pat[1]
|
|
|
escstr = regexp.sub(format, escstr)
|
|
|
return escstr
|
|
|
|
|
|
templater.common_filters["escape"] = interhg_escape
|
|
|
|
|
|
orig_refresh = hgweb_mod.hgweb.refresh
|
|
|
|
|
|
def interhg_refresh(self):
|
|
|
interhg_table[:] = []
|
|
|
num = 1
|
|
|
while True:
|
|
|
key = 'pat%d' % num
|
|
|
pat = self.config('interhg', key)
|
|
|
if pat == None:
|
|
|
break
|
|
|
pat = pat[2:-1]
|
|
|
span = re.search(r'[^\\]/', pat).span()
|
|
|
regexp = pat[:span[0] + 1]
|
|
|
format = pat[span[1]:]
|
|
|
format = re.sub(r'\\/', '/', format)
|
|
|
regexp = re.compile(regexp)
|
|
|
interhg_table.append((regexp, format))
|
|
|
num += 1
|
|
|
return orig_refresh(self)
|
|
|
|
|
|
hgweb_mod.hgweb.refresh = interhg_refresh
|
|
|
|