Browse Source

Merge pull request #5007 from ThomasWaldmann/fix-bad-hint-master

fix crash when upgrading erroneous hints file, fixes #4922
TW 5 years ago
parent
commit
7c699d4312
1 changed files with 11 additions and 2 deletions
  1. 11 2
      src/borg/repository.py

+ 11 - 2
src/borg/repository.py

@@ -894,10 +894,19 @@ class Repository:
 
     def _rebuild_sparse(self, segment):
         """Rebuild sparse bytes count for a single segment relative to the current index."""
-        self.compact[segment] = 0
+        try:
+            segment_size = self.io.segment_size(segment)
+        except FileNotFoundError:
+            # segment does not exist any more, remove it from the mappings
+            # note: no need to self.compact.pop(segment), as we start from empty mapping.
+            self.segments.pop(segment)
+            return
+
         if self.segments[segment] == 0:
-            self.compact[segment] += self.io.segment_size(segment)
+            self.compact[segment] = segment_size
             return
+
+        self.compact[segment] = 0
         for tag, key, offset, size in self.io.iter_objects(segment, read_data=False):
             if tag == TAG_PUT:
                 if self.index.get(key, (-1, -1)) != (segment, offset):