fix(tools): Restore file permissions when extracting zip on unix

This commit is contained in:
Marek Fiala 2023-07-27 16:08:52 +02:00 committed by Eli Lipsitz
parent a13ab34101
commit 59f7f8d9fa

View File

@ -434,6 +434,14 @@ def unpack(filename, destination): # type: (str, str) -> None
# https://bugs.python.org/issue17153
destination = str(destination)
archive_obj.extractall(destination)
# ZipFile on Unix systems does not preserve file permissions while extracting it
# We need to reset the permissions afterward
if sys.platform != 'win32' and filename.endswith('zip') and isinstance(archive_obj, ZipFile):
for file_info in archive_obj.infolist():
extracted_file = os.path.join(destination, file_info.filename)
extracted_permissions = file_info.external_attr >> 16 & 0o777 # Extract Unix permissions
if os.path.exists(extracted_file):
os.chmod(extracted_file, extracted_permissions)
def splittype(url): # type: (str) -> Tuple[Optional[str], str]