Browse Source

ArchiveRecreater.incref_partial_chunks try to use __contains__

Marian Beermann 8 years ago
parent
commit
7b70b74ad1
1 changed files with 5 additions and 5 deletions
  1. 5 5
      src/borg/archive.py

+ 5 - 5
src/borg/archive.py

@@ -1537,10 +1537,7 @@ class ArchiveRecreater:
         target = self.create_target_archive(target_name + '.temp')
         target = self.create_target_archive(target_name + '.temp')
         logger.info('Replaying items from interrupted operation...')
         logger.info('Replaying items from interrupted operation...')
         last_old_item = self.copy_items(old_target, target)
         last_old_item = self.copy_items(old_target, target)
-        if last_old_item:
-            resume_from = last_old_item.path
-        else:
-            resume_from = None
+        resume_from = getattr(last_old_item, 'path', None)
         self.incref_partial_chunks(old_target, target)
         self.incref_partial_chunks(old_target, target)
         old_target.delete(Statistics(), progress=self.progress)
         old_target.delete(Statistics(), progress=self.progress)
         logger.info('Done replaying items')
         logger.info('Done replaying items')
@@ -1552,7 +1549,10 @@ class ArchiveRecreater:
             if not self.cache.seen_chunk(chunk_id):
             if not self.cache.seen_chunk(chunk_id):
                 try:
                 try:
                     # Repository has __contains__, RemoteRepository doesn't
                     # Repository has __contains__, RemoteRepository doesn't
-                    self.repository.get(chunk_id)
+                    # `chunk_id in repo` doesn't read the data though, so we try to use that if possible.
+                    get_or_in = getattr(self.repository, '__contains__', self.repository.get)
+                    if get_or_in(chunk_id) is False:
+                        raise Repository.ObjectNotFound(chunk_id, self.repository)
                 except Repository.ObjectNotFound:
                 except Repository.ObjectNotFound:
                     # delete/prune/check between invocations: these chunks are gone.
                     # delete/prune/check between invocations: these chunks are gone.
                     target_archive.recreate_partial_chunks = None
                     target_archive.recreate_partial_chunks = None