[Python-checkins] distutils2: Port fix for #8688

tarek.ziade python-checkins at python.org
Thu Aug 19 08:34:13 CEST 2010


tarek.ziade pushed 5abba4a77f5a to distutils2:

http://hg.python.org/distutils2/rev/5abba4a77f5a
changeset:   559:5abba4a77f5a
user:        ?ric Araujo <merwok at netwok.org>
date:        Sat Aug 14 06:18:22 2010 +0200
summary:     Port fix for #8688
files:       src/distutils2/manifest.py, src/distutils2/tests/test_sdist.py

diff --git a/src/distutils2/manifest.py b/src/distutils2/manifest.py
--- a/src/distutils2/manifest.py
+++ b/src/distutils2/manifest.py
@@ -96,9 +96,24 @@
         by 'add_defaults()' and 'read_template()') to the manifest file
         named by 'self.manifest'.
         """
+        if os.path.isfile(path):
+            fp = open(path)
+            try:
+                first_line = fp.readline()
+            finally:
+                fp.close()
+
+            if first_line != '# file GENERATED by distutils, do NOT edit\n':
+                logging.info("not writing to manually maintained "
+                             "manifest file '%s'", path)
+                return
+
         self.sort()
         self.remove_duplicates()
-        write_file(path, self.files)
+        content = self.files[:]
+        content.insert(0, '# file GENERATED by distutils, do NOT edit')
+        logging.info("writing manifest file '%s'", path)
+        write_file(path, content)
 
     def read(self, path):
         """Read the manifest file (named by 'self.manifest') and use it to
diff --git a/src/distutils2/tests/test_sdist.py b/src/distutils2/tests/test_sdist.py
--- a/src/distutils2/tests/test_sdist.py
+++ b/src/distutils2/tests/test_sdist.py
@@ -45,6 +45,7 @@
 """
 
 MANIFEST = """\
+# file GENERATED by distutils, do NOT edit
 README
 inroot.txt
 setup.py
@@ -345,17 +346,76 @@
             archive.close()
 
     def test_get_file_list(self):
+        # make sure MANIFEST is recalculated
         dist, cmd = self.get_cmd()
-        cmd.finalize_options()
-        cmd.template = os.path.join(self.tmp_dir, 'MANIFEST.in')
-        f = open(cmd.template, 'w')
+
+        # filling data_files by pointing files in package_data
+        dist.package_data = {'somecode': ['*.txt']}
+        self.write_file((self.tmp_dir, 'somecode', 'doc.txt'), '#')
+        cmd.ensure_finalized()
+        cmd.run()
+
+        f = open(cmd.manifest)
         try:
-            f.write('include MANIFEST.in\n')
+            manifest = [line.strip() for line in f.read().split('\n')
+                        if line.strip() != '']
         finally:
             f.close()
 
-        cmd.get_file_list()
-        self.assertIn('MANIFEST.in', cmd.filelist.files)
+        self.assertEquals(len(manifest), 5)
+
+        # adding a file
+        self.write_file((self.tmp_dir, 'somecode', 'doc2.txt'), '#')
+
+        # make sure build_py is reinitinialized, like a fresh run
+        build_py = dist.get_command_obj('build_py')
+        build_py.finalized = False
+        build_py.ensure_finalized()
+
+        cmd.run()
+
+        f = open(cmd.manifest)
+        try:
+            manifest2 = [line.strip() for line in f.read().split('\n')
+                         if line.strip() != '']
+        finally:
+            f.close()
+
+        # do we have the new file in MANIFEST ?
+        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)

--
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list