sshpeer: run the ssh command unbuffered
This is necessary to use non-blocking IO base on polling. Such polling is
needed to restore real time output with ssh peer.
Changeset fce065538bcf is talking about 5x regression on Mac OS X when playing
with this value. So we introduced our own buffering layer in previous
changesets. This seems to keep the regression away (we are even issuing much
less read).
--- a/mercurial/sshpeer.py Sun May 31 00:00:36 2015 -0700
+++ b/mercurial/sshpeer.py Wed May 20 11:31:38 2015 -0500
@@ -87,7 +87,12 @@
# while self.subprocess isn't used, having it allows the subprocess to
# to clean up correctly later
- self.pipeo, self.pipei, self.pipee, self.subprocess = util.popen4(cmd)
+ #
+ # no buffer allow the use of 'select'
+ # feel free to remove buffering and select usage when we ultimately
+ # move to threading.
+ sub = util.popen4(cmd, bufsize=0)
+ self.pipeo, self.pipei, self.pipee, self.subprocess = sub
self.pipei = util.bufferedinputpipe(self.pipei)