Issue #23426: run_setup was broken in distutils.

Patch from Alexander Belopolsky.
This commit is contained in:
Robert Collins 2015-07-28 15:55:07 +12:00
parent 9c11d91b50
commit c6d9228290
3 changed files with 35 additions and 3 deletions

View file

@ -204,16 +204,15 @@ def run_setup (script_name, script_args=None, stop_after="run"):
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

View file

@ -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 @@ def test_run_setup_provides_file(self):
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

View file

@ -13,6 +13,9 @@ Core and Builtins
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.