diff options
author | btimby <btimby@67cdc799-7952-0410-af00-57a81ceafa0f> | 2012-04-23 19:58:07 +0000 |
---|---|---|
committer | btimby <btimby@67cdc799-7952-0410-af00-57a81ceafa0f> | 2012-04-23 19:58:07 +0000 |
commit | f5fca02f5de1eb7022d679eae8287ffc5f0453a6 (patch) | |
tree | 99f3c3e61d91e97507c25c0a8a7c8644da61ad07 /fs/contrib | |
parent | 82cfcf090ed7015cb254cfb39c8eb1bb406ad630 (diff) | |
download | pyfilesystem-git-f5fca02f5de1eb7022d679eae8287ffc5f0453a6.tar.gz |
Take advantage of MountFS.close(), allow turning auto_mount off.
Diffstat (limited to 'fs/contrib')
-rw-r--r-- | fs/contrib/archivefs.py | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/fs/contrib/archivefs.py b/fs/contrib/archivefs.py index c88d46c..be55e03 100644 --- a/fs/contrib/archivefs.py +++ b/fs/contrib/archivefs.py @@ -195,15 +195,15 @@ class ArchiveFS(FS): class ArchiveMountFS(mountfs.MountFS): '''A subclass of MountFS that automatically identifies archives. Once identified archives are mounted in place of the archive file.''' - def __init__(self, rootfs, **kwargs): - super(ArchiveMountFS, self).__init__(**kwargs) + def __init__(self, rootfs, auto_mount=True): + self.auto_mount = auto_mount + super(ArchiveMountFS, self).__init__(auto_close=True) self.rootfs = rootfs self.mountdir('/', rootfs) def __del__(self): - # Umount everything that we mounted. - for mountpoint in self.mount_tree.keys(): - self.unmount(mountpoint) + # Close automatically. + self.close() def ismount(self, path): try: @@ -213,20 +213,21 @@ class ArchiveMountFS(mountfs.MountFS): return type(object) is mountfs.MountFS.DirMount def _delegate(self, path): - for ppath in recursepath(path)[1:]: - # Don't mount again... - if self.ismount(ppath): - break - if libarchive.is_archive_name(ppath): - # It looks like an archive, try mounting it. - full_path = self.rootfs.getsyspath(ppath) - try: - self.mountdir(ppath, ArchiveFS(full_path, 'r')) - except: - pass # Must NOT have been an archive after all - # Stop recursing path, we support just one archive per path! - # No nested archives yet! - break + if self.auto_mount: + for ppath in recursepath(path)[1:]: + # Don't mount again... + if self.ismount(ppath): + break + if libarchive.is_archive_name(ppath): + # It looks like an archive, try mounting it. + full_path = self.rootfs.getsyspath(ppath) + try: + self.mountdir(ppath, ArchiveFS(full_path, 'r')) + except: + pass # Must NOT have been an archive after all + # Stop recursing path, we support just one archive per path! + # No nested archives yet! + break return super(ArchiveMountFS, self)._delegate(path) # TODO: probably need to override move(), movedir() and any other methods |