mirror of
https://github.com/python/cpython.git
synced 2024-11-24 10:24:35 +08:00
Issue #23426: run_setup was broken in distutils.
Patch from Alexander Belopolsky.
This commit is contained in:
parent
9c11d91b50
commit
c6d9228290
@ -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
|
||||
|
@ -28,6 +28,21 @@ from distutils.core import setup
|
||||
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 @@ class CoreTestCase(support.EnvironGuard, unittest.TestCase):
|
||||
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
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user