diff --git a/src/flake8/options/config.py b/src/flake8/options/config.py index d7519df..7cba936 100644 --- a/src/flake8/options/config.py +++ b/src/flake8/options/config.py @@ -8,6 +8,7 @@ from typing import List from typing import Optional from typing import Tuple +from flake8 import exceptions from flake8.options.manager import OptionManager LOG = logging.getLogger(__name__) @@ -60,7 +61,10 @@ def load_config( cfg = configparser.RawConfigParser() if config is not None: - cfg.read(config) + if not cfg.read(config): + raise exceptions.ExecutionError( + f"The specified config file does not exist: {config}" + ) cfg_dir = os.path.dirname(config) else: cfg_dir = pwd diff --git a/tests/integration/test_main.py b/tests/integration/test_main.py index b351e9d..fe254b7 100644 --- a/tests/integration/test_main.py +++ b/tests/integration/test_main.py @@ -386,3 +386,21 @@ def test_early_keyboard_interrupt_does_not_crash(capsys): out, err = capsys.readouterr() assert out == "... stopped\n" assert err == "" + + +def test_config_file_not_found(tmpdir, capsys): + """Ensure that an explicitly specified config file which is not found is an + error""" + + expected = """\ +There was a critical error during execution of Flake8: +The specified config file does not exist: missing.cfg +""" + + with tmpdir.as_cwd(): + tmpdir.join("t.py").write("print('hello hello world')\n") + assert cli.main(["--config", "missing.cfg", "t.py"]) == 1 + + out, err = capsys.readouterr() + assert out == expected + assert err == "" diff --git a/tests/unit/test_options_config.py b/tests/unit/test_options_config.py index b288de0..c5d1476 100644 --- a/tests/unit/test_options_config.py +++ b/tests/unit/test_options_config.py @@ -2,6 +2,7 @@ import configparser import pytest +from flake8 import exceptions from flake8.main.options import register_default_options from flake8.options import config from flake8.options.manager import OptionManager @@ -164,3 +165,8 @@ def test_parse_config_ignores_unknowns(tmp_path, opt_manager, caplog): 'Option "wat" is not registered. Ignoring.', ) ] + + +def test_load_config_missing_file_raises_exception(capsys): + with pytest.raises(exceptions.ExecutionError): + config.load_config("foo.cfg", [])