From 2413e038c41927b448f92062bdbc40e23d4a2809 Mon Sep 17 00:00:00 2001 From: Neal Norwitz Date: Sat, 2 Jun 2007 18:53:07 +0000 Subject: [PATCH] Backport 55731: SF 1668596/1720897: distutils now copies data files even if package_dir is empty. --- Lib/distutils/command/build_py.py | 4 +++- Lib/distutils/tests/test_build_py.py | 35 ++++++++++++++++++++++++++++ Misc/ACKS | 1 + Misc/NEWS | 3 +++ 4 files changed, 42 insertions(+), 1 deletion(-) diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py index 621bcb4af3c..b9f39bae79c 100644 --- a/Lib/distutils/command/build_py.py +++ b/Lib/distutils/command/build_py.py @@ -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 = [ diff --git a/Lib/distutils/tests/test_build_py.py b/Lib/distutils/tests/test_build_py.py index 78e4c55ed48..54a4ed80fd3 100644 --- a/Lib/distutils/tests/test_build_py.py +++ b/Lib/distutils/tests/test_build_py.py @@ -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) diff --git a/Misc/ACKS b/Misc/ACKS index 58dab22d024..d39442eeb72 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -155,6 +155,7 @@ Jonathan Dasteel John DeGood Vincent Delft Roger Dev +Raghuram Devarakonda Toby Dickenson Yves Dionne Daniel Dittmar diff --git a/Misc/NEWS b/Misc/NEWS index 4d1ca27a3ce..a397e4d9fe6 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -12,6 +12,9 @@ What's New in Python 2.5.2c1? Library ------- +- SF 1668596/1720897: distutils now copies data files + even if package_dir is empty. + - Fix bug in marshal where bad data would cause a segfault due to lack of an infinite recursion check.