Kaydet (Commit) 40b998b0 authored tarafından Tarek Ziadé's avatar Tarek Ziadé

Fixed #1180: Option to ignore ~/.pydistutils.cfg in Distutils

üst 4e1be94b
...@@ -207,6 +207,7 @@ docs@python.org), and we'll be glad to correct the problem. ...@@ -207,6 +207,7 @@ docs@python.org), and we'll be glad to correct the problem.
* Mats Wichmann * Mats Wichmann
* Gerry Wiener * Gerry Wiener
* Timothy Wild * Timothy Wild
* Paul Winkler
* Collin Winter * Collin Winter
* Blake Winton * Blake Winton
* Dan Wolfe * Dan Wolfe
......
...@@ -241,7 +241,8 @@ tedious and error-prone, so it's usually best to put them in the setup ...@@ -241,7 +241,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 --no-user-cfg option to 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:
......
...@@ -694,6 +694,9 @@ And on Windows, the configuration files are: ...@@ -694,6 +694,9 @@ And on Windows, the configuration files are:
| local | :file:`setup.cfg` | \(3) | | local | :file:`setup.cfg` | \(3) |
+--------------+-------------------------------------------------+-------+ +--------------+-------------------------------------------------+-------+
On all platforms, the "personal" file can be temporarily disabled by
passing the `--no-user-cfg` option.
Notes: Notes:
(1) (1)
......
...@@ -129,8 +129,9 @@ def setup (**attrs): ...@@ -129,8 +129,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, msg: except DistutilsArgError, msg:
......
...@@ -56,7 +56,9 @@ class Distribution: ...@@ -56,7 +56,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.
...@@ -264,6 +266,22 @@ Common commands: (see '--help-commands' for more) ...@@ -264,6 +266,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):
...@@ -316,7 +334,10 @@ Common commands: (see '--help-commands' for more) ...@@ -316,7 +334,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()
...@@ -336,15 +357,19 @@ Common commands: (see '--help-commands' for more) ...@@ -336,15 +357,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):
......
...@@ -209,6 +209,35 @@ class DistributionTestCase(support.TempdirManager, ...@@ -209,6 +209,35 @@ class DistributionTestCase(support.TempdirManager,
kwargs = {'level': 'ok2'} kwargs = {'level': 'ok2'}
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 = distutils.dist.Distribution()
all_files = d.find_config_files()
d = distutils.dist.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):
......
...@@ -427,6 +427,9 @@ Core and Builtins ...@@ -427,6 +427,9 @@ Core and Builtins
Library Library
------- -------
- Issue #1180: Added a new global option to ignore ~/.pydistutils.cfg in
Distutils.
- Issue #7218: Fix test_site for win32, the directory comparison was done with - Issue #7218: Fix test_site for win32, the directory comparison was done with
an uppercase. an uppercase.
......
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