Rev 2: Also implement rename() handling, so that we make sure to close open handles when they are being modified. in http://bzr.arbash-meinel.com/plugins/mmap_readv

John Arbash Meinel john at arbash-meinel.com
Fri Feb 6 15:29:14 GMT 2009


At http://bzr.arbash-meinel.com/plugins/mmap_readv

------------------------------------------------------------
revno: 2
revision-id: john at arbash-meinel.com-20090206152908-zt2dvpddq525k7l1
parent: john at arbash-meinel.com-20090206152240-wz21d1l122su5dj9
committer: John Arbash Meinel <john at arbash-meinel.com>
branch nick: mmap_readv
timestamp: Fri 2009-02-06 09:29:08 -0600
message:
  Also implement rename() handling, so that we make sure to close open handles when they are being modified.
-------------- next part --------------
=== modified file '__init__.py'
--- a/__init__.py	2009-02-06 15:22:40 +0000
+++ b/__init__.py	2009-02-06 15:29:08 +0000
@@ -90,8 +90,28 @@
                                              actual=len(bytes))
             yield start, bytes
 
-
-# transport.register_transport('file://', MMapLocalTransport)
+    def rename(self, rel_from, rel_to):
+        """See LocalTransport.rename"""
+        # This only differs because we need to make sure we don't hold any file
+        # handles open
+        canonical_url = self.abspath(rel_from)
+        if canonical_url in _mmap_cache:
+            mapped = _mmap_cache.pop(canonical_url)
+            mapped.close()
+        return super(MMapLocalTransport, self).rename(rel_from, rel_to)
+
+    def move(self, rel_from, rel_to):
+        """See LocalTransport.move"""
+        # This only differs because we need to make sure we don't hold any file
+        # handles open
+        canonical_url = self.abspath(rel_from)
+        if canonical_url in _mmap_cache:
+            mapped = _mmap_cache.pop(canonical_url)
+            mapped.close()
+        return super(MMapLocalTransport, self).move(rel_from, rel_to)
+
+
+transport.register_transport('file://', MMapLocalTransport)
 
 class MMapLocalURLServer(local.LocalURLServer):
 



More information about the bazaar-commits mailing list