[Python-checkins] cpython (merge 3.5 -> 3.6): 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/e93149fee04d
changeset:   104662:e93149fee04d
branch:      3.6
parent:      104654:a1975621bba2
parent:      104661:d4fce66ebe01
user:        Serhiy Storchaka <storchaka at gmail.com>
date:        Sun Oct 23 15:57:42 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
@@ -23,6 +23,8 @@
 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
   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