diff -r 2c6b054e22d0 -r b3e8d8e4a40d mercurial/hook.py --- a/mercurial/hook.py Mon Oct 05 13:23:16 2020 -0400 +++ b/mercurial/hook.py Mon Oct 05 17:18:39 2020 -0400 @@ -8,6 +8,7 @@ from __future__ import absolute_import import contextlib +import errno import os import sys @@ -289,10 +290,18 @@ # The stderr is fully buffered on Windows when connected to a pipe. # A forcible flush is required to make small stderr data in the # remote side available to the client immediately. - procutil.stderr.flush() + try: + procutil.stderr.flush() + except IOError as err: + if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF): + raise error.StdioError(err) if _redirect and oldstdout >= 0: - procutil.stdout.flush() # write hook output to stderr fd + try: + procutil.stdout.flush() # write hook output to stderr fd + except IOError as err: + if err.errno not in (errno.EPIPE, errno.EIO, errno.EBADF): + raise error.StdioError(err) os.dup2(oldstdout, stdoutno) os.close(oldstdout)