Skip to content
Snippets Groups Projects
Commit a9cffd14 authored by Gregory Szorc's avatar Gregory Szorc
Browse files

sshpeer: inline I/O into _validaterepo()

We want to move the handshake code out of the peer class so the
peer factory function can perform the handshake and instantiate
a proper class depending on the results. To make that refactor
easier to read, we first inline I/O functionality into
_validaterepo().

Test output for low-level protocol tests didn't change, thus
hopefully demonstrating that this refactor didn't change any
material behavior.

Because we no longer call _callstream(), our test extension for
monkeypatching the peer had to change its hook point.

Differential Revision: https://phab.mercurial-scm.org/D2033
parent f8f03434
No related branches found
No related tags found
No related merge requests found
......@@ -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:
......
......@@ -54,13 +54,7 @@
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')
......@@ -64,9 +58,8 @@
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')
......@@ -69,9 +62,8 @@
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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment