Rev 3203: Fix 16 leaked tmp dirs. Probably indicates a lock handling problem with TransformPreview in file:///v/home/vila/src/bzr/bugs/123363-tmp-pollution/

Vincent Ladeuil v.ladeuil+lp at free.fr
Tue Jan 29 13:27:42 GMT 2008


At file:///v/home/vila/src/bzr/bugs/123363-tmp-pollution/

------------------------------------------------------------
revno: 3203
revision-id:v.ladeuil+lp at free.fr-20080129132736-nai2jpv02r2wltgc
parent: v.ladeuil+lp at free.fr-20080129115331-n7nl3ljtkepljzwi
committer: Vincent Ladeuil <v.ladeuil+lp at free.fr>
branch nick: 123363-tmp-pollution
timestamp: Tue 2008-01-29 14:27:36 +0100
message:
  Fix 16 leaked tmp dirs. Probably indicates a lock handling problem with TransformPreview
  
  * bzrlib/tests/test_transform.py:
  (addPreviewCleanup): New method cleaning the TransformPreview
  limbdodir leaked by the tests.
  
  * bzrlib/transform.py:
  (TransformPreview.__init__): Use a specific prefix for the
  limbodir to make leaks more obvious.
modified:
  bzrlib/tests/test_transform.py test_transaction.py-20060105172520-b3ffb3946550e6c4
  bzrlib/transform.py            transform.py-20060105172343-dd99e54394d91687
-------------- next part --------------
=== modified file 'bzrlib/tests/test_transform.py'
--- a/bzrlib/tests/test_transform.py	2008-01-17 02:16:39 +0000
+++ b/bzrlib/tests/test_transform.py	2008-01-29 13:27:36 +0000
@@ -22,6 +22,7 @@
 from bzrlib import (
     errors,
     generate_ids,
+    osutils,
     progress,
     revision as _mod_revision,
     symbol_versioning,
@@ -1832,20 +1833,31 @@
     def get_empty_preview(self):
         repository = self.make_repository('repo')
         tree = repository.revision_tree(_mod_revision.NULL_REVISION)
-        return TransformPreview(tree)
+        preview = TransformPreview(tree)
+        self.addPreviewCleanup(preview)
+        return preview
+
+    def addPreviewCleanup(self, preview):
+        # This probably indicates a problem in the TransformPreview
+        # API. finalize() can't be called in tests unsing addPreviewCleanup
+        # because no lock is held.
+        self.addCleanup(lambda: osutils.rmtree(preview._limbodir))
 
     def test_transform_preview(self):
         revision_tree = self.create_tree()
         preview = TransformPreview(revision_tree)
+        self.addPreviewCleanup(preview)
 
     def test_transform_preview_tree(self):
         revision_tree = self.create_tree()
         preview = TransformPreview(revision_tree)
+        self.addPreviewCleanup(preview)
         preview.get_preview_tree()
 
     def test_transform_new_file(self):
         revision_tree = self.create_tree()
         preview = TransformPreview(revision_tree)
+        self.addPreviewCleanup(preview)
         preview.new_file('file2', preview.root, 'content B\n', 'file2-id')
         preview_tree = preview.get_preview_tree()
         self.assertEqual(preview_tree.kind('file2-id'), 'file')
@@ -1855,6 +1867,7 @@
     def test_diff_preview_tree(self):
         revision_tree = self.create_tree()
         preview = TransformPreview(revision_tree)
+        self.addPreviewCleanup(preview)
         preview.new_file('file2', preview.root, 'content B\n', 'file2-id')
         preview_tree = preview.get_preview_tree()
         out = StringIO()
@@ -1867,6 +1880,7 @@
     def test_transform_conflicts(self):
         revision_tree = self.create_tree()
         preview = TransformPreview(revision_tree)
+        self.addPreviewCleanup(preview)
         preview.new_file('a', preview.root, 'content 2')
         resolve_conflicts(preview)
         trans_id = preview.trans_id_file_id('a-id')
@@ -1875,6 +1889,7 @@
     def get_tree_and_preview_tree(self):
         revision_tree = self.create_tree()
         preview = TransformPreview(revision_tree)
+        self.addPreviewCleanup(preview)
         a_trans_id = preview.trans_id_file_id('a-id')
         preview.delete_contents(a_trans_id)
         preview.create_file('b content', a_trans_id)
@@ -1932,6 +1947,7 @@
     def test_kind(self):
         revision_tree = self.create_tree()
         preview = TransformPreview(revision_tree)
+        self.addPreviewCleanup(preview)
         preview.new_file('file', preview.root, 'contents', 'file-id')
         preview.new_directory('directory', preview.root, 'dir-id')
         preview_tree = preview.get_preview_tree()

=== modified file 'bzrlib/transform.py'
--- a/bzrlib/transform.py	2008-01-16 13:09:30 +0000
+++ b/bzrlib/transform.py	2008-01-29 13:27:36 +0000
@@ -1321,7 +1321,7 @@
     """
 
     def __init__(self, tree, pb=DummyProgress(), case_sensitive=True):
-        limbodir = tempfile.mkdtemp()
+        limbodir = tempfile.mkdtemp(prefix='bzr-limbo-')
         TreeTransformBase.__init__(self, tree, limbodir, pb, case_sensitive)
 
     def canonical_path(self, path):



More information about the bazaar-commits mailing list