[PATCH] interhg: extension for hyperlink to BTS in changeset and changelog

Hideya 'OhaC' OHASHI ohachige at gmail.com
Mon Jul 2 10:21:13 CDT 2007


2007/6/25, Matt Mackall <mpm at selenic.com>:
> This should be a generic replacement facility. eg:
>
> # bug tracker
> pat1 = s/\b#(\d+)\b/<a href="http:\/\/bts/issue\1">#\1</a>/
>
> # wiki links
> pat2 = s/\b\[\w+\]\b/<a href="http:\/\/wiki/issue\1">#\1</a>/

I rewrited this extension.

# HG changeset patch
# User OHASHI Hideya <ohachige at gmail.com>
# Date 1183389232 -32400
# Node ID 163d26bc4911fe59d5b0dfd366ed354b2334e1a5
# Parent  cf8b8f62688aef733ca6f97f1b8833030da2d63c
interhg: This extension allows you to change changelog text like InterWiki.

diff -r cf8b8f62688a -r 163d26bc4911 hgext/interhg.py
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/hgext/interhg.py  Tue Jul 03 00:13:52 2007 +0900
@@ -0,0 +1,64 @@
+# interhg.py - interhg
+#
+# Copyright 2007 OHASHI Hideya <ohachige at 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


More information about the Mercurial-devel mailing list