From fe7056240b081ccf51ff08b3a15afbfad52a87ad Mon Sep 17 00:00:00 2001 From: Fred Drake Date: Fri, 4 Apr 2008 11:31:14 +0000 Subject: my previous change did what I said it should not: it changed the current directory to the directory in which the setup.py script lived (which made __file__ wrong) fixed, with test that the script is run in the current directory of the caller --- Lib/distutils/core.py | 1 - Lib/distutils/tests/test_core.py | 54 +++++++++++++++++++++++++++++++++++----- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py index 640d6b5..32b9026 100644 --- a/Lib/distutils/core.py +++ b/Lib/distutils/core.py @@ -212,7 +212,6 @@ def run_setup (script_name, script_args=None, stop_after="run"): save_argv = sys.argv g = {'__file__': script_name} l = {} - os.chdir(os.path.dirname(script_name) or os.curdir) try: try: sys.argv[0] = script_name diff --git a/Lib/distutils/tests/test_core.py b/Lib/distutils/tests/test_core.py index 6de58d9..4356c21 100644 --- a/Lib/distutils/tests/test_core.py +++ b/Lib/distutils/tests/test_core.py @@ -3,6 +3,8 @@ import StringIO import distutils.core import os +import shutil +import sys import test.test_support import unittest @@ -16,21 +18,61 @@ from distutils.core import setup setup() """ +setup_prints_cwd = """\ + +import os +print os.getcwd() + +from distutils.core import setup +setup() +""" + class CoreTestCase(unittest.TestCase): + def setUp(self): + self.old_stdout = sys.stdout + self.cleanup_testfn() + def tearDown(self): - os.remove(test.test_support.TESTFN) + sys.stdout = self.old_stdout + self.cleanup_testfn() + + def cleanup_testfn(self): + path = test.test_support.TESTFN + if os.path.isfile(path): + os.remove(path) + elif os.path.isdir(path): + shutil.rmtree(path) - def write_setup(self, text): - return fn + def write_setup(self, text, path=test.test_support.TESTFN): + open(path, "w").write(text) + return path def test_run_setup_provides_file(self): # Make sure the script can use __file__; if that's missing, the test # setup.py script will raise NameError. - fn = test.test_support.TESTFN - open(fn, "w").write(setup_using___file__) - distutils.core.run_setup(fn) + distutils.core.run_setup( + self.write_setup(setup_using___file__)) + + def test_run_setup_uses_current_dir(self): + # This tests that the setup script is run with the current directory + # as it's own current directory; this was temporarily broken by a + # previous patch when TESTFN did not use the current directory. + sys.stdout = StringIO.StringIO() + cwd = os.getcwd() + + # Create a directory and write the setup.py file there: + os.mkdir(test.test_support.TESTFN) + setup_py = os.path.join(test.test_support.TESTFN, "setup.py") + distutils.core.run_setup( + self.write_setup(setup_prints_cwd, path=setup_py)) + + output = sys.stdout.getvalue() + open("/dev/tty", "w").write("\n\n%r\n\n\n" % (output,)) + if output.endswith("\n"): + output = output[:-1] + self.assertEqual(cwd, output) def test_suite(): -- cgit v0.12