Mercurial > hg-stable
view tests/test-patchbomb @ 10135:9a4034b630c4 stable
patch: better handling of sequence of offset patch hunks (issue1941)
The built-in patch implementation applied the hunks to the wrong lines of the
file if the file in the repo has been modified to skew the patch line numbers
and the file contains repetitive sequences of lines.
author | Greg Onufer <gonufer@jazzhaiku.com> |
---|---|
date | Wed, 09 Dec 2009 16:56:00 -0800 |
parents | 585f51f8b5f0 |
children | 15fbbc939373 b190a8125b43 |
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 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 "% 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-byte domain parsing" UUML=`printf '\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