[Python-checkins] r83994 - in python/branches/release31-maint: Doc/distutils/sourcedist.rst Lib/distutils/command/sdist.py Lib/distutils/tests/test_sdist.py Misc/NEWS

eric.araujo python-checkins at python.org
Sat Aug 14 04:36:26 CEST 2010


Author: eric.araujo
Date: Sat Aug 14 04:36:26 2010
New Revision: 83994

Log:
Merged revisions 83993 via svnmerge from 
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r83993 | eric.araujo | 2010-08-14 04:30:34 +0200 (sam., 14 août 2010) | 2 lines
  
  Use a marker in generated MANIFEST files, don't touch files without it. Fixes #8688.
........


Modified:
   python/branches/release31-maint/   (props changed)
   python/branches/release31-maint/Doc/distutils/sourcedist.rst
   python/branches/release31-maint/Lib/distutils/command/sdist.py
   python/branches/release31-maint/Lib/distutils/tests/test_sdist.py
   python/branches/release31-maint/Misc/NEWS

Modified: python/branches/release31-maint/Doc/distutils/sourcedist.rst
==============================================================================
--- python/branches/release31-maint/Doc/distutils/sourcedist.rst	(original)
+++ python/branches/release31-maint/Doc/distutils/sourcedist.rst	Sat Aug 14 04:36:26 2010
@@ -103,6 +103,10 @@
 :file:`MANIFEST`, you must specify everything: the default set of files
 described above does not apply in this case.
 
+.. versionadded:: 3.2
+   :file:`MANIFEST` files start with a comment indicated they are generated.
+   Files without this comment are not overwritten or removed.
+
 The manifest template has one command per line, where each command specifies a
 set of files to include or exclude from the source distribution.  For an
 example, again we turn to the Distutils' own manifest template::
@@ -187,10 +191,6 @@
 * if neither :file:`MANIFEST` nor :file:`MANIFEST.in` exist, create a manifest
   with just the default file set
 
-* if either :file:`MANIFEST.in` or the setup script (:file:`setup.py`) are more
-  recent than :file:`MANIFEST`, recreate :file:`MANIFEST` by reading
-  :file:`MANIFEST.in`
-
 * use the list of files now in :file:`MANIFEST` (either just generated or read
   in) to create the source distribution archive(s)
 
@@ -205,4 +205,7 @@
 
 :option:`-o` is a shortcut for :option:`--manifest-only`.
 
-
+.. versionchanged:: 3.2
+    An existing generated :file:`MANIFEST` will be regenerated without
+    :command:`sdist` comparing its modification time to the one of
+    :file:`MANIFEST.in` or :file:`setup.py`.

Modified: python/branches/release31-maint/Lib/distutils/command/sdist.py
==============================================================================
--- python/branches/release31-maint/Lib/distutils/command/sdist.py	(original)
+++ python/branches/release31-maint/Lib/distutils/command/sdist.py	Sat Aug 14 04:36:26 2010
@@ -335,8 +335,21 @@
         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):

Modified: python/branches/release31-maint/Lib/distutils/tests/test_sdist.py
==============================================================================
--- python/branches/release31-maint/Lib/distutils/tests/test_sdist.py	(original)
+++ python/branches/release31-maint/Lib/distutils/tests/test_sdist.py	Sat Aug 14 04:36:26 2010
@@ -29,6 +29,7 @@
 """
 
 MANIFEST = """\
+# file GENERATED by distutils, do NOT edit
 README
 inroot.txt
 setup.py
@@ -294,7 +295,7 @@
         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 @@
             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)

Modified: python/branches/release31-maint/Misc/NEWS
==============================================================================
--- python/branches/release31-maint/Misc/NEWS	(original)
+++ python/branches/release31-maint/Misc/NEWS	Sat Aug 14 04:36:26 2010
@@ -93,6 +93,10 @@
 Library
 -------
 
+- Issue #8688: MANIFEST files created by distutils now include a magic
+  comment indicating they are generated. Manually maintained MANIFESTs
+  without this marker will not be overwritten or removed.
+
 - Issue #7467: when reading a file from a ZIP archive, its CRC is checked
   and a BadZipfile error is raised if it doesn't match (as used to be the
   case in Python 2.5 and earlier).


More information about the Python-checkins mailing list