[Python-checkins] cpython: Issue #23426: run_setup was broken in distutils.
robert.collins
python-checkins at python.org
Tue Jul 28 05:55:16 CEST 2015
https://hg.python.org/cpython/rev/d8950778e3c2
changeset: 97096:d8950778e3c2
user: Robert Collins <rbtcollins at hp.com>
date: Tue Jul 28 15:55:07 2015 +1200
summary:
Issue #23426: run_setup was broken in distutils.
Patch from Alexander Belopolsky.
files:
Lib/distutils/core.py | 5 +--
Lib/distutils/tests/test_core.py | 30 ++++++++++++++++++++
Misc/NEWS | 3 ++
3 files changed, 35 insertions(+), 3 deletions(-)
diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py
--- a/Lib/distutils/core.py
+++ b/Lib/distutils/core.py
@@ -204,16 +204,15 @@
global _setup_stop_after, _setup_distribution
_setup_stop_after = stop_after
- save_argv = sys.argv
+ save_argv = sys.argv.copy()
g = {'__file__': script_name}
- l = {}
try:
try:
sys.argv[0] = script_name
if script_args is not None:
sys.argv[1:] = script_args
with open(script_name, 'rb') as f:
- exec(f.read(), g, l)
+ exec(f.read(), g)
finally:
sys.argv = save_argv
_setup_stop_after = None
diff --git a/Lib/distutils/tests/test_core.py b/Lib/distutils/tests/test_core.py
--- a/Lib/distutils/tests/test_core.py
+++ b/Lib/distutils/tests/test_core.py
@@ -28,6 +28,21 @@
setup()
"""
+setup_does_nothing = """\
+from distutils.core import setup
+setup()
+"""
+
+
+setup_defines_subclass = """\
+from distutils.core import setup
+from distutils.command.install import install as _install
+
+class install(_install):
+ sub_commands = _install.sub_commands + ['cmd']
+
+setup(cmdclass={'install': install})
+"""
class CoreTestCase(support.EnvironGuard, unittest.TestCase):
@@ -65,6 +80,21 @@
distutils.core.run_setup(
self.write_setup(setup_using___file__))
+ def test_run_setup_preserves_sys_argv(self):
+ # Make sure run_setup does not clobber sys.argv
+ argv_copy = sys.argv.copy()
+ distutils.core.run_setup(
+ self.write_setup(setup_does_nothing))
+ self.assertEqual(sys.argv, argv_copy)
+
+ def test_run_setup_defines_subclass(self):
+ # Make sure the script can use __file__; if that's missing, the test
+ # setup.py script will raise NameError.
+ dist = distutils.core.run_setup(
+ self.write_setup(setup_defines_subclass))
+ install = dist.get_command_obj('install')
+ self.assertIn('cmd', install.sub_commands)
+
def test_run_setup_uses_current_dir(self):
# This tests that the setup script is run with the current directory
# as its own current directory; this was temporarily broken by a
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,6 +13,9 @@
Library
-------
+- Issue #23426: run_setup was broken in distutils.
+ Patch from Alexander Belopolsky.
+
- Issue #17527: Add PATCH to wsgiref.validator. Patch from Luca Sbardella.
- Issue #13938: 2to3 converts StringTypes to a tuple. Patch from Mark Hammond.
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list