[Python-checkins] cpython (2.7): Warn instead of crashing because of invalid path in MANIFEST.in (#8286).

eric.araujo python-checkins at python.org
Mon Sep 5 17:52:33 CEST 2011


http://hg.python.org/cpython/rev/9cdc845d5f2e
changeset: 72285:9cdc845d5f2e
branch: 2.7
user: Éric Araujo <merwok at netwok.org>
date: Sat Sep 03 00:47:07 2011 +0200
summary:
 Warn instead of crashing because of invalid path in MANIFEST.in (#8286).
sdist used to crash with a full traceback dump instead of printing a
nice warning with the faulty line number.
files:
 Lib/distutils/command/sdist.py | 5 ++-
 Lib/distutils/tests/test_sdist.py | 28 ++++++++++++++++++-
 Misc/NEWS | 3 ++
 3 files changed, 34 insertions(+), 2 deletions(-)
diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py
--- a/Lib/distutils/command/sdist.py
+++ b/Lib/distutils/command/sdist.py
@@ -320,7 +320,10 @@
 
 try:
 self.filelist.process_template_line(line)
- except DistutilsTemplateError, 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
--- a/Lib/distutils/tests/test_sdist.py
+++ b/Lib/distutils/tests/test_sdist.py
@@ -29,6 +29,7 @@
 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 = """
@@ -272,7 +273,6 @@
 self.assertEqual(len(output), num_formats)
 
 def test_finalize_options(self):
-
 dist, cmd = self.get_cmd()
 cmd.finalize_options()
 
@@ -342,6 +342,32 @@
 finally:
 archive.close()
 
+ # 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, "requires zlib")
 def test_get_file_list(self):
 # make sure MANIFEST is recalculated
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -40,6 +40,9 @@
 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 #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
 now respect a --skip-build option given to bdist.
 
-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /