Issue #28488: shutil.make_archive() no longer adds entry "./" to ZIP archive.

This commit is contained in:
Serhiy Storchaka 2016-10-23 15:57:42 +03:00
commit 7fc92bb38a
3 changed files with 19 additions and 3 deletions

View File

@ -680,6 +680,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None):
with zipfile.ZipFile(zip_filename, "w", with zipfile.ZipFile(zip_filename, "w",
compression=zipfile.ZIP_DEFLATED) as zf: compression=zipfile.ZIP_DEFLATED) as zf:
path = os.path.normpath(base_dir) path = os.path.normpath(base_dir)
if path != os.curdir:
zf.write(path, path) zf.write(path, path)
if logger is not None: if logger is not None:
logger.info("adding '%s'", path) logger.info("adding '%s'", path)

View File

@ -1064,6 +1064,19 @@ class TestShutil(unittest.TestCase):
work_dir = os.path.dirname(tmpdir2) work_dir = os.path.dirname(tmpdir2)
rel_base_name = os.path.join(os.path.basename(tmpdir2), 'archive') rel_base_name = os.path.join(os.path.basename(tmpdir2), 'archive')
with support.change_cwd(work_dir):
base_name = os.path.abspath(rel_base_name)
res = make_archive(rel_base_name, 'zip', root_dir)
self.assertEqual(res, base_name + '.zip')
self.assertTrue(os.path.isfile(res))
self.assertTrue(zipfile.is_zipfile(res))
with zipfile.ZipFile(res) as zf:
self.assertCountEqual(zf.namelist(),
['dist/', 'dist/sub/', 'dist/sub2/',
'dist/file1', 'dist/file2', 'dist/sub/file3',
'outer'])
with support.change_cwd(work_dir): with support.change_cwd(work_dir):
base_name = os.path.abspath(rel_base_name) base_name = os.path.abspath(rel_base_name)
res = make_archive(rel_base_name, 'zip', root_dir, base_dir) res = make_archive(rel_base_name, 'zip', root_dir, base_dir)

View File

@ -23,6 +23,8 @@ Core and Builtins
Library Library
------- -------
- Issue #28488: shutil.make_archive() no longer adds entry "./" to ZIP archive.
- Issue #25953: re.sub() now raises an error for invalid numerical group - Issue #25953: re.sub() now raises an error for invalid numerical group
reference in replacement template even if the pattern is not found in reference in replacement template even if the pattern is not found in
the string. Error message for invalid group reference now includes the the string. Error message for invalid group reference now includes the