diff --git a/docs/source/release-notes/3.0.3.rst b/docs/source/release-notes/3.0.3.rst index ded24c7..0361879 100644 --- a/docs/source/release-notes/3.0.3.rst +++ b/docs/source/release-notes/3.0.3.rst @@ -1,6 +1,9 @@ 3.0.3 -- 2016-07-28 (unreleased) -------------------------------- +- Disable ``--jobs`` for any version of Python on Windows. + (See also `this Python bug report`_) + - Fix ``# noqa`` comments followed by a ``:`` and explanation broken by 3.0.0 (See also `GitLab#178`_) @@ -12,3 +15,6 @@ https://gitlab.com/pycqa/flake8/issues/178 .. _GitLab#195: https://gitlab.com/pycqa/flake8/issues/195 + +.. _this Python bug report: + https://bugs.python.org/issue27649 diff --git a/src/flake8/checker.py b/src/flake8/checker.py index d331b0c..57fd896 100644 --- a/src/flake8/checker.py +++ b/src/flake8/checker.py @@ -167,7 +167,8 @@ class Manager(object): if (utils.is_windows() and not utils.can_run_multiprocessing_on_windows()): - LOG.warning('The --jobs option is only available on Windows on ' + LOG.warning('The --jobs option is not available on Windows due to' + ' a bug (https://bugs.python.org/issue27649) in ' 'Python 2.7.11+ and 3.3+. We have detected that you ' 'are running an unsupported version of Python on ' 'Windows. Ignoring --jobs arguments.') diff --git a/src/flake8/utils.py b/src/flake8/utils.py index 1e18316..55c699e 100644 --- a/src/flake8/utils.py +++ b/src/flake8/utils.py @@ -164,10 +164,20 @@ def is_windows(): return os.name == 'nt' +# NOTE(sigmavirus24): If and when https://bugs.python.org/issue27649 is fixed, +# re-enable multiprocessing support on Windows. def can_run_multiprocessing_on_windows(): # type: () -> bool """Determine if we can use multiprocessing on Windows. + This presently will **always** return False due to a `bug`_ in the + :mod:`multiprocessing` module on Windows. Once fixed, we will check + to ensure that the version of Python contains that fix (via version + inspection) and *conditionally* re-enable support on Windows. + + .. _bug: + https://bugs.python.org/issue27649 + :returns: True if the version of Python is modern enough, otherwise False :rtype: @@ -175,7 +185,7 @@ def can_run_multiprocessing_on_windows(): """ is_new_enough_python27 = (2, 7, 11) <= sys.version_info < (3, 0) is_new_enough_python3 = sys.version_info > (3, 2) - return is_new_enough_python27 or is_new_enough_python3 + return False and (is_new_enough_python27 or is_new_enough_python3) def is_using_stdin(paths): diff --git a/tests/unit/test_checker_manager.py b/tests/unit/test_checker_manager.py index 8240723..7e9c5b1 100644 --- a/tests/unit/test_checker_manager.py +++ b/tests/unit/test_checker_manager.py @@ -25,7 +25,8 @@ def test_oserrors_cause_serial_fall_back(): assert manager.using_multiprocessing is False -def test_oserrors_are_reraised(): +@mock.patch('flake8.utils.is_windows', return_value=False) +def test_oserrors_are_reraised(is_windows): """Verify that OSErrors will cause the Manager to fallback to serial.""" err = OSError(errno.EAGAIN, 'Ominous message') style_guide = style_guide_mock()