aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan H. Holek <stefan@epy.co.at>2012-10-08 19:52:32 +0200
committerStefan H. Holek <stefan@epy.co.at>2012-10-08 19:52:32 +0200
commitd76ec4bfdf2fe9a2bced5ca2a3610831020453c6 (patch)
tree77ab3132075646f1755d5c72cd9e95087651dc57
parent6851d4e38e1e4e5a2bbbf2556523fd19675cdbf7 (diff)
downloadexternal_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-xsetuptools/command/sdist.py27
-rw-r--r--setuptools/tests/test_sdist.py60
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__)