Prechádzať zdrojové kódy

Merge pull request #2838 from milkey-mouse/fix2834

Use archive creation time as mtime for FUSE mount (fixes #2834)
TW 7 rokov pred
rodič
commit
ffe7bdb88c
1 zmenil súbory, kde vykonal 12 pridanie a 9 odobranie
  1. 12 9
      src/borg/fuse.py

+ 12 - 9
src/borg/fuse.py

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