D687: ssh: fix flakey ssh errors on BSD systems
durham (Durham Goode)
phabricator at mercurial-scm.org
Mon Sep 11 23:41:33 UTC 2017
durham created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
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.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D687
AFFECTED FILES
mercurial/sshpeer.py
CHANGE DETAILS
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):
To: durham, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list