diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py --- a/mercurial/sshpeer.py +++ b/mercurial/sshpeer.py @@ -212,9 +212,28 @@ self._abort(error.RepoError(msg, hint=hint)) try: - # skip any noise generated by remote shell - self._callstream("hello") - r = self._callstream("between", pairs=("%s-%s" % ("0"*40, "0"*40))) + pairsarg = '%s-%s' % ('0' * 40, '0' * 40) + + handshake = [ + 'hello\n', + 'between\n', + 'pairs %d\n' % len(pairsarg), + pairsarg, + ] + + requestlog = self.ui.configbool('devel', 'debug.peer-request') + + if requestlog: + self.ui.debug('devel-peer-request: hello\n') + self.ui.debug('sending hello command\n') + if requestlog: + self.ui.debug('devel-peer-request: between\n') + self.ui.debug('devel-peer-request: pairs: %d bytes\n' % + len(pairsarg)) + self.ui.debug('sending between command\n') + + self._pipeo.write(''.join(handshake)) + self._pipeo.flush() except IOError: badresponse() @@ -222,8 +241,8 @@ max_noise = 500 while lines[-1] and max_noise: try: - l = r.readline() - self._readerr() + l = self._pipei.readline() + _forwardoutput(self.ui, self._pipee) if lines[-1] == "1\n" and l == "\n": break if l: diff --git a/tests/sshprotoext.py b/tests/sshprotoext.py --- a/tests/sshprotoext.py +++ b/tests/sshprotoext.py @@ -54,24 +54,16 @@ class extrahandshakecommandspeer(sshpeer.sshpeer): """An ssh peer that sends extra commands as part of initial handshake.""" - # There isn't a good hook point. So we wrap _callstream() and inject - # logic when the peer says "hello". - def _callstream(self, cmd, **args): - if cmd != b'hello': - return super(extrahandshakecommandspeer, self)._callstream(cmd, - **args) - + def _validaterepo(self): mode = self._ui.config(b'sshpeer', b'handshake-mode') if mode == b'pre-no-args': self._callstream(b'no-args') - return super(extrahandshakecommandspeer, self)._callstream( - cmd, **args) + return super(extrahandshakecommandspeer, self)._validaterepo() elif mode == b'pre-multiple-no-args': self._callstream(b'unknown1') self._callstream(b'unknown2') self._callstream(b'unknown3') - return super(extrahandshakecommandspeer, self)._callstream( - cmd, **args) + return super(extrahandshakecommandspeer, self)._validaterepo() else: raise error.ProgrammingError(b'unknown HANDSHAKECOMMANDMODE: %s' % mode)