فهرست منبع

check: handle repo w/o objects gracefully

normal check would complete, --repair would crash when trying
to write the rebuilt (empty) manifest out, since self.key was None
Marian Beermann 8 سال پیش
والد
کامیت
2261709e78
2فایلهای تغییر یافته به همراه10 افزوده شده و 0 حذف شده
  1. 3 0
      borg/archive.py
  2. 7 0
      borg/testsuite/archiver.py

+ 3 - 0
borg/archive.py

@@ -833,6 +833,9 @@ class ArchiveChecker:
         self.repair = repair
         self.repository = repository
         self.init_chunks()
+        if not self.chunks:
+            logger.error('Repository contains no apparent data at all, cannot continue check/repair.')
+            return False
         self.key = self.identify_key(repository)
         if Manifest.MANIFEST_ID not in self.chunks:
             logger.error("Repository manifest not found!")

+ 7 - 0
borg/testsuite/archiver.py

@@ -1444,6 +1444,13 @@ class ArchiverCheckTestCase(ArchiverTestCaseBase):
         self.cmd('check', self.repository_location, exit_code=0)
         self.cmd('extract', '--dry-run', self.repository_location + '::archive1', exit_code=0)
 
+    def test_empty_repository(self):
+        with Repository(self.repository_location, exclusive=True) as repository:
+            for id_ in repository.list():
+                repository.delete(id_)
+            repository.commit()
+        self.cmd('check', self.repository_location, exit_code=1)
+
 
 @pytest.mark.skipif(sys.platform == 'cygwin', reason='remote is broken on cygwin and hangs')
 class RemoteArchiverTestCase(ArchiverTestCase):