[Python-checkins] cpython (merge 3.6 -> default): Issue #28488: shutil.make_archive() no longer adds entry "./" to ZIP archive.

serhiy.storchaka python-checkins at python.org
Sun Oct 23 08:58:55 EDT 2016


https://hg.python.org/cpython/rev/72da53d3074b
changeset:   104663:72da53d3074b
parent:      104659:94d34354bef1
parent:      104662:e93149fee04d
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Sun Oct 23 15:58:10 2016 +0300
summary:
  Issue #28488: shutil.make_archive() no longer adds entry "./" to ZIP archive.

files:
  Lib/shutil.py           |   7 ++++---
  Lib/test/test_shutil.py |  13 +++++++++++++
  Misc/NEWS               |   2 ++
  3 files changed, 19 insertions(+), 3 deletions(-)


diff --git a/Lib/shutil.py b/Lib/shutil.py
--- a/Lib/shutil.py
+++ b/Lib/shutil.py
@@ -680,9 +680,10 @@
         with zipfile.ZipFile(zip_filename, "w",
                              compression=zipfile.ZIP_DEFLATED) as zf:
             path = os.path.normpath(base_dir)
-            zf.write(path, path)
-            if logger is not None:
-                logger.info("adding '%s'", path)
+            if path != os.curdir:
+                zf.write(path, path)
+                if logger is not None:
+                    logger.info("adding '%s'", path)
             for dirpath, dirnames, filenames in os.walk(base_dir):
                 for name in sorted(dirnames):
                     path = os.path.normpath(os.path.join(dirpath, name))
diff --git a/Lib/test/test_shutil.py b/Lib/test/test_shutil.py
--- a/Lib/test/test_shutil.py
+++ b/Lib/test/test_shutil.py
@@ -1066,6 +1066,19 @@
 
         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):
+            base_name = os.path.abspath(rel_base_name)
             res = make_archive(rel_base_name, 'zip', root_dir, base_dir)
 
         self.assertEqual(res, base_name + '.zip')
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -16,6 +16,8 @@
 - Issue #23782: Fixed possible memory leak in _PyTraceback_Add() and exception
   loss in PyTraceBack_Here().
 
+- Issue #28488: shutil.make_archive() no longer adds entry "./" to ZIP archive.
+
 - Issue #25953: re.sub() now raises an error for invalid numerical group
   reference in replacement template even if the pattern is not found in
   the string.  Error message for invalid group reference now includes the

-- 
Repository URL: https://hg.python.org/cpython


More information about the Python-checkins mailing list