Skip to content

Commit d8fd1c2

Browse files
delijatiabravalheri
authored andcommitted
Fix ZipFile mode not set
1 parent 8aa366d commit d8fd1c2

File tree

1 file changed

+15
-1
lines changed

1 file changed

+15
-1
lines changed

setuptools/wheel.py

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,20 @@
2727
"__import__('pkg_resources').declare_namespace(__name__)\n"
2828

2929

30+
class ZipFilePreserveMode(zipfile.ZipFile):
31+
""" Extended ZipFile class to preserve file mode """
32+
def _extract_member(self, member, targetpath, pwd):
33+
if not isinstance(member, zipfile.ZipInfo):
34+
member = self.getinfo(member)
35+
36+
targetpath = super()._extract_member(member, targetpath, pwd)
37+
38+
attr = member.external_attr >> 16
39+
if attr != 0:
40+
os.chmod(targetpath, attr)
41+
return targetpath
42+
43+
3044
def unpack(src_dir, dst_dir):
3145
'''Move everything under `src_dir` to `dst_dir`, and delete the former.'''
3246
for dirpath, dirnames, filenames in os.walk(src_dir):
@@ -91,7 +105,7 @@ def get_dist_info(self, zf):
91105

92106
def install_as_egg(self, destination_eggdir):
93107
'''Install wheel as an egg directory.'''
94-
with zipfile.ZipFile(self.filename) as zf:
108+
with ZipFilePreserveMode(self.filename) as zf:
95109
self._install_as_egg(destination_eggdir, zf)
96110

97111
def _install_as_egg(self, destination_eggdir, zf):

0 commit comments

Comments
 (0)