comparison mercurial/sshpeer.py @ 48526:04688c51f81f

exchangev2: remove it As discussed on the mailing list, this is incomplete and unused with little hope of revival. Differential Revision: https://phab.mercurial-scm.org/D11954
author Raphaël Gomès <rgomes@octobus.net>
date Tue, 07 Dec 2021 16:44:22 +0100
parents ffd3e823a7e5
children 6000f5b25c9b
comparison
equal deleted inserted replaced
48525:d6c53b40b078 48526:04688c51f81f
14 from .pycompat import getattr 14 from .pycompat import getattr
15 from . import ( 15 from . import (
16 error, 16 error,
17 pycompat, 17 pycompat,
18 util, 18 util,
19 wireprotoserver,
20 wireprototypes, 19 wireprototypes,
21 wireprotov1peer, 20 wireprotov1peer,
22 wireprotov1server, 21 wireprotov1server,
23 ) 22 )
24 from .utils import ( 23 from .utils import (
286 requestlog = ui.configbool(b'devel', b'debug.peer-request') 285 requestlog = ui.configbool(b'devel', b'debug.peer-request')
287 286
288 # Generate a random token to help identify responses to version 2 287 # Generate a random token to help identify responses to version 2
289 # upgrade request. 288 # upgrade request.
290 token = pycompat.sysbytes(str(uuid.uuid4())) 289 token = pycompat.sysbytes(str(uuid.uuid4()))
291 upgradecaps = [
292 (b'proto', wireprotoserver.SSHV2),
293 ]
294 upgradecaps = util.urlreq.urlencode(upgradecaps)
295 290
296 try: 291 try:
297 pairsarg = b'%s-%s' % (b'0' * 40, b'0' * 40) 292 pairsarg = b'%s-%s' % (b'0' * 40, b'0' * 40)
298 handshake = [ 293 handshake = [
299 b'hello\n', 294 b'hello\n',
300 b'between\n', 295 b'between\n',
301 b'pairs %d\n' % len(pairsarg), 296 b'pairs %d\n' % len(pairsarg),
302 pairsarg, 297 pairsarg,
303 ] 298 ]
304
305 # Request upgrade to version 2 if configured.
306 if ui.configbool(b'experimental', b'sshpeer.advertise-v2'):
307 ui.debug(b'sending upgrade request: %s %s\n' % (token, upgradecaps))
308 handshake.insert(0, b'upgrade %s %s\n' % (token, upgradecaps))
309 299
310 if requestlog: 300 if requestlog:
311 ui.debug(b'devel-peer-request: hello+between\n') 301 ui.debug(b'devel-peer-request: hello+between\n')
312 ui.debug(b'devel-peer-request: pairs: %d bytes\n' % len(pairsarg)) 302 ui.debug(b'devel-peer-request: pairs: %d bytes\n' % len(pairsarg))
313 ui.debug(b'sending hello command\n') 303 ui.debug(b'sending hello command\n')
363 # Look for response to ``hello`` command. Scan from the back so 353 # Look for response to ``hello`` command. Scan from the back so
364 # we don't misinterpret banner output as the command reply. 354 # we don't misinterpret banner output as the command reply.
365 if l.startswith(b'capabilities:'): 355 if l.startswith(b'capabilities:'):
366 caps.update(l[:-1].split(b':')[1].split()) 356 caps.update(l[:-1].split(b':')[1].split())
367 break 357 break
368 elif protoname == wireprotoserver.SSHV2:
369 # We see a line with number of bytes to follow and then a value
370 # looking like ``capabilities: *``.
371 line = stdout.readline()
372 try:
373 valuelen = int(line)
374 except ValueError:
375 badresponse()
376
377 capsline = stdout.read(valuelen)
378 if not capsline.startswith(b'capabilities: '):
379 badresponse()
380
381 ui.debug(b'remote: %s\n' % capsline)
382
383 caps.update(capsline.split(b':')[1].split())
384 # Trailing newline.
385 stdout.read(1)
386 358
387 # Error if we couldn't find capabilities, this means: 359 # Error if we couldn't find capabilities, this means:
388 # 360 #
389 # 1. Remote isn't a Mercurial server 361 # 1. Remote isn't a Mercurial server
390 # 2. Remote is a <0.9.1 Mercurial server 362 # 2. Remote is a <0.9.1 Mercurial server
599 self._pipeo.flush() 571 self._pipeo.flush()
600 if self._autoreadstderr: 572 if self._autoreadstderr:
601 self._readerr() 573 self._readerr()
602 574
603 575
604 class sshv2peer(sshv1peer):
605 """A peer that speakers version 2 of the transport protocol."""
606
607 # Currently version 2 is identical to version 1 post handshake.
608 # And handshake is performed before the peer is instantiated. So
609 # we need no custom code.
610
611
612 def makepeer(ui, path, proc, stdin, stdout, stderr, autoreadstderr=True): 576 def makepeer(ui, path, proc, stdin, stdout, stderr, autoreadstderr=True):
613 """Make a peer instance from existing pipes. 577 """Make a peer instance from existing pipes.
614 578
615 ``path`` and ``proc`` are stored on the eventual peer instance and may 579 ``path`` and ``proc`` are stored on the eventual peer instance and may
616 not be used for anything meaningful. 580 not be used for anything meaningful.
629 _cleanuppipes(ui, stdout, stdin, stderr, warn=None) 593 _cleanuppipes(ui, stdout, stdin, stderr, warn=None)
630 raise 594 raise
631 595
632 if protoname == wireprototypes.SSHV1: 596 if protoname == wireprototypes.SSHV1:
633 return sshv1peer( 597 return sshv1peer(
634 ui,
635 path,
636 proc,
637 stdin,
638 stdout,
639 stderr,
640 caps,
641 autoreadstderr=autoreadstderr,
642 )
643 elif protoname == wireprototypes.SSHV2:
644 return sshv2peer(
645 ui, 598 ui,
646 path, 599 path,
647 proc, 600 proc,
648 stdin, 601 stdin,
649 stdout, 602 stdout,