diff options
author | takumi <takumi@indeed.com> | 2020-02-07 16:30:24 +0900 |
---|---|---|
committer | takumi <takumi@indeed.com> | 2020-02-07 17:56:30 +0900 |
commit | 4dec35ca87b544ca03e5640b2e9be7143a24d749 (patch) | |
tree | d18d188b11c491c39eedc2275706738fd5147356 /python/servo/util.py | |
parent | c67b3d71e23f10ba2049bdd9aed822b19ed8527f (diff) | |
download | servo-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.py | 15 |
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") |