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
. $TESTDIR/helpers.sh
createrepo() {
rm -rf repo
hg init repo
cd repo
echo "a" > a
hg commit -d '0 0' -A -m 'A'
hg branch branch1
hg commit -d '1 0' -m 'Branch1'
echo "b" > b
hg commit -A -d '2 0' -m 'B'
hg up 0
hg branch branch2
hg commit -d '3 0' -m 'Branch2'
echo "c" > C
hg commit -A -d '4 0' -m 'C'
hg up 2
hg branch -f branch2
echo "d" > d
hg commit -A -d '5 0' -m 'D'
echo "e" > e
hg commit -A -d '6 0' -m 'E'
hg update default
hg branch branch3
hg commit -d '7 0' -m 'Branch3'
echo "f" > f
hg commit -A -d '8 0' -m 'F'
}
echo
createrepo > /dev/null 2>&1
hg --config extensions.hgext.graphlog= glog --template '{rev}:{node|short} {desc} branch: {branches}\n'
echo
echo '% Branches'
hg branches
echo
echo '% Heads'
hg heads --template '{rev}:{node|short} {desc} branch: {branches}\n'
echo
echo '% Rebase part of branch2 (5-6) onto branch3 (8)'
hg --config extensions.hgext.rebase= rebase --detach -s 5 -d 8 | hidebackup
echo
echo '% Branches'
hg branches
echo
echo '% Heads'
hg heads --template '{rev}:{node|short} {desc} branch: {branches}\n'
echo
hg --config extensions.hgext.graphlog= glog --template '{rev}:{node|short} {desc} branch: {branches}\n'
echo
echo '% Rebase head of branch3 (8) onto branch2 (6)'
createrepo > /dev/null 2>&1
hg --config extensions.hgext.graphlog= glog --template '{rev}:{node|short} {desc} branch: {branches}\n'
hg --config extensions.hgext.rebase= rebase --detach -s 8 -d 6 | hidebackup
echo
echo '% Branches'
hg branches
echo
echo '% Heads'
hg heads --template '{rev}:{node|short} {desc} branch: {branches}\n'
echo
hg --config extensions.hgext.graphlog= glog --template '{rev}:{node|short} {desc} branch: {branches}\n'
hg verify -q
echo
echo '% Rebase entire branch3 (7-8) onto branch2 (6)'
createrepo > /dev/null 2>&1
hg --config extensions.hgext.graphlog= glog --template '{rev}:{node|short} {desc} branch: {branches}\n'
hg --config extensions.hgext.rebase= rebase --detach -s 7 -d 6 | hidebackup
echo
echo '% Branches'
hg branches
echo
echo '% Heads'
hg heads --template '{rev}:{node|short} {desc} branch: {branches}\n'
echo
hg --config extensions.hgext.graphlog= glog --template '{rev}:{node|short} {desc} branch: {branches}\n'
hg verify -q