# HG changeset patch # User Durham Goode # Date 1505170758 25200 # Node ID 1908dc95863957aa1a8375c91bd02d1c7bb3d577 # Parent 91f0677dc92028e4778f58adf365940fbed48fa9 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. diff -r 91f0677dc920 -r 1908dc958639 mercurial/sshpeer.py --- 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):