From 563220b711a294a90472c49a795bc5eb0dbce93a Mon Sep 17 00:00:00 2001 From: "Eric N. Vander Weele" Date: Mon, 18 May 2020 17:12:07 -0400 Subject: [PATCH] config: Normalize paths in CLI-specified config relative to config dir Paths specified in configuration files should be relative to the directory where the configuration file resides. Formerly, paths were normalized relative to the current working directory where `flake8` was invoked. The former behavior was not expected, especially for directory structures with subprojects each having their own configuration. --- src/flake8/options/config.py | 2 +- tests/unit/test_merged_config_parser.py | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/flake8/options/config.py b/src/flake8/options/config.py index c258fec..6c66d89 100644 --- a/src/flake8/options/config.py +++ b/src/flake8/options/config.py @@ -265,7 +265,7 @@ class MergedConfigParser(object): return {} LOG.debug("Parsing CLI configuration files.") - return self._parse_config(config) + return self._parse_config(config, os.path.dirname(config_path)) def merge_user_and_local_config(self): """Merge the parsed user and local configuration files. diff --git a/tests/unit/test_merged_config_parser.py b/tests/unit/test_merged_config_parser.py index 41885e4..d446ad8 100644 --- a/tests/unit/test_merged_config_parser.py +++ b/tests/unit/test_merged_config_parser.py @@ -31,15 +31,16 @@ def test_parse_cli_config(optmanager, config_finder): action='count') parser = config.MergedConfigParser(optmanager, config_finder) - parsed_config = parser.parse_cli_config( - 'tests/fixtures/config_files/cli-specified.ini' - ) + config_file = 'tests/fixtures/config_files/cli-specified.ini' + parsed_config = parser.parse_cli_config(config_file) + + config_dir = os.path.dirname(config_file) assert parsed_config == { 'ignore': ['E123', 'W234', 'E111'], 'exclude': [ - os.path.abspath('foo/'), - os.path.abspath('bar/'), - os.path.abspath('bogus/'), + os.path.abspath(os.path.join(config_dir, 'foo/')), + os.path.abspath(os.path.join(config_dir, 'bar/')), + os.path.abspath(os.path.join(config_dir, 'bogus/')), ], 'quiet': 1, }