Revert regression from r81256 (with release manager approval, see #8688)

This commit is contained in:
Éric Araujo 2010-08-14 02:07:26 +00:00
parent aa6a939d33
commit 77cb7ed40e
3 changed files with 60 additions and 87 deletions

View File

@ -57,8 +57,7 @@ class sdist (Command):
"just regenerate the manifest and then stop " "just regenerate the manifest and then stop "
"(implies --force-manifest)"), "(implies --force-manifest)"),
('force-manifest', 'f', ('force-manifest', 'f',
"forcibly regenerate the manifest and carry on as usual. " "forcibly regenerate the manifest and carry on as usual"),
"Deprecated: now the manifest is always regenerated."),
('formats=', None, ('formats=', None,
"formats for source distribution (comma-separated list)"), "formats for source distribution (comma-separated list)"),
('keep-temp', 'k', ('keep-temp', 'k',
@ -191,16 +190,47 @@ class sdist (Command):
distribution, and put it in 'self.filelist'. This might involve distribution, and put it in 'self.filelist'. This might involve
reading the manifest template (and writing the manifest), or just reading the manifest template (and writing the manifest), or just
reading the manifest, or just using the default file set -- it all reading the manifest, or just using the default file set -- it all
depends on the user's options. depends on the user's options and the state of the filesystem.
""" """
# new behavior:
# the file list is recalculated everytime because # If we have a manifest template, see if it's newer than the
# even if MANIFEST.in or setup.py are not changed # manifest; if so, we'll regenerate the manifest.
# the user might have added some files in the tree that
# need to be included.
#
# This makes --force the default and only behavior.
template_exists = os.path.isfile(self.template) template_exists = os.path.isfile(self.template)
if template_exists:
template_newer = dep_util.newer(self.template, self.manifest)
# The contents of the manifest file almost certainly depend on the
# setup script as well as the manifest template -- so if the setup
# script is newer than the manifest, we'll regenerate the manifest
# from the template. (Well, not quite: if we already have a
# manifest, but there's no template -- which will happen if the
# developer elects to generate a manifest some other way -- then we
# can't regenerate the manifest, so we don't.)
self.debug_print("checking if %s newer than %s" %
(self.distribution.script_name, self.manifest))
setup_newer = dep_util.newer(self.distribution.script_name,
self.manifest)
# cases:
# 1) no manifest, template exists: generate manifest
# (covered by 2a: no manifest == template newer)
# 2) manifest & template exist:
# 2a) template or setup script newer than manifest:
# regenerate manifest
# 2b) manifest newer than both:
# do nothing (unless --force or --manifest-only)
# 3) manifest exists, no template:
# do nothing (unless --force or --manifest-only)
# 4) no manifest, no template: generate w/ warning ("defaults only")
manifest_outofdate = (template_exists and
(template_newer or setup_newer))
force_regen = self.force_manifest or self.manifest_only
manifest_exists = os.path.isfile(self.manifest)
neither_exists = (not template_exists and not manifest_exists)
# Regenerate the manifest if necessary (or if explicitly told to)
if manifest_outofdate or neither_exists or force_regen:
if not template_exists: if not template_exists:
self.warn(("manifest template '%s' does not exist " + self.warn(("manifest template '%s' does not exist " +
"(using default file list)") % "(using default file list)") %
@ -209,10 +239,8 @@ class sdist (Command):
if self.use_defaults: if self.use_defaults:
self.add_defaults() self.add_defaults()
if template_exists: if template_exists:
self.read_template() self.read_template()
if self.prune: if self.prune:
self.prune_file_list() self.prune_file_list()
@ -220,6 +248,10 @@ class sdist (Command):
self.filelist.remove_duplicates() self.filelist.remove_duplicates()
self.write_manifest() self.write_manifest()
# Don't regenerate the manifest, just read it in.
else:
self.read_manifest()
# get_file_list () # get_file_list ()

View File

@ -29,7 +29,6 @@ class sdistTestCase(PyPIRCCommandTestCase):
super(sdistTestCase, self).setUp() super(sdistTestCase, self).setUp()
self.old_path = os.getcwd() self.old_path = os.getcwd()
self.temp_pkg = os.path.join(self.mkdtemp(), 'temppkg') self.temp_pkg = os.path.join(self.mkdtemp(), 'temppkg')
self.tmp_dir = self.mkdtemp()
def tearDown(self): def tearDown(self):
os.chdir(self.old_path) os.chdir(self.old_path)
@ -152,67 +151,6 @@ class sdistTestCase(PyPIRCCommandTestCase):
self.assertEquals(result, self.assertEquals(result,
['fake-1.0.tar', 'fake-1.0.tar.gz']) ['fake-1.0.tar', 'fake-1.0.tar.gz'])
def get_cmd(self, metadata=None):
"""Returns a cmd"""
if metadata is None:
metadata = {'name': 'fake', 'version': '1.0',
'url': 'xxx', 'author': 'xxx',
'author_email': 'xxx'}
dist = Distribution(metadata)
dist.script_name = 'setup.py'
dist.packages = ['somecode']
dist.include_package_data = True
cmd = sdist(dist)
cmd.dist_dir = 'dist'
def _warn(*args):
pass
cmd.warn = _warn
return dist, cmd
def test_get_file_list(self):
# make sure MANIFEST is recalculated
dist, cmd = self.get_cmd()
os.chdir(self.tmp_dir)
# filling data_files by pointing files in package_data
os.mkdir(os.path.join(self.tmp_dir, 'somecode'))
self.write_file((self.tmp_dir, 'somecode', '__init__.py'), '#')
self.write_file((self.tmp_dir, 'somecode', 'one.py'), '#')
cmd.ensure_finalized()
cmd.run()
f = open(cmd.manifest)
try:
manifest = [line.strip() for line in f.read().split('\n')
if line.strip() != '']
finally:
f.close()
self.assertEquals(len(manifest), 2)
# adding a file
self.write_file((self.tmp_dir, 'somecode', 'two.py'), '#')
# make sure build_py is reinitinialized, like a fresh run
build_py = dist.get_command_obj('build_py')
build_py.finalized = False
build_py.ensure_finalized()
cmd.run()
f = open(cmd.manifest)
try:
manifest2 = [line.strip() for line in f.read().split('\n')
if line.strip() != '']
finally:
f.close()
# do we have the new file in MANIFEST ?
self.assertEquals(len(manifest2), 3)
self.assert_('two.py' in manifest2[-1])
def test_suite(): def test_suite():
return unittest.makeSuite(sdistTestCase) return unittest.makeSuite(sdistTestCase)

View File

@ -12,6 +12,9 @@ What's New in Python 2.6.6?
Library Library
------- -------
- Issue #8688: Revert regression introduced in 2.6.6rc1 (making Distutils
recalculate MANIFEST every time).
- Issue #5798: Handle select.poll flag oddities properly on OS X. - Issue #5798: Handle select.poll flag oddities properly on OS X.
This fixes test_asynchat and test_smtplib failures on OS X. This fixes test_asynchat and test_smtplib failures on OS X.