use the RepositoryCache context manager also in fuse code

This commit is contained in:
Thomas Waldmann 2016-01-17 00:28:54 +01:00
parent 4d73f3cdb9
commit 5ec2a3a49b
2 changed files with 16 additions and 17 deletions

View File

@ -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

View File

@ -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()