view tests/test-issue2137 @ 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 6bbe4886740e
children
line wrap: on
line source

#!/bin/sh

echo "% setup"

# create a little extension that has 3 side-effects:
#   1) ensure changelog data is not inlined
#   2) make revlog to use lazyparser
#   3) test that repo.lookup() works
# 1 and 2 are preconditions for the bug; 3 is the bug.
cat > commitwrapper.py <<EOF
from mercurial import extensions, node, revlog

def reposetup(ui, repo):
    def wrapcommit(orig, *args, **kwargs):
        result = orig(*args, **kwargs)
        tip1 = node.short(repo.changelog.tip())
        tip2 = node.short(repo.lookup(tip1))
        assert tip1 == tip2
        ui.write('new tip: %s\n' % tip1)
        return result

    extensions.wrapfunction(repo, 'commit', wrapcommit)

def extsetup(ui):
    revlog._maxinline = 8             # split out 00changelog.d early
    revlog._prereadsize = 8           # use revlog.lazyparser
EOF

cat >> $HGRCPATH <<EOF
[extensions]
commitwrapper = `pwd`/commitwrapper.py
EOF

hg init repo1
cd repo1
echo a > a
hg commit -A -m'add a with a long commit message to make the changelog a bit bigger'

echo ""
echo "% test that new changesets are visible to repo.lookup()"
echo a >> a
hg commit -m'one more commit to demonstrate the bug'
hg tip