Mercurial > hg
view tests/test-convert-cvs-detectmerge @ 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 | 56a5f80556f5 |
children |
line wrap: on
line source
#!/bin/sh # Test config convert.cvsps.mergefrom config setting. # (Should test similar mergeto feature, but I don't understand it yet.) # Requires builtin cvsps. "$TESTDIR/hghave" cvs || exit 80 CVSROOT=`pwd`/cvsrepo export CVSROOT # XXX copied from test-convert-cvs-synthetic cvscall() { echo cvs -f "$@" cvs -f "$@" } # output of 'cvs ci' varies unpredictably, so just discard it # XXX copied from test-convert-cvs-synthetic cvsci() { echo cvs -f ci "$@" cvs -f ci "$@" >/dev/null 2>&1 } # XXX copied from test-convert-cvs-synthetic filterpath() { eval "$@" | sed "s:$CVSROOT:*REPO*:g" } echo "[extensions]" >> $HGRCPATH echo "convert = " >> $HGRCPATH echo "graphlog = " >> $HGRCPATH echo "[convert]" >> $HGRCPATH echo "cvsps.cache=0" >> $HGRCPATH echo "cvsps.mergefrom=\[MERGE from (\S+)\]" >> $HGRCPATH echo % create cvs repository with one project mkdir cvsrepo filterpath cvscall -q -d "$CVSROOT" init mkdir cvsrepo/proj echo % populate cvs repository cvscall -Q co proj cd proj touch file1 cvscall -Q add file1 cvsci -m"add file1 on trunk" echo % create two release branches cvscall -q tag -b v1_0 cvscall -q tag -b v1_1 echo % modify file1 on branch v1_0 filterpath cvscall -Q update -rv1_0 echo "change" >> file1 cvsci -m"add text" echo % make unrelated change on v1_1 cvscall -Q update -rv1_1 touch unrelated cvscall -Q add unrelated cvsci -m"unrelated change" echo % merge file1 to v1_1 filterpath cvscall -Q update -jv1_0 cvsci -m"add text [MERGE from v1_0]" echo % merge change to trunk cvscall -Q update -A filterpath cvscall -Q update -jv1_1 cvsci -m"add text [MERGE from v1_1]" echo % non-merged change on trunk echo "foo" > file2 cvscall -Q add file2 cvsci -m"add file2 on trunk" file2 # this will create rev 1.3 echo % change on trunk to backport echo "backport me" >> file1 cvsci -m"add other text" file1 cvscall log file1 | sed -n '/^date: / d; /^revision /,$ p;' # XXX how many ways are there to spell "trunk" with CVS? echo % backport trunk change to v1_1 cvscall -Q update -rv1_1 filterpath cvscall -Q update -j1.2 -j1.3 file1 cvsci -m"add other text [MERGE from HEAD]" file1 set -e echo "% fix bug on v1_1, merge to trunk with error" cvscall -Q update -rv1_1 echo "merge forward" >> file1 cvscall -Q tag unmerged cvsci -m"fix file1" cvscall -Q update -A filterpath cvscall -Q update -junmerged -jv1_1 # note the typo in the commit log message cvsci -m"fix file1 [MERGE from v1-1]" cvs -Q tag -d unmerged set -e echo % convert to hg cd .. filterpath hg convert proj proj.hg echo % complete log template="{rev}: '{branches}' {desc}\n" hg -R proj.hg log --template="$template" echo % graphical log hg -R proj.hg glog --template="$template"