[PATCH 4 of 9] stdio: add machinery to identify failed stdout/stderr writes

Bryan O'Sullivan bos at serpentine.com
Mon Apr 10 18:51:34 UTC 2017


# HG changeset patch
# User Bryan O'Sullivan <bryano at fb.com>
# Date 1490804813 25200
#      Wed Mar 29 09:26:53 2017 -0700
# Node ID 935d0e5af9001f3a0730e7c477dc14ae5baf4799
# Parent  c1a8ca31d3ade6c8bb0085008bdcf30593edd78f
stdio: add machinery to identify failed stdout/stderr writes

Mercurial currently fails to notice failures to write to stdout or
stderr. A correctly functioning command line tool should detect
this and exit with an error code.

To achieve this, we need a little extra plumbing, which we start
adding here.

diff --git a/mercurial/error.py b/mercurial/error.py
--- a/mercurial/error.py
+++ b/mercurial/error.py
@@ -122,6 +122,16 @@ class CapabilityError(RepoError):
 class RequirementError(RepoError):
     """Exception raised if .hg/requires has an unknown entry."""
 
+class StdioError(IOError):
+    """Raised if I/O to stdout or stderr fails"""
+
+    def __init__(self, err):
+        IOError.__init__(self, err.errno, err.strerror)
+
+def raisestdio(err):
+    import sys
+    raise StdioError, StdioError(err), sys.exc_info()[2]
+
 class UnsupportedMergeRecords(Abort):
     def __init__(self, recordtypes):
         from .i18n import _



More information about the Mercurial-devel mailing list