diff options
-rw-r--r-- | CHANGES.rst | 5 | ||||
-rw-r--r-- | coverage/config.py | 8 | ||||
-rw-r--r-- | tests/test_config.py | 15 |
3 files changed, 27 insertions, 1 deletions
diff --git a/CHANGES.rst b/CHANGES.rst index ced70268..85db3b2e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -17,10 +17,15 @@ Change history for Coverage.py Unreleased (might become 4.6) ----------------------------- +- The location of the configuration file can now be specified with a + `COVERAGE_RCFILE` environment variable, as requested in `issue 650`_. + - A new warning (already-imported) is issued if measurable files have already been imported before coverage.py started measurement. See :ref:`cmd_warnings` for more information. +.. _issue 650: https://bitbucket.org/ned/coveragepy/issues/650/allow-setting-configuration-file-location + .. _changes_451: diff --git a/coverage/config.py b/coverage/config.py index 260dafd4..285cb219 100644 --- a/coverage/config.py +++ b/coverage/config.py @@ -447,6 +447,12 @@ def config_files_to_try(config_file): config_file = True specified_file = (config_file is not True) if not specified_file: + # No file was specified. Check COVERAGE_RCFILE. + config_file = os.environ.get('COVERAGE_RCFILE') + if config_file: + specified_file = True + if not specified_file: + # Still no file specified. Default to .coveragerc config_file = ".coveragerc" files_to_try = [ (config_file, True, specified_file), @@ -483,7 +489,7 @@ def read_coverage_config(config_file, **kwargs): config_read = config.from_file(fname, our_file=our_file) if config_read: break - if our_file and specified_file: + if specified_file: raise CoverageException("Couldn't read '%s' as a config file" % fname) # 3) from environment variables: diff --git a/tests/test_config.py b/tests/test_config.py index 0b4d40b6..bbfa4677 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -103,6 +103,21 @@ class ConfigTest(CoverageTest): cov = coverage.Coverage() self.assertEqual(cov.config.debug, ["dataio", "pids", "callers", "fooey"]) + def test_rcfile_from_environment(self): + self.make_file("here.ini", """\ + [run] + data_file = overthere.dat + """) + self.set_environ("COVERAGE_RCFILE", "here.ini") + cov = coverage.Coverage() + self.assertEqual(cov.config.data_file, "overthere.dat") + + def test_missing_rcfile_from_environment(self): + self.set_environ("COVERAGE_RCFILE", "nowhere.ini") + msg = "Couldn't read 'nowhere.ini' as a config file" + with self.assertRaisesRegex(CoverageException, msg): + coverage.Coverage() + def test_parse_errors(self): # Im-parsable values raise CoverageException, with details. bad_configs_and_msgs = [ |