aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorW. Trevor King <wking@drexel.edu>2009-10-05 21:00:34 -0400
committerW. Trevor King <wking@drexel.edu>2009-10-05 21:00:34 -0400
commitaa7546258e3f24bec3df2d8c4b203ed08e0acbce (patch)
treed93b3c47e74e62524238f6e7dea03acf735988de
parente35ccf95ea89b6e622202caae30d3b8cca3f2473 (diff)
downloadbugseverywhere-aa7546258e3f24bec3df2d8c4b203ed08e0acbce.tar.gz
Moved from *.__del__() to exclusive use of *.cleanup().
*.__del__() is run some unspecified time after the refcount for an object is reduced to zero. Sometimes that means that the rest of the world has already been deallocated, which makes life difficult, especially when Python won't attempt to construct stack traces inside *.__del__(). We were always (hopefully ;) calling del(*) anyway, so we just replace those calls with *.cleanup()
-rw-r--r--becommands/init.py2
-rw-r--r--libbe/arch.py4
-rw-r--r--libbe/bugdir.py8
-rw-r--r--libbe/utility.py5
-rw-r--r--libbe/vcs.py6
5 files changed, 10 insertions, 15 deletions
diff --git a/becommands/init.py b/becommands/init.py
index 1125d93..a6098ba 100644
--- a/becommands/init.py
+++ b/becommands/init.py
@@ -32,7 +32,7 @@ def execute(args, manipulate_encodings=True):
>>> execute(['--root', dir.path], manipulate_encodings=False)
No revision control detected.
Directory initialized.
- >>> del(dir)
+ >>> dir.cleanup()
>>> dir = utility.Dir()
>>> os.chdir(dir.path)
diff --git a/libbe/arch.py b/libbe/arch.py
index ab55172..c2d7cde 100644
--- a/libbe/arch.py
+++ b/libbe/arch.py
@@ -70,7 +70,7 @@ class Arch(vcs.VCS):
"""
Create a temporary Arch archive in the directory PATH. This
archive will be removed by
- __del__->cleanup->_vcs_cleanup->_remove_archive
+ cleanup->_vcs_cleanup->_remove_archive
"""
# http://regexps.srparish.net/tutorial-tla/new-archive.html#Creating_a_New_Archive
assert self._archive_name == None
@@ -112,7 +112,7 @@ class Arch(vcs.VCS):
"""
Create a temporary Arch project in the directory PATH. This
project will be removed by
- __del__->cleanup->_vcs_cleanup->_remove_project
+ cleanup->_vcs_cleanup->_remove_project
"""
# http://mwolson.org/projects/GettingStartedWithArch.html
# http://regexps.srparish.net/tutorial-tla/new-project.html#Starting_a_New_Project
diff --git a/libbe/bugdir.py b/libbe/bugdir.py
index c4f0f91..5324163 100644
--- a/libbe/bugdir.py
+++ b/libbe/bugdir.py
@@ -305,6 +305,7 @@ settings easy. Don't set this attribute. Set .vcs instead, and
self.root = self._find_root(root)
else:
if not os.path.exists(root):
+ self.root = None
raise NoRootEntry(root)
self.root = root
# get a temporary vcs until we've loaded settings
@@ -324,9 +325,6 @@ settings easy. Don't set this attribute. Set .vcs instead, and
self.vcs = vcs
self._setup_user_id(self.user_id)
- def __del__(self):
- self.cleanup()
-
def cleanup(self):
self.vcs.cleanup()
@@ -339,6 +337,7 @@ settings easy. Don't set this attribute. Set .vcs instead, and
then only if sink_to_existing_root == True.
"""
if not os.path.exists(path):
+ self.root = None
raise NoRootEntry(path)
versionfile=utility.search_parent_directories(path,
os.path.join(".be", "version"))
@@ -349,6 +348,7 @@ settings easy. Don't set this attribute. Set .vcs instead, and
else:
beroot = utility.search_parent_directories(path, ".be")
if beroot == None:
+ self.root = None
raise NoBugDir(path)
return beroot
@@ -671,7 +671,7 @@ class SimpleBugDir (BugDir):
assert_new_BugDir=assert_new_BugDir,
allow_vcs_init=vcs_init,
manipulate_encodings=False)
- if sync_with_disk == True: # postpone cleanup since dir.__del__() removes dir.
+ if sync_with_disk == True: # postpone cleanup since dir.cleanup() removes dir.
self._dir_ref = dir
bug_a = self.new_bug("a", summary="Bug A")
bug_a.creator = "John Doe <jdoe@example.com>"
diff --git a/libbe/utility.py b/libbe/utility.py
index aafbf8d..1e43516 100644
--- a/libbe/utility.py
+++ b/libbe/utility.py
@@ -58,13 +58,10 @@ class Dir (object):
"A temporary directory for testing use"
def __init__(self):
self.path = tempfile.mkdtemp(prefix="BEtest")
- self.rmtree = shutil.rmtree # save local reference for __del__
self.removed = False
- def __del__(self):
- self.cleanup()
def cleanup(self):
if self.removed == False:
- self.rmtree(self.path)
+ shutil.rmtree(self.path)
self.removed = True
def __call__(self):
return self.path
diff --git a/libbe/vcs.py b/libbe/vcs.py
index a1d3022..6975a83 100644
--- a/libbe/vcs.py
+++ b/libbe/vcs.py
@@ -50,7 +50,7 @@ def _get_matching_vcs(matchfn):
vcs = module.new()
if matchfn(vcs) == True:
return vcs
- del(vcs)
+ vcs.cleanup()
return VCS()
def vcs_by_name(vcs_name):
@@ -124,8 +124,6 @@ class VCS(object):
self._duplicateBasedir = None
self._duplicateDirname = None
self.encoding = encoding
- def __del__(self):
- self.cleanup()
def _vcs_help(self):
"""
@@ -674,7 +672,7 @@ class VCSTestCase(unittest.TestCase):
setup_vcs_test_fixtures(self)
def tearDown(self):
- del(self.vcs)
+ self.vcs.cleanup()
super(VCSTestCase, self).tearDown()
def full_path(self, rel_path):