diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py --- a/mercurial/sshpeer.py +++ b/mercurial/sshpeer.py @@ -203,23 +203,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):