52 lines
1.4 KiB
Diff
52 lines
1.4 KiB
Diff
Description: fix closed pipe handling
|
|
Author: Sascha Steinbiss <satta@debian.org>
|
|
Bug: https://github.com/jeffkaufman/icdiff/issues/156
|
|
Forwarded: https://github.com/jeffkaufman/icdiff/pull/165
|
|
Last-Update: 2019-09-25
|
|
--- a/icdiff
|
|
+++ b/icdiff
|
|
@@ -594,7 +594,22 @@
|
|
validate_has_two_arguments(parser, args)
|
|
if not options.cols:
|
|
set_cols_option(options)
|
|
- diff(options, *args)
|
|
+ try:
|
|
+ diff(options, *args)
|
|
+ except KeyboardInterrupt:
|
|
+ pass
|
|
+ except IOError as e:
|
|
+ if e.errno == errno.EPIPE:
|
|
+ pass
|
|
+ else:
|
|
+ raise
|
|
+
|
|
+ # Close stderr to prevent printing errors when icdiff is piped to
|
|
+ # something that closes before icdiff is done writing
|
|
+ #
|
|
+ # See: https://stackoverflow.com/questions/26692284/...
|
|
+ # ...how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python
|
|
+ sys.stderr.close()
|
|
|
|
|
|
def codec_print(s, options):
|
|
@@ -755,18 +770,4 @@
|
|
|
|
|
|
if __name__ == "__main__":
|
|
- try:
|
|
- start()
|
|
- except KeyboardInterrupt:
|
|
- pass
|
|
- except IOError as e:
|
|
- if e.errno == errno.EPIPE:
|
|
- pass
|
|
- else:
|
|
- raise
|
|
- # Close stderr to prevent printing errors when icdiff is piped to
|
|
- # something that closes before icdiff is done writing
|
|
- #
|
|
- # See: https://stackoverflow.com/questions/26692284/
|
|
- # how-to-prevent-brokenpipeerror-when-doing-a-flush-in-python
|
|
- sys.stderr.close()
|
|
+ start()
|