197d10e157ce made this change for the HTTP peer. Let's do the same
for the SSH peer.
Test output changes as expected. A redundant test has been dropped.
.. bc::
Support for connecting to Mercurial servers older than 0.9.1 has been removed.
lothiraldan | |
yuja |
hg-reviewers |
197d10e157ce made this change for the HTTP peer. Let's do the same
for the SSH peer.
Test output changes as expected. A redundant test has been dropped.
.. bc::
Support for connecting to Mercurial servers older than 0.9.1 has been removed.
Automatic diff as part of commit; lint not applicable. |
Automatic diff as part of commit; unit tests not applicable. |
caps = set() | caps = set() | ||||
for l in reversed(lines): | for l in reversed(lines): | ||||
# Look for response to ``hello`` command. Scan from the back so | # Look for response to ``hello`` command. Scan from the back so | ||||
# we don't misinterpret banner output as the command reply. | # we don't misinterpret banner output as the command reply. | ||||
if l.startswith('capabilities:'): | if l.startswith('capabilities:'): | ||||
caps.update(l[:-1].split(':')[1].split()) | caps.update(l[:-1].split(':')[1].split()) | ||||
break | break | ||||
# Error if we couldn't find a response to ``hello``. This could | |||||
# mean: | |||||
# | |||||
# 1. Remote isn't a Mercurial server | |||||
# 2. Remote is a <0.9.1 Mercurial server | |||||
# 3. Remote is a future Mercurial server that dropped ``hello`` | |||||
# support. | |||||
if not caps: | |||||
badresponse() | |||||
return caps | return caps | ||||
class sshpeer(wireproto.wirepeer): | class sshpeer(wireproto.wirepeer): | ||||
def __init__(self, ui, url, proc, stdin, stdout, stderr, caps): | def __init__(self, ui, url, proc, stdin, stdout, stderr, caps): | ||||
"""Create a peer from an existing SSH connection. | """Create a peer from an existing SSH connection. | ||||
``proc`` is a handle on the underlying SSH process. | ``proc`` is a handle on the underlying SSH process. | ||||
``stdin``, ``stdout``, and ``stderr`` are handles on the stdio | ``stdin``, ``stdout``, and ``stderr`` are handles on the stdio |
banner: line 7 | banner: line 7 | ||||
banner: line 8 | banner: line 8 | ||||
banner: line 9 | banner: line 9 | ||||
384 | 384 | ||||
capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | capabilities: lookup changegroupsubset branchmap pushkey known getbundle unbundlehash batch streamreqs=generaldelta,revlogv1 $USUAL_BUNDLE2_CAPS_SERVER$ unbundle=HG10GZ,HG10BZ,HG10UN | ||||
1 | 1 | ||||
Connecting to a <0.9.1 server that doesn't support the hello command | Connecting to a <0.9.1 server that doesn't support the hello command. | ||||
The client should refuse, as we dropped support for connecting to such | |||||
servers. | |||||
$ SSHSERVERMODE=no-hello hg --debug debugpeer ssh://user@dummy/server | $ SSHSERVERMODE=no-hello hg --debug debugpeer ssh://user@dummy/server | ||||
running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) | running * "*/tests/dummyssh" 'user@dummy' 'hg -R server serve --stdio' (glob) | ||||
devel-peer-request: hello | devel-peer-request: hello | ||||
sending hello command | sending hello command | ||||
devel-peer-request: between | devel-peer-request: between | ||||
devel-peer-request: pairs: 81 bytes | devel-peer-request: pairs: 81 bytes | ||||
sending between command | sending between command | ||||
remote: 0 | remote: 0 | ||||
remote: 1 | remote: 1 | ||||
url: ssh://user@dummy/server | abort: no suitable response from remote hg! | ||||
local: no | [255] | ||||
pushable: yes | |||||
The client should interpret this as no capabilities | |||||
$ SSHSERVERMODE=no-hello hg debugcapabilities ssh://user@dummy/server | |||||
Main capabilities: | |||||
Sending an unknown command to the server results in an empty response to that command | Sending an unknown command to the server results in an empty response to that command | ||||
$ hg -R server serve --stdio << EOF | $ hg -R server serve --stdio << EOF | ||||
> pre-hello | > pre-hello | ||||
> hello | > hello | ||||
> between | > between | ||||
> pairs 81 | > pairs 81 |