mirror of
				https://github.com/python/cpython.git
				synced 2025-10-30 21:21:22 +00:00 
			
		
		
		
	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.
This commit is contained in:
		
							parent
							
								
									32e2915da5
								
							
						
					
					
						commit
						cfbd630a27
					
				
					 3 changed files with 34 additions and 2 deletions
				
			
		|  | @ -306,7 +306,10 @@ def read_template(self): | ||||||
| 
 | 
 | ||||||
|                 try: |                 try: | ||||||
|                     self.filelist.process_template_line(line) |                     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, |                     self.warn("%s, line %d: %s" % (template.filename, | ||||||
|                                                    template.current_line, |                                                    template.current_line, | ||||||
|                                                    msg)) |                                                    msg)) | ||||||
|  |  | ||||||
|  | @ -15,6 +15,7 @@ | ||||||
| from distutils.errors import DistutilsOptionError | from distutils.errors import DistutilsOptionError | ||||||
| from distutils.spawn import find_executable | from distutils.spawn import find_executable | ||||||
| from distutils.log import WARN | from distutils.log import WARN | ||||||
|  | from distutils.filelist import FileList | ||||||
| from distutils.archive_util import ARCHIVE_FORMATS | from distutils.archive_util import ARCHIVE_FORMATS | ||||||
| 
 | 
 | ||||||
| SETUP_PY = """ | SETUP_PY = """ | ||||||
|  | @ -265,7 +266,6 @@ def test_show_formats(self): | ||||||
|         self.assertEqual(len(output), num_formats) |         self.assertEqual(len(output), num_formats) | ||||||
| 
 | 
 | ||||||
|     def test_finalize_options(self): |     def test_finalize_options(self): | ||||||
| 
 |  | ||||||
|         dist, cmd = self.get_cmd() |         dist, cmd = self.get_cmd() | ||||||
|         cmd.finalize_options() |         cmd.finalize_options() | ||||||
| 
 | 
 | ||||||
|  | @ -285,6 +285,32 @@ def test_finalize_options(self): | ||||||
|         cmd.formats = 'supazipa' |         cmd.formats = 'supazipa' | ||||||
|         self.assertRaises(DistutilsOptionError, cmd.finalize_options) |         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') |     @unittest.skipUnless(ZLIB_SUPPORT, 'Need zlib support to run') | ||||||
|     def test_get_file_list(self): |     def test_get_file_list(self): | ||||||
|         # make sure MANIFEST is recalculated |         # make sure MANIFEST is recalculated | ||||||
|  |  | ||||||
|  | @ -28,6 +28,9 @@ Core and Builtins | ||||||
| Library | 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 #12636: IDLE reads the coding cookie when executing a Python script. | - Issue #12636: IDLE reads the coding cookie when executing a Python script. | ||||||
| 
 | 
 | ||||||
| - Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi | - Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Éric Araujo
						Éric Araujo