view tests/test-subrepo-svn @ 11059:ef4aa90b1e58

Move 'findrenames' code into its own file. The next few patches will increase the size of the "findrenames" functionality. This patch simply moves the function into its own file to avoid clutter building up in 'cmdutil.py'.
author David Greenaway <hg-dev@davidgreenaway.com>
date Sat, 03 Apr 2010 11:58:16 +1100
parents 33119d0252c1
children 0bf79efeaa20
line wrap: on
line source

#!/bin/sh

"$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 /'
filterexternal="s|Fetching external item into '.*/s/externals'|Fetching external item into 's/externals'|g"

echo % create subversion repo

SVNREPO="file://$escapedwd/svn-repo"
WCROOT="`pwd`/svn-wc"
svnadmin create svn-repo
svn co "$SVNREPO" svn-wc
cd svn-wc
mkdir src
echo alpha > src/alpha
svn add src
mkdir externals
echo other > externals/other
svn add externals
svn ci -m 'Add alpha'
svn up
cat > extdef <<EOF
externals -r1 $SVNREPO/externals
EOF
svn propset -F extdef svn:externals src
svn ci -m 'Setting externals'
cd ..

echo % create hg repo
mkdir sub
cd sub
hg init t
cd t

echo % first revision, no sub
echo a > a
hg ci -Am0

echo % 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
echo % debugsub
hg debugsub | sed "$filterpath"

echo
echo % change file in svn and hg, commit
echo a >> a
echo alpha >> s/alpha
hg commit -m 'Message!' | sed "$filterexternal"
hg debugsub | sed "$filterpath"

echo
echo a > s/a
echo % should be empty despite change to s/a
hg st

echo
echo % add a commit from svn
cd "$WCROOT"/src
svn up
echo xyz >> alpha
svn propset svn:mime-type 'text/xml' alpha
svn ci -m 'amend a from svn'
cd ../../sub/t

echo % this commit from hg will fail
echo zzz >> s/alpha
hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate"
svn revert -q s/alpha

echo % this commit fails because of meta changes
svn propset svn:mime-type 'text/html' s/alpha
hg ci -m 'amend alpha from hg' 2>&1 | sed "$filteroutofdate"
svn revert -q s/alpha

echo % this commit fails because of externals changes
echo zzz > s/externals/other
hg ci -m 'amend externals from hg'
svn revert -q s/externals/other

echo % this commit fails because of externals meta changes
svn propset svn:mime-type 'text/html' s/externals/other
hg ci -m 'amend externals from hg'
svn revert -q s/externals/other

echo
echo % clone
cd ..
hg clone t tc | fix_path
cd tc
echo % debugsub in clone
hg debugsub | sed "$filterpath"

echo % verify subrepo is contained within the repo directory
python -c "import os.path; print os.path.exists('s')"