mirror of
https://github.com/python/cpython.git
synced 2025-08-10 03:49:18 +00:00
[3.12] gh-99203: shutil.make_archive(): restore select CPython <= 3.10.5 behavior (GH-99802) (#107998)
gh-99203: shutil.make_archive(): restore select CPython <= 3.10.5 behavior (GH-99802)
Restore following CPython <= 3.10.5 behavior of shutil.make_archive()
that went away as part of gh-93160:
Do not create an empty archive if root_dir is not a directory, and, in
that case, raise FileNotFoundError or NotADirectoryError regardless
of format choice. Beyond the brought-back behavior, the function may
now also raise these exceptions in dry_run mode.
(cherry picked from commit a86df298df
)
Co-authored-by: 6t8k <58048945+6t8k@users.noreply.github.com>
This commit is contained in:
parent
4421c65f08
commit
5d9f20a06c
3 changed files with 52 additions and 0 deletions
|
@ -1840,6 +1840,49 @@ class TestArchives(BaseTest, unittest.TestCase):
|
|||
formats = [name for name, params in get_archive_formats()]
|
||||
self.assertNotIn('xxx', formats)
|
||||
|
||||
def test_make_tarfile_rootdir_nodir(self):
|
||||
# GH-99203
|
||||
self.addCleanup(os_helper.unlink, f'{TESTFN}.tar')
|
||||
for dry_run in (False, True):
|
||||
with self.subTest(dry_run=dry_run):
|
||||
tmp_dir = self.mkdtemp()
|
||||
nonexisting_file = os.path.join(tmp_dir, 'nonexisting')
|
||||
with self.assertRaises(FileNotFoundError) as cm:
|
||||
make_archive(TESTFN, 'tar', nonexisting_file, dry_run=dry_run)
|
||||
self.assertEqual(cm.exception.errno, errno.ENOENT)
|
||||
self.assertEqual(cm.exception.filename, nonexisting_file)
|
||||
self.assertFalse(os.path.exists(f'{TESTFN}.tar'))
|
||||
|
||||
tmp_fd, tmp_file = tempfile.mkstemp(dir=tmp_dir)
|
||||
os.close(tmp_fd)
|
||||
with self.assertRaises(NotADirectoryError) as cm:
|
||||
make_archive(TESTFN, 'tar', tmp_file, dry_run=dry_run)
|
||||
self.assertEqual(cm.exception.errno, errno.ENOTDIR)
|
||||
self.assertEqual(cm.exception.filename, tmp_file)
|
||||
self.assertFalse(os.path.exists(f'{TESTFN}.tar'))
|
||||
|
||||
@support.requires_zlib()
|
||||
def test_make_zipfile_rootdir_nodir(self):
|
||||
# GH-99203
|
||||
self.addCleanup(os_helper.unlink, f'{TESTFN}.zip')
|
||||
for dry_run in (False, True):
|
||||
with self.subTest(dry_run=dry_run):
|
||||
tmp_dir = self.mkdtemp()
|
||||
nonexisting_file = os.path.join(tmp_dir, 'nonexisting')
|
||||
with self.assertRaises(FileNotFoundError) as cm:
|
||||
make_archive(TESTFN, 'zip', nonexisting_file, dry_run=dry_run)
|
||||
self.assertEqual(cm.exception.errno, errno.ENOENT)
|
||||
self.assertEqual(cm.exception.filename, nonexisting_file)
|
||||
self.assertFalse(os.path.exists(f'{TESTFN}.zip'))
|
||||
|
||||
tmp_fd, tmp_file = tempfile.mkstemp(dir=tmp_dir)
|
||||
os.close(tmp_fd)
|
||||
with self.assertRaises(NotADirectoryError) as cm:
|
||||
make_archive(TESTFN, 'zip', tmp_file, dry_run=dry_run)
|
||||
self.assertEqual(cm.exception.errno, errno.ENOTDIR)
|
||||
self.assertEqual(cm.exception.filename, tmp_file)
|
||||
self.assertFalse(os.path.exists(f'{TESTFN}.zip'))
|
||||
|
||||
### shutil.unpack_archive
|
||||
|
||||
def check_unpack_archive(self, format, **kwargs):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue