summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--flake8/reporter.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/flake8/reporter.py b/flake8/reporter.py
index 5fc2743..1df3d9e 100644
--- a/flake8/reporter.py
+++ b/flake8/reporter.py
@@ -2,6 +2,7 @@
# Adapted from a contribution of Johan Dahlin
import collections
+import errno
import re
import sys
try:
@@ -18,6 +19,20 @@ class BaseQReport(pep8.BaseReport):
"""Base Queue Report."""
_loaded = False # Windows support
+ # Reasoning for ignored error numbers is in-line below
+ ignored_errors = set([
+ # EPIPE: Added by sigmavirus24
+ # > If output during processing is piped to something that may close
+ # > its own stdin before we've finished printing results, we need to
+ # > catch a Broken pipe error and continue on.
+ # > (See also: https://gitlab.com/pycqa/flake8/issues/69)
+ errno.EPIPE,
+ # NOTE(sigmavirus24): When adding to this list, include the reasoning
+ # on the lines before the error code and always append your error
+ # code. Further, please always add a trailing `,` to reduce the visual
+ # noise in diffs.
+ ])
+
def __init__(self, options):
assert options.jobs > 0
super(BaseQReport, self).__init__(options)
@@ -74,6 +89,11 @@ class BaseQReport(pep8.BaseReport):
self._process_main()
except KeyboardInterrupt:
pass
+ except IOError as ioerr:
+ # If we happen across an IOError that we aren't certain can/should
+ # be ignored, we should re-raise the exception.
+ if ioerr.errno not in self.ignored_errors:
+ raise
finally:
# ensure all output is flushed before main process continues
sys.stdout.flush()