view tests/test-subrepo-svn @ 12252:4481f8a93c7a stable

convert/darcs: handle non-ASCII metadata in darcs changelog (issue2354) Given a commit author or message with non-ASCII characters in a darcs repo, convert would raise a UnicodeEncodeError when adding changesets to the hg changelog. This happened because etree returns back unicode objects for any text it can't encode into ASCII. convert was passing these objects to changelog.add(), which would then attempt encoding.fromlocal() on them. This patch ensures converter_source.recode() is called on each piece of commit data returned by etree. (Also note that darcs is currently encoding agnostic and will print out whatever is in a patch's metadata byte-for-byte, even in the XML changelog.)
author Brodie Rao <brodie@bitheap.org>
date Fri, 10 Sep 2010 09:30:50 -0500
parents 0bf79efeaa20
children
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" \
    | sed 's:Sending.*s/alpha:Sending        s/alpha:g'
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')"