Mercurial > hg
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')"