Browse Source

mount: fix for non-unique archive names

For Archive(), always use the archive id, not the archive name!
Thomas Waldmann 8 months ago
parent
commit
948bc4cdf9
1 changed files with 7 additions and 7 deletions
  1. 7 7
      src/borg/fuse.py

+ 7 - 7
src/borg/fuse.py

@@ -280,12 +280,12 @@ class FuseBackend:
         for archive in self._manifest.archives.list_considering(self._args):
         for archive in self._manifest.archives.list_considering(self._args):
             if self.versions:
             if self.versions:
                 # process archives immediately
                 # process archives immediately
-                self._process_archive(archive.name)
+                self._process_archive(archive.id)
             else:
             else:
                 # lazily load archives, create archive placeholder inode
                 # lazily load archives, create archive placeholder inode
                 archive_inode = self._create_dir(parent=1, mtime=int(archive.ts.timestamp() * 1e9))
                 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
 
 
     def get_item(self, inode):
     def get_item(self, inode):
         item = self._inode_cache.get(inode)
         item = self._inode_cache.get(inode)
@@ -302,9 +302,9 @@ class FuseBackend:
 
 
     def check_pending_archive(self, inode):
     def check_pending_archive(self, inode):
         # Check if this is an archive we need to load
         # Check if this is an archive we need to load
-        archive_name = self.pending_archives.pop(inode, None)
-        if archive_name is not None:
-            self._process_archive(archive_name, [os.fsencode(archive_name)])
+        archive_info = self.pending_archives.pop(inode, None)
+        if archive_info is not None:
+            self._process_archive(archive_info.id, [os.fsencode(archive_info.name)])
 
 
     def _allocate_inode(self):
     def _allocate_inode(self):
         self.inode_count += 1
         self.inode_count += 1
@@ -328,11 +328,11 @@ class FuseBackend:
             inode = self.contents[inode][segment]
             inode = self.contents[inode][segment]
         return inode
         return inode
 
 
-    def _process_archive(self, archive_name, prefix=[]):
+    def _process_archive(self, archive_id, prefix=[]):
         """Build FUSE inode hierarchy from archive metadata"""
         """Build FUSE inode hierarchy from archive metadata"""
         self.file_versions = {}  # for versions mode: original path -> version
         self.file_versions = {}  # for versions mode: original path -> version
         t0 = time.perf_counter()
         t0 = time.perf_counter()
-        archive = Archive(self._manifest, archive_name)
+        archive = Archive(self._manifest, archive_id)
         strip_components = self._args.strip_components
         strip_components = self._args.strip_components
         matcher = build_matcher(self._args.patterns, self._args.paths)
         matcher = build_matcher(self._args.patterns, self._args.paths)
         hlm = HardLinkManager(id_type=bytes, info_type=str)  # hlid -> path
         hlm = HardLinkManager(id_type=bytes, info_type=str)  # hlid -> path