Kaydet (Commit) 2a1838b9 authored tarafından Andrew Kuchling's avatar Andrew Kuchling

Issue #19544 and Issue #1180: Restore global option to ignore …

Issue #19544 and Issue #1180: Restore global option to ignore  ~/.pydistutils.cfg in Distutils, accidentally removed in backout of distutils2 changes.
üst ce4179d0
...@@ -239,7 +239,8 @@ tedious and error-prone, so it's usually best to put them in the setup ...@@ -239,7 +239,8 @@ tedious and error-prone, so it's usually best to put them in the setup
configuration file, :file:`setup.cfg`\ ---see section :ref:`setup-config`. If configuration file, :file:`setup.cfg`\ ---see section :ref:`setup-config`. If
you distribute or package many Python module distributions, you might want to you distribute or package many Python module distributions, you might want to
put options that apply to all of them in your personal Distutils configuration put options that apply to all of them in your personal Distutils configuration
file (:file:`~/.pydistutils.cfg`). file (:file:`~/.pydistutils.cfg`). If you want to temporarily disable
this file, you can pass the :option:`--no-user-cfg` option to :file:`setup.py`.
There are three steps to building a binary RPM package, all of which are There are three steps to building a binary RPM package, all of which are
handled automatically by the Distutils: handled automatically by the Distutils:
......
...@@ -128,8 +128,9 @@ def setup (**attrs): ...@@ -128,8 +128,9 @@ def setup (**attrs):
if _setup_stop_after == "config": if _setup_stop_after == "config":
return dist return dist
# Parse the command line; any command-line errors are the end user's # Parse the command line and override config files; any
# fault, so turn them into SystemExit to suppress tracebacks. # command-line errors are the end user's fault, so turn them into
# SystemExit to suppress tracebacks.
try: try:
ok = dist.parse_command_line() ok = dist.parse_command_line()
except DistutilsArgError as msg: except DistutilsArgError as msg:
......
...@@ -52,7 +52,9 @@ class Distribution: ...@@ -52,7 +52,9 @@ class Distribution:
('quiet', 'q', "run quietly (turns verbosity off)"), ('quiet', 'q', "run quietly (turns verbosity off)"),
('dry-run', 'n', "don't actually do anything"), ('dry-run', 'n', "don't actually do anything"),
('help', 'h', "show detailed help message"), ('help', 'h', "show detailed help message"),
] ('no-user-cfg', None,
'ignore pydistutils.cfg in your home directory'),
]
# 'common_usage' is a short (2-3 line) string describing the common # 'common_usage' is a short (2-3 line) string describing the common
# usage of the setup script. # usage of the setup script.
...@@ -259,6 +261,22 @@ Common commands: (see '--help-commands' for more) ...@@ -259,6 +261,22 @@ Common commands: (see '--help-commands' for more)
else: else:
sys.stderr.write(msg + "\n") sys.stderr.write(msg + "\n")
# no-user-cfg is handled before other command line args
# because other args override the config files, and this
# one is needed before we can load the config files.
# If attrs['script_args'] wasn't passed, assume false.
#
# This also make sure we just look at the global options
self.want_user_cfg = True
if self.script_args is not None:
for arg in self.script_args:
if not arg.startswith('-'):
break
if arg == '--no-user-cfg':
self.want_user_cfg = False
break
self.finalize_options() self.finalize_options()
def get_option_dict(self, command): def get_option_dict(self, command):
...@@ -310,7 +328,10 @@ Common commands: (see '--help-commands' for more) ...@@ -310,7 +328,10 @@ Common commands: (see '--help-commands' for more)
Distutils installation directory (ie. where the top-level Distutils installation directory (ie. where the top-level
Distutils __inst__.py file lives), a file in the user's home Distutils __inst__.py file lives), a file in the user's home
directory named .pydistutils.cfg on Unix and pydistutils.cfg directory named .pydistutils.cfg on Unix and pydistutils.cfg
on Windows/Mac, and setup.cfg in the current directory. on Windows/Mac; and setup.cfg in the current directory.
The file in the user's home directory can be disabled with the
--no-user-cfg option.
""" """
files = [] files = []
check_environ() check_environ()
...@@ -330,15 +351,19 @@ Common commands: (see '--help-commands' for more) ...@@ -330,15 +351,19 @@ Common commands: (see '--help-commands' for more)
user_filename = "pydistutils.cfg" user_filename = "pydistutils.cfg"
# And look for the user config file # And look for the user config file
user_file = os.path.join(os.path.expanduser('~'), user_filename) if self.want_user_cfg:
if os.path.isfile(user_file): user_file = os.path.join(os.path.expanduser('~'), user_filename)
files.append(user_file) if os.path.isfile(user_file):
files.append(user_file)
# All platforms support local setup.cfg # All platforms support local setup.cfg
local_file = "setup.cfg" local_file = "setup.cfg"
if os.path.isfile(local_file): if os.path.isfile(local_file):
files.append(local_file) files.append(local_file)
if DEBUG:
self.announce("using config files: %s" % ', '.join(files))
return files return files
def parse_config_files(self, filenames=None): def parse_config_files(self, filenames=None):
......
...@@ -39,6 +39,7 @@ class TestDistribution(Distribution): ...@@ -39,6 +39,7 @@ class TestDistribution(Distribution):
class DistributionTestCase(support.LoggingSilencer, class DistributionTestCase(support.LoggingSilencer,
support.TempdirManager,
support.EnvironGuard, support.EnvironGuard,
unittest.TestCase): unittest.TestCase):
...@@ -213,6 +214,34 @@ class DistributionTestCase(support.LoggingSilencer, ...@@ -213,6 +214,34 @@ class DistributionTestCase(support.LoggingSilencer,
self.assertRaises(ValueError, dist.announce, args, kwargs) self.assertRaises(ValueError, dist.announce, args, kwargs)
def test_find_config_files_disable(self):
# Ticket #1180: Allow user to disable their home config file.
temp_home = self.mkdtemp()
if os.name == 'posix':
user_filename = os.path.join(temp_home, ".pydistutils.cfg")
else:
user_filename = os.path.join(temp_home, "pydistutils.cfg")
with open(user_filename, 'w') as f:
f.write('[distutils]\n')
def _expander(path):
return temp_home
old_expander = os.path.expanduser
os.path.expanduser = _expander
try:
d = Distribution()
all_files = d.find_config_files()
d = Distribution(attrs={'script_args': ['--no-user-cfg']})
files = d.find_config_files()
finally:
os.path.expanduser = old_expander
# make sure --no-user-cfg disables the user cfg file
self.assertEquals(len(all_files)-1, len(files))
class MetadataTestCase(support.TempdirManager, support.EnvironGuard, class MetadataTestCase(support.TempdirManager, support.EnvironGuard,
unittest.TestCase): unittest.TestCase):
......
...@@ -47,6 +47,10 @@ Core and Builtins ...@@ -47,6 +47,10 @@ Core and Builtins
Library Library
------- -------
- Issue #19544 and Issue #1180: Restore global option to ignore
~/.pydistutils.cfg in Distutils, accidentally removed in backout of
distutils2 changes.
- Issue #19523: Closed FileHandler leak which occurred when delay was set. - Issue #19523: Closed FileHandler leak which occurred when delay was set.
- Issue #19544 and #6516: Restore support for --user and --group parameters to - Issue #19544 and #6516: Restore support for --user and --group parameters to
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment