diff options
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | obnamlib/plugins/fuse_plugin.py | 39 | ||||
-rw-r--r-- | test-gpghome/random_seed | bin | 600 -> 600 bytes |
3 files changed, 31 insertions, 11 deletions
@@ -15,6 +15,9 @@ Version 1./, released UNRELEASED report the successful backup to a monitoring system. Patch by Enrico Tröger. +* The FUSE plugin can now refresh its view, by having the user read + the `.pid` file. Patch by Verly Yundin. + Bug fixes: * Obnam now creates a `trustdb.gpg` in the temporary GNUPGHOME it uses diff --git a/obnamlib/plugins/fuse_plugin.py b/obnamlib/plugins/fuse_plugin.py index afdf88ea..b2048c83 100644 --- a/obnamlib/plugins/fuse_plugin.py +++ b/obnamlib/plugins/fuse_plugin.py @@ -20,7 +20,6 @@ import sys import logging import errno import struct -import signal import obnamlib @@ -77,6 +76,7 @@ class ObnamFuseFile(object): if path == '/.pid' and self.fs.obnam.app.settings['viewmode'] == 'multiple': self.read = self.read_pid + self.release = self.release_pid return self.metadata = self.fs.get_metadata(path) @@ -93,12 +93,17 @@ class ObnamFuseFile(object): raise def read_pid(self, length, offset): + logging.debug('FUSE read_pid %d %d', length, offset) pid = str(os.getpid()) if length < len(pid) or offset != 0: return '' else: return pid + def release_pid(self, flags): + self.fs.root_refresh() + return 0 + def fgetattr(self): logging.debug('FUSE file fgetattr') return self.fs.getattr(self.path) @@ -211,15 +216,20 @@ class ObnamFuse(fuse.Fuse): MAX_METADATA_CACHE = 512 - def sigUSR1(self): + def root_refresh(self): + logging.debug('FUSE root_refresh is called') if self.obnam.app.settings['viewmode'] == 'multiple': - repo = self.obnam.app.open_repository() - repo.open_client(self.obnam.app.settings['client-name']) - generations = [gen for gen in repo.list_generations() - if not repo.get_is_checkpoint(gen)] - self.obnam.repo = repo - self.rootstat, self.rootlist = self.multiple_root_list(generations) - self.metadatacache.clear() + try: + self.obnam.reopen() + repo = self.obnam.repo + generations = [gen for gen in repo.list_generations() + if not repo.get_is_checkpoint(gen)] + logging.debug('FUSE root_refresh found %d generations' % len(generations)) + self.rootstat, self.rootlist = self.multiple_root_list(generations) + self.metadatacache.clear() + except: + logging.exception('Unexpected exception') + raise def get_metadata(self, path): #logging.debug('FUSE get_metadata(%s)', path) @@ -584,6 +594,7 @@ class MountPlugin(obnamlib.ObnamPlugin): self.app.settings.require('repository') self.app.settings.require('client-name') self.app.settings.require('to') + self.cwd = os.getcwd() self.repo = self.app.open_repository() self.repo.open_client(self.app.settings['client-name']) @@ -598,8 +609,6 @@ class MountPlugin(obnamlib.ObnamPlugin): try: ObnamFuseOptParse.obnam = self fs = ObnamFuse(obnam=self, parser_class=ObnamFuseOptParse) - signal.signal(signal.SIGUSR1, lambda s,f: fs.sigUSR1()) - signal.siginterrupt(signal.SIGUSR1, False) fs.flags = 0 fs.multithreaded = 0 fs.parse() @@ -609,3 +618,11 @@ class MountPlugin(obnamlib.ObnamPlugin): self.repo.fs.close() + def reopen(self): + try: + os.chdir(self.cwd) + except OSError: + pass + self.repo.fs.close() + self.repo = self.app.open_repository() + self.repo.open_client(self.app.settings['client-name']) diff --git a/test-gpghome/random_seed b/test-gpghome/random_seed Binary files differindex 719c2974..2346b7da 100644 --- a/test-gpghome/random_seed +++ b/test-gpghome/random_seed |