فهرست منبع

use the RepositoryCache context manager also in fuse code

Thomas Waldmann 9 سال پیش
والد
کامیت
5ec2a3a49b
2فایلهای تغییر یافته به همراه16 افزوده شده و 17 حذف شده
  1. 14 13
      borg/archiver.py
  2. 2 4
      borg/fuse.py

+ 14 - 13
borg/archiver.py

@@ -30,7 +30,7 @@ from .repository import Repository
 from .cache import Cache
 from .key import key_creator
 from .archive import Archive, ArchiveChecker, CHUNKER_PARAMS
-from .remote import RepositoryServer, RemoteRepository
+from .remote import RepositoryServer, RemoteRepository, cache_if_remote
 
 has_lchflags = hasattr(os, 'lchflags')
 
@@ -380,18 +380,19 @@ class Archiver:
 
         repository = self.open_repository(args)
         try:
-            manifest, key = Manifest.load(repository)
-            if args.location.archive:
-                archive = Archive(repository, key, manifest, args.location.archive)
-            else:
-                archive = None
-            operations = FuseOperations(key, repository, manifest, archive)
-            logger.info("Mounting filesystem")
-            try:
-                operations.mount(args.mountpoint, args.options, args.foreground)
-            except RuntimeError:
-                # Relevant error message already printed to stderr by fuse
-                self.exit_code = EXIT_ERROR
+            with cache_if_remote(repository) as cached_repo:
+                manifest, key = Manifest.load(repository)
+                if args.location.archive:
+                    archive = Archive(repository, key, manifest, args.location.archive)
+                else:
+                    archive = None
+                operations = FuseOperations(key, repository, manifest, archive, cached_repo)
+                logger.info("Mounting filesystem")
+                try:
+                    operations.mount(args.mountpoint, args.options, args.foreground)
+                except RuntimeError:
+                    # Relevant error message already printed to stderr by fuse
+                    self.exit_code = EXIT_ERROR
         finally:
             repository.close()
         return self.exit_code

+ 2 - 4
borg/fuse.py

@@ -8,7 +8,6 @@ import tempfile
 import time
 from .archive import Archive
 from .helpers import daemonize
-from .remote import cache_if_remote
 
 import msgpack
 
@@ -34,11 +33,11 @@ class ItemCache:
 class FuseOperations(llfuse.Operations):
     """Export archive as a fuse filesystem
     """
-    def __init__(self, key, repository, manifest, archive):
+    def __init__(self, key, repository, manifest, archive, cached_repo):
         super().__init__()
         self._inode_count = 0
         self.key = key
-        self.repository = cache_if_remote(repository)
+        self.repository = cached_repo
         self.items = {}
         self.parent = {}
         self.contents = defaultdict(dict)
@@ -238,4 +237,3 @@ class FuseOperations(llfuse.Operations):
             llfuse.main(single=True)
         finally:
             llfuse.close()
-            self.repository.close()