summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNate Coraor <nate@bx.psu.edu>2016-02-01 16:42:04 -0500
committerNate Coraor <nate@bx.psu.edu>2016-02-01 16:42:04 -0500
commit2254e6bf85f45dec7be3a498bb1fde6428880b1d (patch)
tree8f9826d57a5579c8182f35b285dbd63573ffbad8
parente806fd536e9c22b40fa1781190bc09ab16505f82 (diff)
downloadwheel-2254e6bf85f45dec7be3a498bb1fde6428880b1d.tar.gz
Set file attributes on wheel archive members.
-rw-r--r--wheel/archive.py1
-rw-r--r--wheel/test/test_wheelfile.py15
2 files changed, 16 insertions, 0 deletions
diff --git a/wheel/archive.py b/wheel/archive.py
index bf06767..f4dd617 100644
--- a/wheel/archive.py
+++ b/wheel/archive.py
@@ -55,6 +55,7 @@ def make_wheelfile_inner(base_name, base_dir='.'):
mtime = time.gmtime(st.st_mtime)
date_time = mtime[0:6]
zinfo = zipfile.ZipInfo(path, date_time)
+ zinfo.external_attr = 0o100644 << 16
with open(path, 'rb') as fp:
zip.writestr(zinfo, fp.read())
log.info("adding '%s'" % path)
diff --git a/wheel/test/test_wheelfile.py b/wheel/test/test_wheelfile.py
index 1d35ec4..59bbb4c 100644
--- a/wheel/test/test_wheelfile.py
+++ b/wheel/test/test_wheelfile.py
@@ -121,3 +121,18 @@ def test_zipfile_timestamp():
with readable_zipfile(zip_filename) as zf:
for info in zf.infolist():
assert info.date_time[:3] == (1980, 1, 1)
+
+def test_zipfile_attributes():
+ # With the change from ZipFile.write() to .writestr(), we need to manually
+ # set member attributes. Per existing tradition file permissions are forced
+ # to 0o644, although in the future we may want to preserve executable bits.
+ with temporary_directory() as tempdir:
+ path = os.path.join(tempdir, 'foo')
+ with codecs.open(path, 'w', encoding='utf-8') as fp:
+ fp.write('foo\n')
+ zip_base_name = os.path.join(tempdir, 'dummy')
+ zip_filename = wheel.archive.make_wheelfile_inner(
+ zip_base_name, tempdir)
+ with readable_zipfile(zip_filename) as zf:
+ for info in zf.infolist():
+ assert info.external_attr == 0o100644 << 16