]> granicus.if.org Git - python/commitdiff
Issue #21280: Fixed a bug in shutil.make_archive() when create an archive of
authorSerhiy Storchaka <storchaka@gmail.com>
Thu, 27 Nov 2014 22:50:06 +0000 (00:50 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Thu, 27 Nov 2014 22:50:06 +0000 (00:50 +0200)
current directory in current directory.

Lib/shutil.py
Lib/test/test_shutil.py

index e12f791fd1db23b82ab96debdeee57ceee9b6310..e78a5758ca0a58077f56e3bc3dc2d0a399ebfa42 100644 (file)
@@ -362,7 +362,7 @@ def _make_tarball(base_name, base_dir, compress="gzip", verbose=0, dry_run=0,
     archive_name = base_name + '.tar' + compress_ext.get(compress, '')
     archive_dir = os.path.dirname(archive_name)
 
-    if not os.path.exists(archive_dir):
+    if archive_dir and not os.path.exists(archive_dir):
         if logger is not None:
             logger.info("creating %s", archive_dir)
         if not dry_run:
@@ -426,7 +426,7 @@ def _make_zipfile(base_name, base_dir, verbose=0, dry_run=0, logger=None):
     zip_filename = base_name + ".zip"
     archive_dir = os.path.dirname(base_name)
 
-    if not os.path.exists(archive_dir):
+    if archive_dir and not os.path.exists(archive_dir):
         if logger is not None:
             logger.info("creating %s", archive_dir)
         if not dry_run:
index 0e811459fce246704b77b5317fb9c02ae0457162..bcabe75ad7dd60f87b0ded4ee4b7c5279fea8629 100644 (file)
@@ -581,6 +581,29 @@ class TestShutil(unittest.TestCase):
         finally:
             unregister_archive_format('xxx')
 
+    def test_make_tarfile_in_curdir(self):
+        # Issue #21280
+        root_dir = self.mkdtemp()
+        saved_dir = os.getcwd()
+        try:
+            os.chdir(root_dir)
+            self.assertEqual(make_archive('test', 'tar'), 'test.tar')
+            self.assertTrue(os.path.isfile('test.tar'))
+        finally:
+            os.chdir(saved_dir)
+
+    @unittest.skipUnless(zlib, "Requires zlib")
+    def test_make_zipfile_in_curdir(self):
+        # Issue #21280
+        root_dir = self.mkdtemp()
+        saved_dir = os.getcwd()
+        try:
+            os.chdir(root_dir)
+            self.assertEqual(make_archive('test', 'zip'), 'test.zip')
+            self.assertTrue(os.path.isfile('test.zip'))
+        finally:
+            os.chdir(saved_dir)
+
     def test_register_archive_format(self):
 
         self.assertRaises(TypeError, register_archive_format, 'xxx', 1)