Do not use osutil.c with python 2.4 and Windows (
issue1364)
Windows python 2.4 os.stat() reports times including DST offset, while osutil.c
reports the correct value, which makes status() systematically compare files
content. This bug is fixed in python 2.5. Using osutil.py instead of osutil.c
is 4x times slower on large repositories but current code is completely
unusable. Given few people are likely to use python 2.4 on Windows this
solution was considered a good trade-off compared to more invasive solutions
trying to address the offset issue.
#!/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.
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