Mercurial > hg
view tests/test-subrepo-svn.t @ 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 | d1ea16ca6520 |
children | affec9fb56ef |
line wrap: on
line source
$ "$TESTDIR/hghave" svn || exit 80 $ fix_path() > { > tr '\\' / > } $ escapedwd=`pwd | fix_path` SVN wants all paths to start with a slash. Unfortunately, Windows ones don't. Handle that. $ expr "$escapedwd" : "\/" > /dev/null $ if [ $? -ne 0 ]; then > escapedwd="/$escapedwd" > fi $ escapedwd=`python -c "import urllib, sys; sys.stdout.write(urllib.quote(sys.argv[1]))" "$escapedwd"` $ filterpath="s|$escapedwd|/root|" $ filteroutofdate='s/ in transaction.*/ is out of date/;s/Out of date: /File /' create subversion repo $ SVNREPO="file://$escapedwd/svn-repo" $ WCROOT="`pwd`/svn-wc" $ svnadmin create svn-repo $ svn co "$SVNREPO" svn-wc Checked out revision 0. $ cd svn-wc $ mkdir src $ echo alpha > src/alpha $ svn add src A src A src/alpha $ mkdir externals $ echo other > externals/other $ svn add externals A externals A externals/other $ svn ci -m 'Add alpha' Adding externals Adding externals/other Adding src Adding src/alpha Transmitting file data .. Committed revision 1. $ svn up At revision 1. $ echo "externals -r1 $SVNREPO/externals" > extdef $ svn propset -F extdef svn:externals src property 'svn:externals' set on 'src' $ svn ci -m 'Setting externals' Sending src Committed revision 2. $ cd .. create hg repo $ mkdir sub $ cd sub $ hg init t $ cd t first revision, no sub $ echo a > a $ hg ci -Am0 adding a add first svn sub with leading whitespaces $ echo "s = [svn] $SVNREPO/src" >> .hgsub $ svn co --quiet "$SVNREPO"/src s $ hg add .hgsub $ hg ci -m1 committing subrepository s debugsub $ hg debugsub | sed "$filterpath" path s source file:///root/svn-repo/src revision 2 change file in svn and hg, commit $ echo a >> a $ echo alpha >> s/alpha $ hg commit -m 'Message!' \ > | sed 's:Sending.*s/alpha:Sending s/alpha:g' committing subrepository s Sending s/alpha Transmitting file data . Committed revision 3. Fetching external item into '.*/s/externals' External at revision 1. At revision 3. $ hg debugsub | sed "$filterpath" path s source file:///root/svn-repo/src revision 3 $ echo a > s/a should be empty despite change to s/a $ hg st add a commit from svn $ cd "$WCROOT"/src $ svn up U alpha Fetching external item into 'externals' A externals/other Updated external to revision 1. Updated to revision 3. $ echo xyz >> alpha $ svn propset svn:mime-type 'text/xml' alpha property 'svn:mime-type' set on 'alpha' $ svn ci -m 'amend a from svn' Sending src/alpha Transmitting file data . Committed revision 4. $ cd ../../sub/t this commit from hg will fail $ echo zzz >> s/alpha $ hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate" committing subrepository s abort: svn: Commit failed (details follow): svn: File '/src/alpha' is out of date $ svn revert -q s/alpha this commit fails because of meta changes $ svn propset svn:mime-type 'text/html' s/alpha property 'svn:mime-type' set on 's/alpha' $ hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate" committing subrepository s abort: svn: Commit failed (details follow): svn: File '/src/alpha' is out of date $ svn revert -q s/alpha this commit fails because of externals changes $ echo zzz > s/externals/other $ hg ci -m 'amend externals from hg' committing subrepository s abort: cannot commit svn externals $ svn revert -q s/externals/other this commit fails because of externals meta changes $ svn propset svn:mime-type 'text/html' s/externals/other property 'svn:mime-type' set on 's/externals/other' $ hg ci -m 'amend externals from hg' committing subrepository s abort: cannot commit svn externals $ svn revert -q s/externals/other clone $ cd .. $ hg clone t tc | fix_path updating to branch default A tc/s/alpha U tc/s Fetching external item into 'tc/s/externals' A tc/s/externals/other Checked out external at revision 1. Checked out revision 3. 3 files updated, 0 files merged, 0 files removed, 0 files unresolved $ cd tc debugsub in clone $ hg debugsub | sed "$filterpath" path s source file:///root/svn-repo/src revision 3 verify subrepo is contained within the repo directory $ python -c "import os.path; print os.path.exists('s')" True