Issue #25624: ZipFile now always writes a ZIP_STORED header for directory
entries. Patch by Dingyuan Wang.
This commit is contained in:
commit
bf57bff1a9
|
@ -1105,6 +1105,29 @@ class TestShutil(unittest.TestCase):
|
||||||
names2 = zf.namelist()
|
names2 = zf.namelist()
|
||||||
self.assertEqual(sorted(names), sorted(names2))
|
self.assertEqual(sorted(names), sorted(names2))
|
||||||
|
|
||||||
|
@requires_zlib
|
||||||
|
@unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')
|
||||||
|
@unittest.skipUnless(shutil.which('unzip'),
|
||||||
|
'Need the unzip command to run')
|
||||||
|
def test_unzip_zipfile(self):
|
||||||
|
root_dir, base_dir = self._create_files()
|
||||||
|
base_name = os.path.join(self.mkdtemp(), 'archive')
|
||||||
|
archive = make_archive(base_name, 'zip', root_dir, base_dir)
|
||||||
|
|
||||||
|
# check if ZIP file was created
|
||||||
|
self.assertEqual(archive, base_name + '.zip')
|
||||||
|
self.assertTrue(os.path.isfile(archive))
|
||||||
|
|
||||||
|
# now check the ZIP file using `unzip -t`
|
||||||
|
zip_cmd = ['unzip', '-t', archive]
|
||||||
|
with support.change_cwd(root_dir):
|
||||||
|
try:
|
||||||
|
subprocess.check_output(zip_cmd, stderr=subprocess.STDOUT)
|
||||||
|
except subprocess.CalledProcessError as exc:
|
||||||
|
details = exc.output.decode(errors="replace")
|
||||||
|
msg = "{}\n\n**Unzip Output**\n{}"
|
||||||
|
self.fail(msg.format(exc, details))
|
||||||
|
|
||||||
def test_make_archive(self):
|
def test_make_archive(self):
|
||||||
tmpdir = self.mkdtemp()
|
tmpdir = self.mkdtemp()
|
||||||
base_name = os.path.join(tmpdir, 'archive')
|
base_name = os.path.join(tmpdir, 'archive')
|
||||||
|
|
|
@ -1444,7 +1444,9 @@ class ZipFile:
|
||||||
arcname += '/'
|
arcname += '/'
|
||||||
zinfo = ZipInfo(arcname, date_time)
|
zinfo = ZipInfo(arcname, date_time)
|
||||||
zinfo.external_attr = (st[0] & 0xFFFF) << 16 # Unix attributes
|
zinfo.external_attr = (st[0] & 0xFFFF) << 16 # Unix attributes
|
||||||
if compress_type is None:
|
if isdir:
|
||||||
|
zinfo.compress_type = ZIP_STORED
|
||||||
|
elif compress_type is None:
|
||||||
zinfo.compress_type = self.compression
|
zinfo.compress_type = self.compression
|
||||||
else:
|
else:
|
||||||
zinfo.compress_type = compress_type
|
zinfo.compress_type = compress_type
|
||||||
|
|
|
@ -1522,6 +1522,7 @@ Richard Walker
|
||||||
Larry Wall
|
Larry Wall
|
||||||
Kevin Walzer
|
Kevin Walzer
|
||||||
Rodrigo Steinmuller Wanderley
|
Rodrigo Steinmuller Wanderley
|
||||||
|
Dingyuan Wang
|
||||||
Ke Wang
|
Ke Wang
|
||||||
Greg Ward
|
Greg Ward
|
||||||
Tom Wardill
|
Tom Wardill
|
||||||
|
|
|
@ -95,6 +95,9 @@ Core and Builtins
|
||||||
Library
|
Library
|
||||||
-------
|
-------
|
||||||
|
|
||||||
|
- Issue #25624: ZipFile now always writes a ZIP_STORED header for directory
|
||||||
|
entries. Patch by Dingyuan Wang.
|
||||||
|
|
||||||
- Issue #25626: Change three zlib functions to accept sizes that fit in
|
- Issue #25626: Change three zlib functions to accept sizes that fit in
|
||||||
Py_ssize_t, but internally cap those sizes to UINT_MAX. This resolves a
|
Py_ssize_t, but internally cap those sizes to UINT_MAX. This resolves a
|
||||||
regression in 3.5 where GzipFile.read() failed to read chunks larger than 2
|
regression in 3.5 where GzipFile.read() failed to read chunks larger than 2
|
||||||
|
|
Loading…
Reference in New Issue