summaryrefslogtreecommitdiff
path: root/cache_manager.py
diff options
context:
space:
mode:
authorJohn Arbash Meinel <john@arbash-meinel.com>2009-12-11 08:55:04 -0600
committerJohn Arbash Meinel <john@arbash-meinel.com>2009-12-11 08:55:04 -0600
commitde9899249e5625c20f9287c4e36cb519eb504cf2 (patch)
tree323b44044e9951f7f4c21a2dcf9316da9a5c4c0b /cache_manager.py
parent79a478182a34c34bc983eb2474e002909ad101d6 (diff)
parent5ff6d451b0f69149b4fba0e98abdfbc8c584fa79 (diff)
downloadbzr-fastimport-de9899249e5625c20f9287c4e36cb519eb504cf2.tar.gz
Switch to using CommitBuilder
Rather than holding most of the logic ourselves.
Diffstat (limited to 'cache_manager.py')
-rw-r--r--cache_manager.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/cache_manager.py b/cache_manager.py
index f998b66..464403f 100644
--- a/cache_manager.py
+++ b/cache_manager.py
@@ -54,6 +54,34 @@ class _Cleanup(object):
shutils.rmtree(self.tempdir)
+
+class _Cleanup(object):
+ """This class makes sure we clean up when CacheManager goes away.
+
+ We use a helper class to ensure that we are never in a refcycle.
+ """
+
+ def __init__(self, disk_blobs):
+ self.disk_blobs = disk_blobs
+ self.tempdir = None
+ self.small_blobs = None
+
+ def __del__(self):
+ self.finalize()
+
+ def finalize(self):
+ if self.disk_blobs is not None:
+ for info in self.disk_blobs.itervalues():
+ if info[-1] is not None:
+ os.unlink(info[-1])
+ self.disk_blobs = None
+ if self.small_blobs is not None:
+ self.small_blobs.close()
+ self.small_blobs = None
+ if self.tempdir is not None:
+ shutils.rmtree(self.tempdir)
+
+
class CacheManager(object):
_small_blob_threshold = 25*1024