mirror of
https://github.com/borgbackup/borg.git
synced 2024-12-27 02:08:54 +00:00
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
This commit is contained in:
parent
64a3fa8e73
commit
2261709e78
2 changed files with 10 additions and 0 deletions
|
@ -833,6 +833,9 @@ def check(self, repository, repair=False, archive=None, last=None, prefix=None,
|
||||||
self.repair = repair
|
self.repair = repair
|
||||||
self.repository = repository
|
self.repository = repository
|
||||||
self.init_chunks()
|
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)
|
self.key = self.identify_key(repository)
|
||||||
if Manifest.MANIFEST_ID not in self.chunks:
|
if Manifest.MANIFEST_ID not in self.chunks:
|
||||||
logger.error("Repository manifest not found!")
|
logger.error("Repository manifest not found!")
|
||||||
|
|
|
@ -1444,6 +1444,13 @@ def test_extra_chunks(self):
|
||||||
self.cmd('check', self.repository_location, exit_code=0)
|
self.cmd('check', self.repository_location, exit_code=0)
|
||||||
self.cmd('extract', '--dry-run', self.repository_location + '::archive1', 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')
|
@pytest.mark.skipif(sys.platform == 'cygwin', reason='remote is broken on cygwin and hangs')
|
||||||
class RemoteArchiverTestCase(ArchiverTestCase):
|
class RemoteArchiverTestCase(ArchiverTestCase):
|
||||||
|
|
Loading…
Reference in a new issue