changeset: 70706:5940d2d82dee user: Éric Araujo date: Mon Jun 06 21:55:43 2011 +0200 files: Lib/packaging/command/sdist.py Lib/packaging/tests/test_command_sdist.py Lib/packaging/tests/test_create.py description: Fix sdist to always include setup.cfg (#11092), to comply with the spec diff -r 5853356e2359 -r 5940d2d82dee Lib/packaging/command/sdist.py --- a/Lib/packaging/command/sdist.py Mon Jun 06 20:59:56 2011 +0200 +++ b/Lib/packaging/command/sdist.py Mon Jun 06 21:55:43 2011 +0200 @@ -201,15 +201,20 @@ self.filelist.write(self.manifest) def add_defaults(self): - """Add all the default files to self.filelist: - - all pure Python modules mentioned in setup script - - all files pointed by package_data (build_py) - - all files defined in data_files. - - all files defined as scripts. - - all C sources listed as part of extensions or C libraries - in the setup script (doesn't catch C headers!) - Everything is optional. + """Add all default files to self.filelist. + + In addition to the setup.cfg file, this will include all files returned + by the get_source_files of every registered command. This will find + Python modules and packages, data files listed in package_data_, + data_files and extra_files, scripts, C sources of extension modules or + C libraries (headers are missing). """ + if os.path.exists('setup.cfg'): + self.filelist.append('setup.cfg') + else: + logger.warning("%s: standard 'setup.cfg' file not found", + self.get_command_name()) + for cmd_name in get_command_names(): try: cmd_obj = self.get_finalized_command(cmd_name) diff -r 5853356e2359 -r 5940d2d82dee Lib/packaging/tests/test_command_sdist.py --- a/Lib/packaging/tests/test_command_sdist.py Mon Jun 06 20:59:56 2011 +0200 +++ b/Lib/packaging/tests/test_command_sdist.py Mon Jun 06 21:55:43 2011 +0200 @@ -34,6 +34,7 @@ MANIFEST = """\ # file GENERATED by packaging, do NOT edit inroot.txt +setup.cfg data%(sep)sdata.dt scripts%(sep)sscript.py some%(sep)sfile.txt @@ -173,6 +174,7 @@ # in package_data dist.package_data = {'': ['*.cfg', '*.dat'], 'somecode': ['*.txt']} + self.write_file((self.tmp_dir, 'setup.cfg'), '#') self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#') self.write_file((self.tmp_dir, 'somecode', 'doc.dat'), '#') @@ -212,8 +214,8 @@ content = zip_file.namelist() # Making sure everything was added. This includes 8 code and data - # files in addition to PKG-INFO. - self.assertEqual(len(content), 9) + # files in addition to PKG-INFO and setup.cfg + self.assertEqual(len(content), 10) # Checking the MANIFEST with open(join(self.tmp_dir, 'MANIFEST')) as fp: @@ -230,7 +232,7 @@ cmd.ensure_finalized() cmd.run() warnings = self.get_logs(logging.WARN) - self.assertEqual(len(warnings), 3) + self.assertEqual(len(warnings), 4) # trying with a complete set of metadata self.loghandler.flush() @@ -242,8 +244,9 @@ # removing manifest generated warnings warnings = [warn for warn in warnings if not warn.endswith('-- skipping')] - # the remaining warning is about the use of the default file list - self.assertEqual(len(warnings), 1) + # the remaining warnings are about the use of the default file list and + # the absence of setup.cfg + self.assertEqual(len(warnings), 2) def test_show_formats(self): __, stdout = captured_stdout(show_formats) diff -r 5853356e2359 -r 5940d2d82dee Lib/packaging/tests/test_create.py --- a/Lib/packaging/tests/test_create.py Mon Jun 06 20:59:56 2011 +0200 +++ b/Lib/packaging/tests/test_create.py Mon Jun 06 21:55:43 2011 +0200 @@ -66,10 +66,15 @@ # building the structure tempdir = self.wdir dirs = ['pkg1', 'data', 'pkg2', 'pkg2/sub'] - files = ['README', 'setup.cfg', 'foo.py', - 'pkg1/__init__.py', 'pkg1/bar.py', - 'data/data1', 'pkg2/__init__.py', - 'pkg2/sub/__init__.py'] + files = [ + 'README', + 'data/data1', + 'foo.py', + 'pkg1/__init__.py', + 'pkg1/bar.py', + 'pkg2/__init__.py', + 'pkg2/sub/__init__.py', + ] for dir_ in dirs: os.mkdir(os.path.join(tempdir, dir_)) @@ -86,8 +91,8 @@ ['pkg1', 'pkg2', 'pkg2.sub']) self.assertEqual(mainprogram.data['modules'], ['foo']) data_fn = os.path.join('data', 'data1') - self.assertEqual(set(mainprogram.data['extra_files']), - set(['setup.cfg', 'README', data_fn])) + self.assertEqual(mainprogram.data['extra_files'], + ['README', data_fn]) def test_convert_setup_py_to_cfg(self): self.write_file((self.wdir, 'setup.py'),