ssh: fix flakey ssh errors on BSD systems
This is a trivial backport of
c037fd655b47 performed by
augie@google.com, but the change is still really Durham's not mine, so
I [augie] am leaving him as the author.
--- a/mercurial/sshpeer.py Thu Sep 14 11:16:57 2017 -0700
+++ b/mercurial/sshpeer.py Mon Sep 11 15:59:18 2017 -0700
@@ -190,23 +190,33 @@
self.pipei = doublepipe(self.ui, self.pipei, self.pipee)
self.pipeo = doublepipe(self.ui, self.pipeo, self.pipee)
- # skip any noise generated by remote shell
- self._callstream("hello")
- r = self._callstream("between", pairs=("%s-%s" % ("0"*40, "0"*40)))
+ def badresponse():
+ self._abort(error.RepoError(_('no suitable response from '
+ 'remote hg')))
+
+ try:
+ # skip any noise generated by remote shell
+ self._callstream("hello")
+ r = self._callstream("between", pairs=("%s-%s" % ("0"*40, "0"*40)))
+ except IOError:
+ badresponse()
+
lines = ["", "dummy"]
max_noise = 500
while lines[-1] and max_noise:
- l = r.readline()
- self.readerr()
- if lines[-1] == "1\n" and l == "\n":
- break
- if l:
- self.ui.debug("remote: ", l)
- lines.append(l)
- max_noise -= 1
+ try:
+ l = r.readline()
+ self.readerr()
+ if lines[-1] == "1\n" and l == "\n":
+ break
+ if l:
+ self.ui.debug("remote: ", l)
+ lines.append(l)
+ max_noise -= 1
+ except IOError:
+ badresponse()
else:
- self._abort(error.RepoError(_('no suitable response from '
- 'remote hg')))
+ badresponse()
self._caps = set()
for l in reversed(lines):