# HG changeset patch # User Durham Goode # Date 2017-09-11 22:59:18 # Node ID c037fd655b47eb00d54dae5a57922760fb2620dc # Parent f698bb31bdfb74278ec76c31910e6548ac7a9834 ssh: fix flakey ssh errors on BSD systems There's been a persistent issue with flakiness on BSD systems (like OSX) where the 'no suitable response from remote hg' message would sometimes not appear. This was caused by one of the earlier calls failing with a "IOError: Broken pipe". Catching those errors and printing the same message removes the flakiness. Differential Revision: https://phab.mercurial-scm.org/D687 diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py --- a/mercurial/sshpeer.py +++ b/mercurial/sshpeer.py @@ -203,23 +203,33 @@ class sshpeer(wireproto.wirepeer): 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):