Use archive creation time as mtime for FUSE mount (fixes #2834)

This commit is contained in:
Milkey Mouse 2017-07-16 18:23:11 -07:00
parent fafa18b0a9
commit 6ef5c9c960
No known key found for this signature in database
GPG Key ID: C6EF5A02F5647987
1 changed files with 12 additions and 9 deletions

View File

@ -242,16 +242,15 @@ class FuseOperations(llfuse.Operations):
self.process_archive(self.args.location.archive) self.process_archive(self.args.location.archive)
else: else:
self.versions_index = FuseVersionsIndex() self.versions_index = FuseVersionsIndex()
archive_names = (x.name for x in self.manifest.archives.list_considering(self.args)) for archive in self.manifest.archives.list_considering(self.args):
for archive_name in archive_names:
if self.versions: if self.versions:
# process archives immediately # process archives immediately
self.process_archive(archive_name) self.process_archive(archive.name)
else: else:
# lazily load archives, create archive placeholder inode # lazily load archives, create archive placeholder inode
archive_inode = self._create_dir(parent=1) archive_inode = self._create_dir(parent=1, mtime=int(archive.ts.timestamp() * 1e9))
self.contents[1][os.fsencode(archive_name)] = archive_inode self.contents[1][os.fsencode(archive.name)] = archive_inode
self.pending_archives[archive_inode] = archive_name self.pending_archives[archive_inode] = archive.name
def sig_info_handler(self, sig_no, stack): def sig_info_handler(self, sig_no, stack):
logger.debug('fuse: %d synth inodes, %d edges (%s)', logger.debug('fuse: %d synth inodes, %d edges (%s)',
@ -303,10 +302,14 @@ class FuseOperations(llfuse.Operations):
finally: finally:
llfuse.close(umount) llfuse.close(umount)
def _create_dir(self, parent): def _create_dir(self, parent, mtime=None):
"""Create directory """Create directory
""" """
ino = self.allocate_inode() ino = self.allocate_inode()
if mtime is not None:
self.items[ino] = Item(**self.default_dir.as_dict())
self.items[ino].mtime = mtime
else:
self.items[ino] = self.default_dir self.items[ino] = self.default_dir
self.parent[ino] = parent self.parent[ino] = parent
return ino return ino
@ -375,7 +378,7 @@ class FuseOperations(llfuse.Operations):
self.file_versions[path] = version self.file_versions[path] = version
path = item.path path = item.path
del item.path # safe some space del item.path # save some space
if 'source' in item and hardlinkable(item.mode): if 'source' in item and hardlinkable(item.mode):
# a hardlink, no contents, <source> is the hardlink master # a hardlink, no contents, <source> is the hardlink master
source = os.fsencode(item.source) source = os.fsencode(item.source)