extract_item: do not delete an existing directory if possible

A pre-existing directory might be a Btrfs subvolume that was created by
the user ahead of time when restoring several nested subvolumes from a
single archive.
This commit is contained in:
Ivan Shapovalov 2022-09-13 17:32:25 +03:00
parent 9108039786
commit aee25c3564

View File

@ -858,10 +858,13 @@ def same_item(item, st):
st = os.stat(path, follow_symlinks=False)
if continue_extraction and same_item(item, st):
return # done! we already have fully extracted this file in a previous run.
elif stat.S_ISDIR(st.st_mode):
os.rmdir(path)
else:
# remove anything that is not a directory
if not stat.S_ISDIR(st.st_mode):
os.unlink(path)
# only remove a directory if it is conflicting
# preserve existing directories because they might be subvolumes
elif not stat.S_ISDIR(item.mode):
os.rmdir(path)
except UnicodeEncodeError:
raise self.IncompatibleFilesystemEncodingError(path, sys.getfilesystemencoding()) from None
except OSError: