diff options
author | Stefan H. Holek <stefan@epy.co.at> | 2012-10-08 19:48:19 +0200 |
---|---|---|
committer | Stefan H. Holek <stefan@epy.co.at> | 2012-10-08 19:48:19 +0200 |
commit | 6851d4e38e1e4e5a2bbbf2556523fd19675cdbf7 (patch) | |
tree | a9b9c43b92f7d844d9f6334aa1426c32b0c4c8ae | |
parent | 077a69aef0973333cafe4c7548dceb5418d1c36f (diff) | |
download | external_python_setuptools-6851d4e38e1e4e5a2bbbf2556523fd19675cdbf7.tar.gz external_python_setuptools-6851d4e38e1e4e5a2bbbf2556523fd19675cdbf7.tar.bz2 external_python_setuptools-6851d4e38e1e4e5a2bbbf2556523fd19675cdbf7.zip |
Make sure the manifest never contains decomposed UTF-8.
--HG--
branch : distribute
extra : rebase_source : 0e0fb3beac56f66f12670ec69ebfd3996d12d912
-rwxr-xr-x | setuptools/command/egg_info.py | 14 | ||||
-rw-r--r-- | setuptools/tests/test_sdist.py | 37 |
2 files changed, 48 insertions, 3 deletions
diff --git a/setuptools/command/egg_info.py b/setuptools/command/egg_info.py index 46cdf4e0..e932d46a 100755 --- a/setuptools/command/egg_info.py +++ b/setuptools/command/egg_info.py @@ -287,6 +287,19 @@ class FileList(FileList): +def compose(path): + # Apple's HFS Plus returns decomposed UTF-8. Since just about + # everyone else chokes on it, we must make sure to return fully + # composed UTF-8 only. + if sys.getfilesystemencoding().lower() == 'utf-8': + from unicodedata import normalize + if sys.version_info >= (3,): + path = normalize('NFC', path) + else: + path = normalize('NFC', path.decode('utf-8')).encode('utf-8') + return path + + class manifest_maker(sdist): template = "MANIFEST.in" @@ -311,6 +324,7 @@ class manifest_maker(sdist): self.prune_file_list() self.filelist.sort() self.filelist.remove_duplicates() + self.filelist.files = [compose(path) for path in self.filelist.files] self.write_manifest() def write_manifest (self): diff --git a/setuptools/tests/test_sdist.py b/setuptools/tests/test_sdist.py index 8d9ed922..34123545 100644 --- a/setuptools/tests/test_sdist.py +++ b/setuptools/tests/test_sdist.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- """sdist tests""" @@ -74,6 +75,36 @@ class TestSdistTest(unittest.TestCase): manifest = cmd.filelist.files - self.assert_(os.path.join('sdist_test', 'a.txt') in manifest) - self.assert_(os.path.join('sdist_test', 'b.txt') in manifest) - self.assert_(os.path.join('sdist_test', 'c.rst') not in manifest) + self.assertTrue(os.path.join('sdist_test', 'a.txt') in manifest) + self.assertTrue(os.path.join('sdist_test', 'b.txt') in manifest) + self.assertTrue(os.path.join('sdist_test', 'c.rst') not in manifest) + + def test_filelist_is_fully_composed(self): + # Test for #303. Requires HFS Plus to fail. + + # 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 + + self.assertTrue(filename in cmd.filelist.files) + + +def test_suite(): + return unittest.defaultTestLoader.loadTestsFromName(__name__) + |