]> granicus.if.org Git - python/commitdiff
SF 1668596/1720897: distutils now copies data files
authorNeal Norwitz <nnorwitz@gmail.com>
Fri, 1 Jun 2007 07:29:12 +0000 (07:29 +0000)
committerNeal Norwitz <nnorwitz@gmail.com>
Fri, 1 Jun 2007 07:29:12 +0000 (07:29 +0000)
even if package_dir is empty.

This needs to be backported.  I'm too tired tonight.  It would be great
if someone backports this if the buildbots are ok with it.  Otherwise,
I will try to get to it tomorrow.

Lib/distutils/command/build_py.py
Lib/distutils/tests/test_build_py.py
Misc/ACKS
Misc/NEWS

index 621bcb4af3cde17304a30aa4975edd3ee47510af..b9f39bae79ccc5d9e99e51f2ec9a18d3e55fac48 100644 (file)
@@ -114,7 +114,9 @@ class build_py (Command):
             build_dir = os.path.join(*([self.build_lib] + package.split('.')))
 
             # Length of path to strip from found files
-            plen = len(src_dir)+1
+            plen = 0
+            if src_dir:
+                plen = len(src_dir)+1
 
             # Strip directory from globbed filenames
             filenames = [
index 78e4c55ed4839584137731b9006f29be631af8a4..54a4ed80fd30bc3a20c370ba7c51b7d0cddf1d31 100644 (file)
@@ -1,10 +1,13 @@
 """Tests for distutils.command.build_py."""
 
 import os
+import sys
+import StringIO
 import unittest
 
 from distutils.command.build_py import build_py
 from distutils.core import Distribution
+from distutils.errors import DistutilsFileError
 
 from distutils.tests import support
 
@@ -53,6 +56,38 @@ class BuildPyTestCase(support.TempdirManager,
         self.assert_("__init__.pyc" in files)
         self.assert_("README.txt" in files)
 
+    def test_empty_package_dir (self):
+        # See SF 1668596/1720897.
+        cwd = os.getcwd()
+
+        # create the distribution files.
+        sources = self.mkdtemp()
+        open(os.path.join(sources, "__init__.py"), "w").close()
+
+        testdir = os.path.join(sources, "doc")
+        os.mkdir(testdir)
+        open(os.path.join(testdir, "testfile"), "w").close()
+
+        os.chdir(sources)
+        sys.stdout = StringIO.StringIO()
+
+        try:
+            dist = Distribution({"packages": ["pkg"],
+                                 "package_dir": {"pkg": ""},
+                                 "package_data": {"pkg": ["doc/*"]}})
+            # script_name need not exist, it just need to be initialized
+            dist.script_name = os.path.join(sources, "setup.py")
+            dist.script_args = ["build"]
+            dist.parse_command_line()
+
+            try:
+                dist.run_commands()
+            except DistutilsFileError:
+                self.fail("failed package_data test when package_dir is ''")
+        finally:
+            # Restore state.
+            os.chdir(cwd)
+            sys.stdout = sys.__stdout__
 
 def test_suite():
     return unittest.makeSuite(BuildPyTestCase)
index b0a0372ae91bcbc7a71e87b302237c9af956750e..41c4f181bd1c6e02789229ab6b9d29d12c9f0442 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -159,6 +159,7 @@ John DeGood
 Vincent Delft
 Erik Demaine
 Roger Dev
+Raghuram Devarakonda
 Toby Dickenson
 Mark Dickinson
 Yves Dionne
index e3577dbebf35893ad3a406c5b49643d40a23b860..33c45ca4bdb7edde88cd6df3f4798d615459dd05 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -220,6 +220,9 @@ Core and builtins
 Library
 -------
 
+- SF 1668596/1720897: distutils now copies data files
+  even if package_dir is empty.
+
 - sha now raises a DeprecationWarning upon import.
 
 - md5 now raises a DeprecationWarning upon import.