mirror of https://github.com/python/cpython
Fixed #1180: Option to ignore ~/.pydistutils.cfg in Distutils
This commit is contained in:
parent
4e1be94bc6
commit
40b998b05d
|
@ -207,6 +207,7 @@ docs@python.org), and we'll be glad to correct the problem.
|
|||
* Mats Wichmann
|
||||
* Gerry Wiener
|
||||
* Timothy Wild
|
||||
* Paul Winkler
|
||||
* Collin Winter
|
||||
* Blake Winton
|
||||
* Dan Wolfe
|
||||
|
|
|
@ -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
|
||||
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
|
||||
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
|
||||
handled automatically by the Distutils:
|
||||
|
|
|
@ -694,6 +694,9 @@ And on Windows, the configuration files are:
|
|||
| local | :file:`setup.cfg` | \(3) |
|
||||
+--------------+-------------------------------------------------+-------+
|
||||
|
||||
On all platforms, the "personal" file can be temporarily disabled by
|
||||
passing the `--no-user-cfg` option.
|
||||
|
||||
Notes:
|
||||
|
||||
(1)
|
||||
|
|
|
@ -129,8 +129,9 @@ def setup (**attrs):
|
|||
if _setup_stop_after == "config":
|
||||
return dist
|
||||
|
||||
# Parse the command line; any command-line errors are the end user's
|
||||
# fault, so turn them into SystemExit to suppress tracebacks.
|
||||
# Parse the command line and override config files; any
|
||||
# command-line errors are the end user's fault, so turn them into
|
||||
# SystemExit to suppress tracebacks.
|
||||
try:
|
||||
ok = dist.parse_command_line()
|
||||
except DistutilsArgError, msg:
|
||||
|
|
|
@ -56,6 +56,8 @@ class Distribution:
|
|||
('quiet', 'q', "run quietly (turns verbosity off)"),
|
||||
('dry-run', 'n', "don't actually do anything"),
|
||||
('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
|
||||
|
@ -264,6 +266,22 @@ Common commands: (see '--help-commands' for more)
|
|||
else:
|
||||
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()
|
||||
|
||||
def get_option_dict(self, command):
|
||||
|
@ -316,7 +334,10 @@ Common commands: (see '--help-commands' for more)
|
|||
Distutils installation directory (ie. where the top-level
|
||||
Distutils __inst__.py file lives), a file in the user's home
|
||||
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 = []
|
||||
check_environ()
|
||||
|
@ -336,6 +357,7 @@ Common commands: (see '--help-commands' for more)
|
|||
user_filename = "pydistutils.cfg"
|
||||
|
||||
# And look for the user config file
|
||||
if self.want_user_cfg:
|
||||
user_file = os.path.join(os.path.expanduser('~'), user_filename)
|
||||
if os.path.isfile(user_file):
|
||||
files.append(user_file)
|
||||
|
@ -345,6 +367,9 @@ Common commands: (see '--help-commands' for more)
|
|||
if os.path.isfile(local_file):
|
||||
files.append(local_file)
|
||||
|
||||
if DEBUG:
|
||||
self.announce("using config files: %s" % ', '.join(files))
|
||||
|
||||
return files
|
||||
|
||||
def parse_config_files(self, filenames=None):
|
||||
|
|
|
@ -209,6 +209,35 @@ class DistributionTestCase(support.TempdirManager,
|
|||
kwargs = {'level': 'ok2'}
|
||||
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,
|
||||
unittest.TestCase):
|
||||
|
||||
|
|
Loading…
Reference in New Issue