diff --git a/borg/archiver.py b/borg/archiver.py index 588fe3954..b796665a1 100644 --- a/borg/archiver.py +++ b/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 diff --git a/borg/fuse.py b/borg/fuse.py index 0596ae674..36f761e40 100644 --- a/borg/fuse.py +++ b/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()