view tests/test-mq-qimport @ 12717:89df79b3c011 stable

convert/darcs: support changelogs with bytes 0x7F-0xFF (issue2411) This is a followup to 4481f8a93c7a, which only fixed the conversion of patches with UTF-8 metadata. This patch allows a changelog to have any bytes with values 0x7F-0xFF. It parses the XML changelog as Latin-1 and uses converter_source.recode() to decode the data as UTF-8/Latin-1. Caveats: - Since the convert extension doesn't provide any way to specify the source encoding, users are still limited to UTF-8 and Latin-1. - etree will still complain if the changelog has bytes with values 0x00-0x19. XML only allows printable characters.
author Brodie Rao <brodie@bitheap.org>
date Fri, 01 Oct 2010 10:15:04 -0500
parents c52057614c72
children da0b9109186d
line wrap: on
line source

#!/bin/sh

cat > writelines.py <<EOF
import sys
path = sys.argv[1]
args = sys.argv[2:]
assert (len(args) % 2) == 0

f = file(path, 'wb')
for i in xrange(len(args)/2):
   count, s = args[2*i:2*i+2]
   count = int(count)
   s = s.decode('string_escape')
   f.write(s*count)
f.close()

EOF

echo "[extensions]" >> $HGRCPATH
echo "mq=" >> $HGRCPATH
echo "[diff]" >> $HGRCPATH
echo "git=1" >> $HGRCPATH

hg init repo
cd repo

echo % qimport non-existing-file
hg qimport non-existing-file

echo % import email
hg qimport --push -n email - <<EOF
From: Username in email <test@example.net>
Subject: [PATCH] Message in email
Date: Fri, 02 Jan 1970 00:00:00 +0000

Text before patch.

# HG changeset patch
# User Username in patch <test@example.net>
# Date 0 0
# Node ID 1a706973a7d84cb549823634a821d9bdf21c6220
# Parent  0000000000000000000000000000000000000000
First line of commit message.

More text in commit message.
--- confuse the diff detection

diff --git a/x b/x
new file mode 100644
--- /dev/null
+++ b/x
@@ -0,0 +1,1 @@
+new file
Text after patch.

EOF

echo % hg tip -v
hg tip -v
hg qpop
hg qdelete email

echo % import URL
echo foo >> foo
hg add foo
hg diff > $HGTMP/url.diff
hg revert --no-backup foo
rm foo
# Under unix: file:///foobar/blah
# Under windows: file:///c:/foobar/blah
patchurl=`echo "$HGTMP"/url.diff | tr '\\\\' /`
expr "$patchurl" : "\/" > /dev/null
if [ $? -ne 0 ]; then
    patchurl="/$patchurl"
fi
hg qimport file://"$patchurl"
hg qun

echo % import patch that already exists
echo foo2 >> foo
hg add foo
hg diff > ../url.diff
hg revert --no-backup foo
rm foo
hg qimport ../url.diff
hg qpush
cat foo
hg qpop
echo % qimport -f
hg qimport -f ../url.diff
hg qpush
cat foo
hg qpop

echo % build diff with CRLF
python ../writelines.py b 5 'a\n' 5 'a\r\n'
hg ci -Am addb
python ../writelines.py b 2 'a\n' 10 'b\n' 2 'a\r\n'
hg diff > b.diff
hg up -C
echo % qimport CRLF diff
hg qimport b.diff
hg qpush

echo % try to import --push
echo another >> b
hg diff > another.diff
hg up -C
hg qimport --push another.diff
hg qfin -a
hg qimport -rtip -P