bpo-34738: Add directory entries in ZIP files created by distutils. (GH-9419)
(cherry picked from commit 67a93b3a0b
)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
parent
349d9910b2
commit
53bed18d93
|
@ -166,7 +166,15 @@ def make_zipfile(base_name, base_dir, verbose=0, dry_run=0):
|
||||||
zip = zipfile.ZipFile(zip_filename, "w",
|
zip = zipfile.ZipFile(zip_filename, "w",
|
||||||
compression=zipfile.ZIP_STORED)
|
compression=zipfile.ZIP_STORED)
|
||||||
|
|
||||||
|
if base_dir != os.curdir:
|
||||||
|
path = os.path.normpath(os.path.join(base_dir, ''))
|
||||||
|
zip.write(path, path)
|
||||||
|
log.info("adding '%s'", path)
|
||||||
for dirpath, dirnames, filenames in os.walk(base_dir):
|
for dirpath, dirnames, filenames in os.walk(base_dir):
|
||||||
|
for name in dirnames:
|
||||||
|
path = os.path.normpath(os.path.join(dirpath, name, ''))
|
||||||
|
zip.write(path, path)
|
||||||
|
log.info("adding '%s'", path)
|
||||||
for name in filenames:
|
for name in filenames:
|
||||||
path = os.path.normpath(os.path.join(dirpath, name))
|
path = os.path.normpath(os.path.join(dirpath, name))
|
||||||
if os.path.isfile(path):
|
if os.path.isfile(path):
|
||||||
|
|
|
@ -122,12 +122,13 @@ class ArchiveUtilTestCase(support.TempdirManager,
|
||||||
try:
|
try:
|
||||||
names = tar.getnames()
|
names = tar.getnames()
|
||||||
names.sort()
|
names.sort()
|
||||||
return tuple(names)
|
return names
|
||||||
finally:
|
finally:
|
||||||
tar.close()
|
tar.close()
|
||||||
|
|
||||||
_created_files = ('dist', 'dist/file1', 'dist/file2',
|
_zip_created_files = ['dist/', 'dist/file1', 'dist/file2',
|
||||||
'dist/sub', 'dist/sub/file3', 'dist/sub2')
|
'dist/sub/', 'dist/sub/file3', 'dist/sub2/']
|
||||||
|
_created_files = [p.rstrip('/') for p in _zip_created_files]
|
||||||
|
|
||||||
def _create_files(self):
|
def _create_files(self):
|
||||||
# creating something to tar
|
# creating something to tar
|
||||||
|
@ -244,8 +245,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
|
||||||
tarball = base_name + '.zip'
|
tarball = base_name + '.zip'
|
||||||
self.assertTrue(os.path.exists(tarball))
|
self.assertTrue(os.path.exists(tarball))
|
||||||
with zipfile.ZipFile(tarball) as zf:
|
with zipfile.ZipFile(tarball) as zf:
|
||||||
self.assertEqual(sorted(zf.namelist()),
|
self.assertEqual(sorted(zf.namelist()), self._zip_created_files)
|
||||||
['dist/file1', 'dist/file2', 'dist/sub/file3'])
|
|
||||||
|
|
||||||
@unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')
|
@unittest.skipUnless(ZIP_SUPPORT, 'Need zip support to run')
|
||||||
def test_make_zipfile_no_zlib(self):
|
def test_make_zipfile_no_zlib(self):
|
||||||
|
@ -271,8 +271,7 @@ class ArchiveUtilTestCase(support.TempdirManager,
|
||||||
[((tarball, "w"), {'compression': zipfile.ZIP_STORED})])
|
[((tarball, "w"), {'compression': zipfile.ZIP_STORED})])
|
||||||
self.assertTrue(os.path.exists(tarball))
|
self.assertTrue(os.path.exists(tarball))
|
||||||
with zipfile.ZipFile(tarball) as zf:
|
with zipfile.ZipFile(tarball) as zf:
|
||||||
self.assertEqual(sorted(zf.namelist()),
|
self.assertEqual(sorted(zf.namelist()), self._zip_created_files)
|
||||||
['dist/file1', 'dist/file2', 'dist/sub/file3'])
|
|
||||||
|
|
||||||
def test_check_archive_formats(self):
|
def test_check_archive_formats(self):
|
||||||
self.assertEqual(check_archive_formats(['gztar', 'xxx', 'zip']),
|
self.assertEqual(check_archive_formats(['gztar', 'xxx', 'zip']),
|
||||||
|
|
|
@ -84,7 +84,7 @@ class BuildDumbTestCase(support.TempdirManager,
|
||||||
finally:
|
finally:
|
||||||
fp.close()
|
fp.close()
|
||||||
|
|
||||||
contents = sorted(os.path.basename(fn) for fn in contents)
|
contents = sorted(filter(None, map(os.path.basename, contents)))
|
||||||
wanted = ['foo-0.1-py%s.%s.egg-info' % sys.version_info[:2], 'foo.py']
|
wanted = ['foo-0.1-py%s.%s.egg-info' % sys.version_info[:2], 'foo.py']
|
||||||
if not sys.dont_write_bytecode:
|
if not sys.dont_write_bytecode:
|
||||||
wanted.append('foo.%s.pyc' % sys.implementation.cache_tag)
|
wanted.append('foo.%s.pyc' % sys.implementation.cache_tag)
|
||||||
|
|
|
@ -128,7 +128,9 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
|
||||||
zip_file.close()
|
zip_file.close()
|
||||||
|
|
||||||
# making sure everything has been pruned correctly
|
# making sure everything has been pruned correctly
|
||||||
self.assertEqual(len(content), 4)
|
expected = ['', 'PKG-INFO', 'README', 'setup.py',
|
||||||
|
'somecode/', 'somecode/__init__.py']
|
||||||
|
self.assertEqual(sorted(content), ['fake-1.0/' + x for x in expected])
|
||||||
|
|
||||||
@unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run')
|
@unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run')
|
||||||
@unittest.skipIf(find_executable('tar') is None,
|
@unittest.skipIf(find_executable('tar') is None,
|
||||||
|
@ -226,7 +228,13 @@ class SDistTestCase(BasePyPIRCCommandTestCase):
|
||||||
zip_file.close()
|
zip_file.close()
|
||||||
|
|
||||||
# making sure everything was added
|
# making sure everything was added
|
||||||
self.assertEqual(len(content), 12)
|
expected = ['', 'PKG-INFO', 'README', 'buildout.cfg',
|
||||||
|
'data/', 'data/data.dt', 'inroot.txt',
|
||||||
|
'scripts/', 'scripts/script.py', 'setup.py',
|
||||||
|
'some/', 'some/file.txt', 'some/other_file.txt',
|
||||||
|
'somecode/', 'somecode/__init__.py', 'somecode/doc.dat',
|
||||||
|
'somecode/doc.txt']
|
||||||
|
self.assertEqual(sorted(content), ['fake-1.0/' + x for x in expected])
|
||||||
|
|
||||||
# checking the MANIFEST
|
# checking the MANIFEST
|
||||||
f = open(join(self.tmp_dir, 'MANIFEST'))
|
f = open(join(self.tmp_dir, 'MANIFEST'))
|
||||||
|
|
|
@ -0,0 +1,2 @@
|
||||||
|
ZIP files created by :mod:`distutils` will now include entries for
|
||||||
|
directories.
|
Loading…
Reference in New Issue