aboutsummaryrefslogtreecommitdiffstats
path: root/python/servo/util.py
diff options
context:
space:
mode:
authortakumi <takumi@indeed.com>2020-02-07 16:30:24 +0900
committertakumi <takumi@indeed.com>2020-02-07 17:56:30 +0900
commit4dec35ca87b544ca03e5640b2e9be7143a24d749 (patch)
treed18d188b11c491c39eedc2275706738fd5147356 /python/servo/util.py
parentc67b3d71e23f10ba2049bdd9aed822b19ed8527f (diff)
downloadservo-4dec35ca87b544ca03e5640b2e9be7143a24d749.tar.gz
servo-4dec35ca87b544ca03e5640b2e9be7143a24d749.zip
fix zip extraction for python 3
Diffstat (limited to 'python/servo/util.py')
-rw-r--r--python/servo/util.py15
1 files changed, 15 insertions, 0 deletions
diff --git a/python/servo/util.py b/python/servo/util.py
index d0f0f811889..84dd19e5208 100644
--- a/python/servo/util.py
+++ b/python/servo/util.py
@@ -187,6 +187,21 @@ class ZipFileWithUnixPermissions(zipfile.ZipFile):
os.chmod(extracted, mode)
return extracted
+ # For Python 3.x
+ def _extract_member(self, member, targetpath, pwd):
+ if sys.version_info[0] >= 3:
+ if not isinstance(member, zipfile.ZipInfo):
+ member = self.getinfo(member)
+
+ targetpath = super()._extract_member(member, targetpath, pwd)
+
+ attr = member.external_attr >> 16
+ if attr != 0:
+ os.chmod(targetpath, attr)
+ return targetpath
+ else:
+ return super(ZipFileWithUnixPermissions, self)._extract_member(member, targetpath, pwd)
+
def extract(src, dst, movedir=None, remove=True):
assert src.endswith(".zip")