Mercurial > hg
view tests/test-patchbomb @ 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 | f66ca4431eb9 |
children |
line wrap: on
line source
#!/bin/sh fixheaders() { sed -e 's/\(Message-Id:.*@\).*/\1/' \ -e 's/\(In-Reply-To:.*@\).*/\1/' \ -e 's/\(References:.*@\).*/\1/' \ -e 's/\(User-Agent:.*\)\/.*/\1/' \ -e 's/===.*/===/' } echo "[extensions]" >> $HGRCPATH echo "patchbomb=" >> $HGRCPATH hg init t cd t echo a > a hg commit -Ama -d '1 0' hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -r tip | \ fixheaders echo b > b hg commit -Amb -d '2 0' hg email --date '1970-1-1 0:2' -n -f quux -t foo -c bar -s test -r 0:tip | \ fixheaders hg email -m test.mbox -f quux -t foo -c bar -s test 0:tip cd .. hg clone -q t t2 cd t2 echo c > c hg commit -Amc -d '3 0' cat > description <<EOF a multiline description EOF echo "% test bundle and description" hg email --date '1970-1-1 0:3' -n -f quux -t foo \ -c bar -s test -r tip -b --desc description | \ fixheaders echo "% utf-8 patch" python -c 'fp = open("utf", "wb"); fp.write("h\xC3\xB6mma!\n"); fp.close();' hg commit -A -d '4 0' -m 'charset=utf-8; content-transfer-encoding: base64' echo "% no mime encoding for email --test" hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \ fixheaders > mailtest echo "% md5sum of 8-bit output" $TESTDIR/md5sum.py mailtest rm mailtest echo "% mime encoded mbox (base64)" hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox cat mbox | fixheaders rm mbox echo "% mime encoded mbox (quoted-printable)" python -c 'fp = open("qp", "wb"); fp.write("%s\nfoo\n\nbar\n" % \ ("x" * 1024)); fp.close();' hg commit -A -d '4 0' -m \ 'charset=utf-8; content-transfer-encoding: quoted-printable' echo "% no mime encoding for email --test" hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -n | \ fixheaders > mailtest echo "% md5sum of qp output" $TESTDIR/md5sum.py mailtest rm mailtest echo "% mime encoded mbox (quoted-printable)" hg email --date '1970-1-1 0:4' -f quux -t foo -c bar -r tip -m mbox cat mbox | fixheaders rm mbox echo "% iso-8859-1 patch" python -c 'fp = open("isolatin", "wb"); fp.write("h\xF6mma!\n"); fp.close();' hg commit -A -d '5 0' -m 'charset=us-ascii; content-transfer-encoding: 8bit' echo "% fake ascii mbox" hg email --date '1970-1-1 0:5' -f quux -t foo -c bar -r tip -m mbox fixheaders < mbox > mboxfix echo "% md5sum of 8-bit output" $TESTDIR/md5sum.py mboxfix echo "% test diffstat for single patch" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y -r 2 | \ fixheaders echo "% test diffstat for multiple patches" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -d -y \ -r 0:1 | fixheaders echo "% test inline for single patch" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \ fixheaders echo "% test inline for single patch (quoted-printable)" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 4 | \ fixheaders echo "% test inline for multiple patches" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i \ -r 0:1 -r 4 | fixheaders echo "% test attach for single patch" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 2 | \ fixheaders echo "% test attach for single patch (quoted-printable)" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a -r 4 | \ fixheaders echo "% test attach for multiple patches" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -a \ -r 0:1 -r 4 | fixheaders echo "% test intro for single patch" hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \ -r 2 | fixheaders echo "% test --desc without --intro for a single patch" echo foo > intro.text hg email --date '1970-1-1 0:1' -n --desc intro.text -f quux -t foo -c bar \ -s test -r 2 | fixheaders echo "% test intro for multiple patches" hg email --date '1970-1-1 0:1' -n --intro -f quux -t foo -c bar -s test \ -r 0:1 | fixheaders echo "% test reply-to via config" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -r 2 \ --config patchbomb.reply-to='baz@example.com' | fixheaders echo "% test reply-to via command line" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -r 2 \ --reply-to baz --reply-to fred | fixheaders echo "% tagging csets" hg tag -r0 zero zero.foo hg tag -r1 one one.patch hg tag -r2 two two.diff echo "% test inline for single named patch" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 2 | \ fixheaders echo "% test inline for multiple named/unnamed patches" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar -s test -i -r 0:1 | \ fixheaders echo "% test inreplyto" hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \ -r tip | fixheaders hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \ -r 0:1 | fixheaders hg email --date '1970-1-1 0:1' -n -f quux -t foo -c bar --in-reply-to baz \ -s test -r 0:1 | fixheaders echo "% test single flag for single patch" hg email --date '1970-1-1 0:1' -n --flag fooFlag -f quux -t foo -c bar -s test \ -r 2 | fixheaders echo "% test single flag for multiple patches" hg email --date '1970-1-1 0:1' -n --flag fooFlag -f quux -t foo -c bar -s test \ -r 0:1 | fixheaders echo "% test mutiple flags for single patch" hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \ -c bar -s test -r 2 | fixheaders echo "% test multiple flags for multiple patches" hg email --date '1970-1-1 0:1' -n --flag fooFlag --flag barFlag -f quux -t foo \ -c bar -s test -r 0:1 | fixheaders echo "% test multi-address parsing" hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t 'spam<spam><eggs>' \ -t toast -c 'foo,bar@example.com' -c '"A, B <>" <a@example.com>' -s test -r 0 \ --config email.bcc='"Quux, A." <quux>' cat tmp.mbox | fixheaders echo "% test multi-byte domain parsing" UUML=`python -c 'import sys; sys.stdout.write("\374")'` HGENCODING=iso-8859-1 export HGENCODING hg email --date '1980-1-1 0:1' -m tmp.mbox -f quux -t "bar@${UUML}nicode.com" \ -s test -r 0 cat tmp.mbox | fixheaders echo "% test outgoing" hg up 1 hg branch test echo d > d hg add d hg ci -md -d '4 0' hg email --date '1980-1-1 0:1' -n -t foo -s test -o ../t | fixheaders echo "% dest#branch URIs" hg email --date '1980-1-1 0:1' -n -t foo -s test -o ../t#test | fixheaders