helper = RestoreHelper(self, cwd, backup_path=backup_tar_path,
tarobj=index_it.tar_obj)
elif mode == "diff":
- helper = RestoreHelper(self, cwd, backup_indexes_paths)
+ helper = RestoreHelper(self, cwd, backup_indexes_paths, disaster=disaster)
# get iterator from newest index at _data[0]
index_it = self.iterate_index_path(helper._data[0]["path"])
concat='#' in self._deltatar.mode,
encryption=index_data["decryptor"],
new_volume_handler=index_data['new_volume_handler'],
- save_to_members=False)
+ save_to_members=False,
+ tolerant=self._disaster)
member = index_data['tarobj'].__iter__().__next__()
if self.arcmode & ARCMODE_ENCRYPT:
if self.remainder <= 0:
# prepare next object
- if self._init_read_encrypt () is False: # EOF
- buf = None
- break # while
+ try:
+ if self._init_read_encrypt () is False: # EOF
+ buf = None
+ break # while
+ except DecryptionError:
+ if self.tolerant:
+ self.buf = b"".join (t [good_crypto:])
+ return b"".join (t [:good_crypto])
+ raise
# only read up to the end of the encrypted object
todo = min (size, self.remainder)
@classmethod
def open(cls, name=None, mode="r", fileobj=None, bufsize=RECORDSIZE,
- encryption=None, compresslevel=9, **kwargs):
+ encryption=None, compresslevel=9, tolerant=False, **kwargs):
"""Open a tar archive for reading, writing or appending. Return
an appropriate TarFile class.
stream = _Stream(name, filemode, comptype, fileobj, bufsize,
concat=True, encryption=encryption,
- compresslevel=compresslevel)
+ compresslevel=compresslevel, tolerant=tolerant)
kwargs ["concat"] = True
try:
t = cls(name, filemode, stream, **kwargs)