diff options
author | Nate Coraor <nate@bx.psu.edu> | 2016-02-01 16:42:04 -0500 |
---|---|---|
committer | Nate Coraor <nate@bx.psu.edu> | 2016-02-01 16:42:04 -0500 |
commit | 2254e6bf85f45dec7be3a498bb1fde6428880b1d (patch) | |
tree | 8f9826d57a5579c8182f35b285dbd63573ffbad8 | |
parent | e806fd536e9c22b40fa1781190bc09ab16505f82 (diff) | |
download | wheel-2254e6bf85f45dec7be3a498bb1fde6428880b1d.tar.gz |
Set file attributes on wheel archive members.
-rw-r--r-- | wheel/archive.py | 1 | ||||
-rw-r--r-- | wheel/test/test_wheelfile.py | 15 |
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 |