hgext/interhg.py
author Bryan O'Sullivan <bos@serpentine.com>
Thu, 26 Jul 2007 13:34:36 -0700
changeset 5012 be25decfdb13
parent 4817 0ac6b537893f
child 5288 18091102a633
permissions -rw-r--r--
convert: make commit constructor clearer and less magical

# 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