Make sure bundlerepo doesn't leak temp files (
issue2491)
Add empty repository.close() and call it in dispatch.
Remove bundlerepository.__del__(), merging it into bundlerepository.close(),
which overrides repository.close().
http://docs.python.org/reference/datamodel.html says:
"It is not guaranteed that __del__() methods are called for objects that
still exist when the interpreter exits."
--- a/mercurial/bundlerepo.py Fri Feb 11 19:32:49 2011 +0100
+++ b/mercurial/bundlerepo.py Sat Feb 12 10:58:11 2011 +0100
@@ -251,11 +251,6 @@
self.bundle.close()
if self.tempfile is not None:
os.unlink(self.tempfile)
-
- def __del__(self):
- del self.bundle
- if self.tempfile is not None:
- os.unlink(self.tempfile)
if self._tempparent:
shutil.rmtree(self._tempparent, True)
--- a/mercurial/dispatch.py Fri Feb 11 19:32:49 2011 +0100
+++ b/mercurial/dispatch.py Sat Feb 12 10:58:11 2011 +0100
@@ -589,8 +589,12 @@
msg = ' '.join(' ' in a and repr(a) or a for a in fullargs)
ui.log("command", msg + "\n")
d = lambda: util.checksignature(func)(ui, *args, **cmdoptions)
- return runcommand(lui, repo, cmd, fullargs, ui, options, d,
- cmdpats, cmdoptions)
+ try:
+ return runcommand(lui, repo, cmd, fullargs, ui, options, d,
+ cmdpats, cmdoptions)
+ finally:
+ if repo:
+ repo.close()
def _runcommand(ui, options, cmd, cmdfunc):
def checkargs():
--- a/mercurial/repo.py Fri Feb 11 19:32:49 2011 +0100
+++ b/mercurial/repo.py Sat Feb 12 10:58:11 2011 +0100
@@ -35,3 +35,6 @@
def cancopy(self):
return self.local()
+
+ def close(self):
+ pass
--- a/tests/test-bundle.t Fri Feb 11 19:32:49 2011 +0100
+++ b/tests/test-bundle.t Sat Feb 12 10:58:11 2011 +0100
@@ -188,6 +188,13 @@
date: Thu Jan 01 00:00:00 1970 +0000
summary: 0.0
+Make sure bundlerepo doesn't leak tempfiles (issue2491)
+
+ $ ls .hg
+ 00changelog.i
+ cache
+ requires
+ store
Pull ../full.hg into empty (with hook)