# interhg.py - interhg # # Copyright 2007 OHASHI Hideya # # 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+)/ issue\1<\/a> / # # You can add patterns to use pat2, pat3, ... # For exapmle. # # pat2 = s/(^|\s)#(\d+)\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