Mercurial > hg
changeset 34145:1908dc958639 stable
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.
author | Durham Goode <durham@fb.com> |
---|---|
date | Mon, 11 Sep 2017 15:59:18 -0700 |
parents | 91f0677dc920 |
children | 734983de2291 |
files | mercurial/sshpeer.py |
diffstat | 1 files changed, 23 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- 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):