|
|
#!/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')"
|
|
|
|