stdout raises EINVAL when flush() is called on a closed pipe under win32.
Maybe the exception should be caught and translated at raise location instead (sshserver.py).
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -741,6 +741,14 @@ if os.name == 'nt':
if inst.errno != 0: raise
self.close()
raise IOError(errno.EPIPE, 'Broken pipe')
+
+ def flush(self):
+ try:
+ return self.fp.flush()
+ except IOError, inst:
+ if inst.errno != errno.EINVAL: raise
+ self.close()
+ raise IOError(errno.EPIPE, 'Broken pipe')
sys.stdout = winstdout(sys.stdout)