view tests/test-template-engine @ 11988:8380ed691df8

util: add an interpolate() function to for replacing multiple values util.interpolate can be used to replace multiple items in a string all at once (and optionally apply a function to the replacement), without worrying about recursing: >>> import util >>> s = '$foo, $spam' >>> util.interpolate(r'\$', { 'foo': 'bar', 'spam': 'eggs' }, s) 'bar, eggs' >>> util.interpolate(r'\$', { 'foo': 'spam', 'spam': 'foo' }, s) 'spam, foo' >>> util.interpolate(r'\$', { 'foo': 'spam', 'spam': 'foo' }, s, lambda s: s.upper()) 'SPAM, FOO' The patch also changes filemerge.py to use this new function.
author Steve Losh <steve@stevelosh.com>
date Wed, 18 Aug 2010 18:18:26 -0400
parents babc00a82c5e
children
line wrap: on
line source

#!/bin/sh

cat > engine.py << EOF

from mercurial import templater

class mytemplater(object):
    def __init__(self, loader, filters, defaults):
        self.loader = loader

    def process(self, t, map):
        tmpl = self.loader(t)
        for k, v in map.iteritems():
            if k in ('templ', 'ctx', 'repo', 'revcache', 'cache'):
                continue
            if hasattr(v, '__call__'):
                v = v(**map)
            v = templater.stringify(v)
            tmpl = tmpl.replace('{{%s}}' % k, v)
        yield tmpl

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