diff options
author | Éric Araujo <merwok@netwok.org> | 2011-09-05 15:44:47 (GMT) |
---|---|---|
committer | Éric Araujo <merwok@netwok.org> | 2011-09-05 15:44:47 (GMT) |
commit | b22d1480657b5a9d9b66fd19d022a2e8a16eac56 (patch) | |
tree | ea27c1076ddd907d0a25655aedbce4af40ae8087 | |
parent | 24757851b7f95a4fbb6ecef1354b12c426a0c5e5 (diff) | |
parent | 01307b609d34dde31692b17be4c5fc7364a367f9 (diff) | |
download | cpython-b22d1480657b5a9d9b66fd19d022a2e8a16eac56.zip cpython-b22d1480657b5a9d9b66fd19d022a2e8a16eac56.tar.gz cpython-b22d1480657b5a9d9b66fd19d022a2e8a16eac56.tar.bz2 |
Branch merge
-rw-r--r-- | Lib/distutils/command/sdist.py | 5 | ||||
-rw-r--r-- | Lib/distutils/tests/test_sdist.py | 37 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 38 insertions, 7 deletions
diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py index 21ea61d..a9429a4 100644 --- a/Lib/distutils/command/sdist.py +++ b/Lib/distutils/command/sdist.py @@ -306,7 +306,10 @@ class sdist(Command): try: self.filelist.process_template_line(line) - except DistutilsTemplateError as msg: + # the call above can raise a DistutilsTemplateError for + # malformed lines, or a ValueError from the lower-level + # convert_path function + except (DistutilsTemplateError, ValueError) as msg: self.warn("%s, line %d: %s" % (template.filename, template.current_line, msg)) diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py index f34f786..529b4ef 100644 --- a/Lib/distutils/tests/test_sdist.py +++ b/Lib/distutils/tests/test_sdist.py @@ -15,6 +15,7 @@ from distutils.tests.test_config import PyPIRCCommandTestCase from distutils.errors import DistutilsOptionError from distutils.spawn import find_executable from distutils.log import WARN +from distutils.filelist import FileList from distutils.archive_util import ARCHIVE_FORMATS SETUP_PY = """ @@ -78,9 +79,6 @@ class SDistTestCase(PyPIRCCommandTestCase): dist.include_package_data = True cmd = sdist(dist) cmd.dist_dir = 'dist' - def _warn(*args): - pass - cmd.warn = _warn return dist, cmd @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') @@ -235,7 +233,8 @@ class SDistTestCase(PyPIRCCommandTestCase): # with the `check` subcommand cmd.ensure_finalized() cmd.run() - warnings = self.get_logs(WARN) + warnings = [msg for msg in self.get_logs(WARN) if + msg.startswith('warning: check:')] self.assertEqual(len(warnings), 2) # trying with a complete set of metadata @@ -244,7 +243,8 @@ class SDistTestCase(PyPIRCCommandTestCase): cmd.ensure_finalized() cmd.metadata_check = 0 cmd.run() - warnings = self.get_logs(WARN) + warnings = [msg for msg in self.get_logs(WARN) if + msg.startswith('warning: check:')] self.assertEqual(len(warnings), 0) def test_check_metadata_deprecated(self): @@ -266,7 +266,6 @@ class SDistTestCase(PyPIRCCommandTestCase): self.assertEqual(len(output), num_formats) def test_finalize_options(self): - dist, cmd = self.get_cmd() cmd.finalize_options() @@ -286,6 +285,32 @@ class SDistTestCase(PyPIRCCommandTestCase): cmd.formats = 'supazipa' self.assertRaises(DistutilsOptionError, cmd.finalize_options) + # the following tests make sure there is a nice error message instead + # of a traceback when parsing an invalid manifest template + + def _test_template(self, content): + dist, cmd = self.get_cmd() + os.chdir(self.tmp_dir) + self.write_file('MANIFEST.in', content) + cmd.ensure_finalized() + cmd.filelist = FileList() + cmd.read_template() + warnings = self.get_logs(WARN) + self.assertEqual(len(warnings), 1) + + def test_invalid_template_unknown_command(self): + self._test_template('taunt knights *') + + def test_invalid_template_wrong_arguments(self): + # this manifest command takes one argument + self._test_template('prune') + + @unittest.skipIf(os.name != 'nt', 'test relevant for Windows only') + def test_invalid_template_wrong_path(self): + # on Windows, trailing slashes are not allowed + # this used to crash instead of raising a warning: #8286 + self._test_template('include examples/') + @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') def test_get_file_list(self): # make sure MANIFEST is recalculated @@ -271,6 +271,9 @@ Core and Builtins Library ------- +- Issue #8286: The distutils command sdist will print a warning message instead + of crashing when an invalid path is given in the manifest template. + - Issue #12841: tarfile unnecessarily checked the existence of numerical user and group ids on extraction. If one of them did not exist the respective id of the current user (i.e. root) was used for the file and ownership |