tests/test-mq-missingfiles
author Alexandre Fayolle <alexandre.fayolle@logilab.fr>
Thu, 23 Sep 2010 11:41:27 +0200
branchstable
changeset 12391 ca5fd84d62c6
parent 7506 abd2bc899d86
permissions -rwxr-xr-x
Fix memory leak when using hg commands over http repositories When using hg commands over an http repository in a long running process, a httphandler instance is leaked for each command, because of a loop handler.parent -> OpenerDirector and OpenerDirector.handlers -> handler which is not handled by Python's gc. Discussion on #mercurial concluded that removing the __del__ method solved the problem.

#!/bin/sh

# Test issue835:
# qpush fails immediately when patching a missing file, but
# remaining added files are still created empty which will
# trick a future qrefresh.

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

hg init normal
cd normal
python ../writelines.py b 10 'a\n'
hg ci -Am addb
echo a > a
python ../writelines.py b 2 'b\n' 10 'a\n' 2 'c\n'
echo c > c
hg add a c
hg qnew -f changeb
hg qpop
hg rm b
hg ci -Am rmb
echo % push patch with missing target
hg qpush
echo % display added files
cat a
cat c
echo % display rejections
cat b.rej
cd ..


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

hg init git
cd git
python ../writelines.py b 1 '\x00'
hg ci -Am addb
echo a > a
python ../writelines.py b 1 '\x01' 1 '\x00'
echo c > c
hg add a c
hg qnew -f changeb
hg qpop
hg rm b
hg ci -Am rmb
echo % push git patch with missing target
hg qpush 2>&1 | sed -e 's/b:.*/b: No such file or directory/'
hg st
echo % display added files
cat a
cat c
echo % display rejections
cat b.rej
cd ..

echo % test push creating directory during git copy or rename
hg init missingdir
cd missingdir
echo a > a
hg ci -Am adda
mkdir d
hg copy a d/a2
hg mv a d/a
hg qnew -g -f patch
hg qpop
hg qpush
cd ..