diff options
author | Stefan H. Holek <stefan@epy.co.at> | 2012-10-08 19:52:32 +0200 |
---|---|---|
committer | Stefan H. Holek <stefan@epy.co.at> | 2012-10-08 19:52:32 +0200 |
commit | d76ec4bfdf2fe9a2bced5ca2a3610831020453c6 (patch) | |
tree | 77ab3132075646f1755d5c72cd9e95087651dc57 | |
parent | 6851d4e38e1e4e5a2bbbf2556523fd19675cdbf7 (diff) | |
download | external_python_setuptools-d76ec4bfdf2fe9a2bced5ca2a3610831020453c6.tar.gz external_python_setuptools-d76ec4bfdf2fe9a2bced5ca2a3610831020453c6.tar.bz2 external_python_setuptools-d76ec4bfdf2fe9a2bced5ca2a3610831020453c6.zip |
Read and write manifest in UTF-8 under Python 3. Fixes #303.
--HG--
branch : distribute
extra : rebase_source : 609c654effd2711aa803f6a0e84013294026608f
-rwxr-xr-x | setuptools/command/sdist.py | 27 | ||||
-rw-r--r-- | setuptools/tests/test_sdist.py | 60 |
2 files changed, 87 insertions, 0 deletions
diff --git a/setuptools/command/sdist.py b/setuptools/command/sdist.py index a176f635..d5259c2b 100755 --- a/setuptools/command/sdist.py +++ b/setuptools/command/sdist.py @@ -262,7 +262,34 @@ class sdist(_sdist): self.get_finalized_command('egg_info').save_version_info(dest) + def _manifest_is_not_generated(self): + # check for special comment used in 2.7.1 and higher + if not os.path.isfile(self.manifest): + return False + fp = open(self.manifest, 'rbU') + try: + first_line = fp.readline() + finally: + fp.close() + return first_line != '# file GENERATED by distutils, do NOT edit\n'.encode() + + def read_manifest(self): + """Read the manifest file (named by 'self.manifest') and use it to + fill in 'self.filelist', the list of files to include in the source + distribution. + """ + log.info("reading manifest file '%s'", self.manifest) + manifest = open(self.manifest, 'rbU') + for line in manifest: + if sys.version_info >= (3,): + line = line.decode('UTF-8') + # ignore comments and blank lines + line = line.strip() + if line.startswith('#') or not line: + continue + self.filelist.append(line) + manifest.close() diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 34123545..7e2f0a49 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -104,6 +104,66 @@ class TestSdistTest(unittest.TestCase): self.assertTrue(filename in cmd.filelist.files) + def test_manifest_is_written_in_utf8(self): + # Test for #303. + + # Add file with non-ASCII filename + filename = os.path.join('sdist_test', 'smörbröd.py') + open(filename, 'w').close() + + dist = Distribution(SETUP_ATTRS) + dist.script_name = 'setup.py' + cmd = sdist(dist) + cmd.ensure_finalized() + + # squelch output + old_stdout = sys.stdout + old_stderr = sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + try: + cmd.run() + finally: + sys.stdout = old_stdout + sys.stderr = old_stderr + + manifest = open(os.path.join('sdist_test.egg-info', 'SOURCES.txt'), 'rbU') + contents = manifest.read() + manifest.close() + self.assertTrue(len(contents)) + + # This must not fail: + contents.decode('UTF-8') + + def test_manifest_is_read_in_utf8(self): + # Test for #303. + + # Add file with non-ASCII filename + filename = os.path.join('sdist_test', 'smörbröd.py') + open(filename, 'w').close() + + dist = Distribution(SETUP_ATTRS) + dist.script_name = 'setup.py' + cmd = sdist(dist) + cmd.ensure_finalized() + + # squelch output + old_stdout = sys.stdout + old_stderr = sys.stderr + sys.stdout = StringIO() + sys.stderr = StringIO() + try: + cmd.run() + finally: + sys.stdout = old_stdout + sys.stderr = old_stderr + + cmd.filelist.files = [] + cmd.manifest = os.path.join('sdist_test.egg-info', 'SOURCES.txt') + cmd.read_manifest() + + self.assertTrue(filename in cmd.filelist.files) + def test_suite(): return unittest.defaultTestLoader.loadTestsFromName(__name__) |