[PATCH 3 of 3] templater: make the templating engine pluggable to some extent
Dirkjan Ochtman
dirkjan at ochtman.nl
Mon Apr 6 10:44:32 CDT 2009
# HG changeset patch
# User Dirkjan Ochtman <dirkjan at ochtman.nl>
# Date 1239025294 -7200
# Node ID 5d100d5981b555f036d1b544e7b19928cd8d5660
# Parent e5273a9182109eb5489598ad25425659ec0b66e5
templater: make the templating engine pluggable to some extent
diff -r e5273a918210 -r 5d100d5981b5 mercurial/templater.py
--- a/mercurial/templater.py Mon Apr 06 16:28:30 2009 +0200
+++ b/mercurial/templater.py Mon Apr 06 15:41:34 2009 +0200
@@ -105,6 +105,8 @@
v = self.filters[f](v)
yield v
+engines = {'default': engine}
+
class templater(object):
def __init__(self, mapfile, filters={}, defaults={}, cache={},
@@ -121,6 +123,7 @@
self.filters.update(filters)
self.defaults = defaults
self.minchunk, self.maxchunk = minchunk, maxchunk
+ self.engines = {}
if not mapfile:
return
@@ -142,6 +145,7 @@
raise SyntaxError('%s:%s: %s' %
(mapfile, i, inst.args[0]))
else:
+ val = val.split(':', 1)[-1] # strip engine from path
self.map[key] = os.path.join(self.base, val)
else:
raise SyntaxError(_("%s:%s: parse error") % (mapfile, i))
@@ -160,7 +164,16 @@
return self.cache[t]
def __call__(self, t, **map):
- proc = engine(self.load, self.filters, self.defaults)
+
+ ttype = 'default'
+ if ':' in t:
+ ttype, t = s.split(':', 1)
+
+ proc = self.engines.get(ttype)
+ if proc is None:
+ proc = engines[ttype](self.load, self.filters, self.defaults)
+ self.engines[ttype] = proc
+
stream = proc.process(t, map)
if self.minchunk:
stream = util.increasingchunks(stream, min=self.minchunk,
diff -r e5273a918210 -r 5d100d5981b5 tests/test-template-engine
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-template-engine Mon Apr 06 15:41:34 2009 +0200
@@ -0,0 +1,33 @@
+#!/bin/sh
+
+cat > engine.py << EOF
+
+class mytemplater(object):
+ def __init__(self, load, filters, defaults):
+ self.loader = loader
+
+ def process(self, t, map):
+ tmpl = self.loader(t)
+ for k, v in map.iteritems():
+ tmpl = tmpl.replace('{%k}' % k, v)
+ yield tmpl
+
+from mercurial import templater
+templater.engines['my'] = mytemplater
+EOF
+
+hg init test
+echo '[extensions]' > test/.hg/hgrc
+echo "engine = $PWD/engine.py" >> test/.hg/hgrc
+
+cd test
+cat > mymap << EOF
+changeset = my:changeset.txt
+EOF
+
+cat > changeset.txt << EOF
+{rev} {node} {author}
+EOF
+
+hg ci -Ama
+hg log --style=./mymap
diff -r e5273a918210 -r 5d100d5981b5 tests/test-template-engine.out
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-template-engine.out Mon Apr 06 15:41:34 2009 +0200
@@ -0,0 +1,3 @@
+adding changeset.txt
+adding mymap
+0 307664789dc62d1fed343662ea29b0e77b17546b test
More information about the Mercurial-devel
mailing list