Patchwork D2063: sshpeer: implement peer for version 2 of wire protocol

login
register
mail settings
Submitter phabricator
Date Feb. 7, 2018, 10:41 p.m.
Message ID <ca926de1e8ba9215d5a780309b13dcc1@localhost.localdomain>
Download mbox | patch
Permalink /patch/27436/
State Not Applicable
Headers show

Comments

phabricator - Feb. 7, 2018, 10:41 p.m.
This revision was automatically updated to reflect the committed changes.
Closed by commit rHG59e4a7781a36: sshpeer: implement peer for version 2 of wire protocol (authored by indygreg, committed by ).

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D2063?vs=5257&id=5303

REVISION DETAIL
  https://phab.mercurial-scm.org/D2063

AFFECTED FILES
  mercurial/sshpeer.py
  tests/test-check-interfaces.py

CHANGE DETAILS




To: indygreg, #hg-reviewers, durin42
Cc: mercurial-devel

Patch

diff --git a/tests/test-check-interfaces.py b/tests/test-check-interfaces.py
--- a/tests/test-check-interfaces.py
+++ b/tests/test-check-interfaces.py
@@ -67,6 +67,8 @@ 
     checkobject(localrepo.localpeer(dummyrepo()))
     checkobject(sshpeer.sshv1peer(ui, 'ssh://localhost/foo', None, None, None,
                                   None, None))
+    checkobject(sshpeer.sshv2peer(ui, 'ssh://localhost/foo', None, None, None,
+                                  None, None))
     checkobject(bundlerepo.bundlepeer(dummyrepo()))
     checkobject(statichttprepo.statichttppeer(dummyrepo()))
     checkobject(unionrepo.unionpeer(dummyrepo()))
diff --git a/mercurial/sshpeer.py b/mercurial/sshpeer.py
--- a/mercurial/sshpeer.py
+++ b/mercurial/sshpeer.py
@@ -326,7 +326,7 @@ 
     if not caps:
         badresponse()
 
-    return caps
+    return protoname, caps
 
 class sshv1peer(wireproto.wirepeer):
     def __init__(self, ui, url, proc, stdin, stdout, stderr, caps):
@@ -497,6 +497,12 @@ 
             self._pipeo.flush()
         self._readerr()
 
+class sshv2peer(sshv1peer):
+    """A peer that speakers version 2 of the transport protocol."""
+    # Currently version 2 is identical to version 1 post handshake.
+    # And handshake is performed before the peer is instantiated. So
+    # we need no custom code.
+
 def instance(ui, path, create):
     """Create an SSH peer.
 
@@ -532,9 +538,16 @@ 
                                                   remotepath, sshenv)
 
     try:
-        caps = _performhandshake(ui, stdin, stdout, stderr)
+        protoname, caps = _performhandshake(ui, stdin, stdout, stderr)
     except Exception:
         _cleanuppipes(ui, stdout, stdin, stderr)
         raise
 
-    return sshv1peer(ui, path, proc, stdin, stdout, stderr, caps)
+    if protoname == wireprotoserver.SSHV1:
+        return sshv1peer(ui, path, proc, stdin, stdout, stderr, caps)
+    elif protoname == wireprotoserver.SSHV2:
+        return sshv2peer(ui, path, proc, stdin, stdout, stderr, caps)
+    else:
+        _cleanuppipes(ui, stdout, stdin, stderr)
+        raise error.RepoError(_('unknown version of SSH protocol: %s') %
+                              protoname)