From c7c71ff87cf4e8083aaae9564d2f1785f36fd3dc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tarek=20Ziad=C3=A9?= Date: Tue, 27 Oct 2009 23:12:01 +0000 Subject: Merged revisions 75893 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r75893 | tarek.ziade | 2009-10-28 00:06:10 +0100 (Wed, 28 Oct 2009) | 1 line Fixed #1180: Option to ignore ~/.pydistutils.cfg in Distutils ........ --- Doc/ACKS.txt | 1 + Doc/distutils/builtdist.rst | 3 ++- Doc/install/index.rst | 3 +++ Lib/distutils/core.py | 5 +++-- Lib/distutils/dist.py | 35 ++++++++++++++++++++++++++++++----- Lib/distutils/tests/test_dist.py | 32 +++++++++++++++++++++++++++++++- Misc/NEWS | 3 +++ 7 files changed, 73 insertions(+), 9 deletions(-) diff --git a/Doc/ACKS.txt b/Doc/ACKS.txt index 0d796ad..2dd3b55 100644 --- a/Doc/ACKS.txt +++ b/Doc/ACKS.txt @@ -208,6 +208,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 diff --git a/Doc/distutils/builtdist.rst b/Doc/distutils/builtdist.rst index e58937d..c7b756b 100644 --- a/Doc/distutils/builtdist.rst +++ b/Doc/distutils/builtdist.rst @@ -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: diff --git a/Doc/install/index.rst b/Doc/install/index.rst index 0751291..2231058 100644 --- a/Doc/install/index.rst +++ b/Doc/install/index.rst @@ -691,6 +691,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) diff --git a/Lib/distutils/core.py b/Lib/distutils/core.py index 6e48920..95c0357 100644 --- a/Lib/distutils/core.py +++ b/Lib/distutils/core.py @@ -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 as msg: diff --git a/Lib/distutils/dist.py b/Lib/distutils/dist.py index 1c1ea47..90af6e2 100644 --- a/Lib/distutils/dist.py +++ b/Lib/distutils/dist.py @@ -53,7 +53,9 @@ 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 # usage of the setup script. @@ -260,6 +262,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): @@ -311,7 +329,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() @@ -331,15 +352,19 @@ Common commands: (see '--help-commands' for more) user_filename = "pydistutils.cfg" # And look for the user config file - user_file = os.path.join(os.path.expanduser('~'), user_filename) - if os.path.isfile(user_file): - files.append(user_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) # All platforms support local setup.cfg local_file = "setup.cfg" 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): diff --git a/Lib/distutils/tests/test_dist.py b/Lib/distutils/tests/test_dist.py index be1010c..b1b184e 100644 --- a/Lib/distutils/tests/test_dist.py +++ b/Lib/distutils/tests/test_dist.py @@ -37,7 +37,8 @@ class TestDistribution(Distribution): return self._config_files -class DistributionTestCase(support.LoggingSilencer, +class DistributionTestCase(support.TempdirManager, + support.LoggingSilencer, support.EnvironGuard, unittest.TestCase): @@ -180,6 +181,35 @@ class DistributionTestCase(support.LoggingSilencer, 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): diff --git a/Misc/NEWS b/Misc/NEWS index edbe964..96320f7 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -117,6 +117,9 @@ C-API 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 an uppercase. -- cgit v0.12