summaryrefslogtreecommitdiffstats
path: root/Lib/distutils
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2010-08-14 02:30:34 (GMT)
committerÉric Araujo <merwok@netwok.org>2010-08-14 02:30:34 (GMT)
commitda668ff24fc7d959ad2938f128281dcc49d168d8 (patch)
treec3472aa284598314ea66b2319d744bf4d9ef6b53 /Lib/distutils
parente406ef41b162698478df3f7a000999debb7135f7 (diff)
downloadcpython-da668ff24fc7d959ad2938f128281dcc49d168d8.zip
cpython-da668ff24fc7d959ad2938f128281dcc49d168d8.tar.gz
cpython-da668ff24fc7d959ad2938f128281dcc49d168d8.tar.bz2
Use a marker in generated MANIFEST files, don't touch files without it. Fixes #8688.
Diffstat (limited to 'Lib/distutils')
-rw-r--r--Lib/distutils/command/sdist.py17
-rw-r--r--Lib/distutils/tests/test_sdist.py36
2 files changed, 49 insertions, 4 deletions
diff --git a/Lib/distutils/command/sdist.py b/Lib/distutils/command/sdist.py
index f51d72f..818a452 100644
--- a/Lib/distutils/command/sdist.py
+++ b/Lib/distutils/command/sdist.py
@@ -335,8 +335,21 @@ class sdist(Command):
by 'add_defaults()' and 'read_template()') to the manifest file
named by 'self.manifest'.
"""
- self.execute(file_util.write_file,
- (self.manifest, self.filelist.files),
+ if os.path.isfile(self.manifest):
+ fp = open(self.manifest)
+ try:
+ first_line = fp.readline()
+ finally:
+ fp.close()
+
+ if first_line != '# file GENERATED by distutils, do NOT edit\n':
+ log.info("not writing to manually maintained "
+ "manifest file '%s'" % self.manifest)
+ return
+
+ content = self.filelist.files[:]
+ content.insert(0, '# file GENERATED by distutils, do NOT edit')
+ self.execute(file_util.write_file, (self.manifest, content),
"writing manifest file '%s'" % self.manifest)
def read_manifest(self):
diff --git a/Lib/distutils/tests/test_sdist.py b/Lib/distutils/tests/test_sdist.py
index f95035d..209aa59 100644
--- a/Lib/distutils/tests/test_sdist.py
+++ b/Lib/distutils/tests/test_sdist.py
@@ -29,6 +29,7 @@ setup(name='fake')
"""
MANIFEST = """\
+# file GENERATED by distutils, do NOT edit
README
inroot.txt
setup.py
@@ -294,7 +295,7 @@ class SDistTestCase(PyPIRCCommandTestCase):
finally:
f.close()
- self.assertEquals(len(manifest), 4)
+ self.assertEquals(len(manifest), 5)
# adding a file
self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#')
@@ -314,9 +315,40 @@ class SDistTestCase(PyPIRCCommandTestCase):
f.close()
# do we have the new file in MANIFEST ?
- self.assertEquals(len(manifest2), 5)
+ self.assertEquals(len(manifest2), 6)
self.assertIn('doc2.txt', manifest2[-1])
+ def test_manifest_marker(self):
+ # check that autogenerated MANIFESTs have a marker
+ dist, cmd = self.get_cmd()
+ cmd.ensure_finalized()
+ cmd.run()
+
+ f = open(cmd.manifest)
+ try:
+ manifest = [line.strip() for line in f.read().split('\n')
+ if line.strip() != '']
+ finally:
+ f.close()
+
+ self.assertEqual(manifest[0],
+ '# file GENERATED by distutils, do NOT edit')
+
+ def test_manual_manifest(self):
+ # check that a MANIFEST without a marker is left alone
+ dist, cmd = self.get_cmd()
+ cmd.ensure_finalized()
+ self.write_file((self.tmp_dir, cmd.manifest), 'README.manual')
+ cmd.run()
+
+ f = open(cmd.manifest)
+ try:
+ manifest = [line.strip() for line in f.read().split('\n')
+ if line.strip() != '']
+ finally:
+ f.close()
+
+ self.assertEqual(manifest, ['README.manual'])
def test_suite():
return unittest.makeSuite(SDistTestCase)