annotate mercurial/helptext/internals/wireprotocol.txt @ 51626:865efc020c33 default tip

dirstate: remove the python-side whitelist of allowed matchers This whitelist is too permissive because it allows matchers that contain disallowed ones deep inside, for example through `intersectionmatcher`. It is also too restrictive because it doesn't pass through some of the matchers we support, such as `patternmatcher`. It's also unnecessary because unsupported matchers raise `FallbackError` and we fall back anyway. Making this change makes more of the tests use rust code path, and therefore subtly change behavior. For example, rust status in largefiles repos seems to have strange behavior.
author Arseniy Alekseyev <aalekseyev@janestreet.com>
date Fri, 26 Apr 2024 19:10:35 +0100
parents 04688c51f81f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29859
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
1 The Mercurial wire protocol is a request-response based protocol
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
2 with multiple wire representations.
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
3
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
4 Each request is modeled as a command name, a dictionary of arguments, and
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
5 optional raw input. Command arguments and their types are intrinsic
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
6 properties of commands. So is the response type of the command. This means
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
7 clients can't always send arbitrary arguments to servers and servers can't
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
8 return multiple response types.
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
9
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
10 The protocol is synchronous and does not support multiplexing (concurrent
a1092e2d70a3 help: internals topic for wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff changeset
11 commands).
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
12
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
13 Handshake
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
14 =========
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
15
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
16 It is required or common for clients to perform a *handshake* when connecting
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
17 to a server. The handshake serves the following purposes:
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
18
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
19 * Negotiating protocol/transport level options
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
20 * Allows the client to learn about server capabilities to influence
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
21 future requests
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
22 * Ensures the underlying transport channel is in a *clean* state
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
23
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
24 An important goal of the handshake is to allow clients to use more modern
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
25 wire protocol features. By default, clients must assume they are talking
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
26 to an old version of Mercurial server (possibly even the very first
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
27 implementation). So, clients should not attempt to call or utilize modern
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
28 wire protocol features until they have confirmation that the server
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
29 supports them. The handshake implementation is designed to allow both
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
30 ends to utilize the latest set of features and capabilities with as
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
31 few round trips as possible.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
32
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
33 The handshake mechanism varies by transport and protocol and is documented
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
34 in the sections below.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
35
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
36 HTTP Protocol
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
37 =============
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
38
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
39 Handshake
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
40 ---------
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
41
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
42 The client sends a ``capabilities`` command request (``?cmd=capabilities``)
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
43 as soon as HTTP requests may be issued.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
44
37557
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
45 By default, the server responds with a version 1 capabilities string, which
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
46 the client parses to learn about the server's abilities. The ``Content-Type``
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
47 for this response is ``application/mercurial-0.1`` or
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
48 ``application/mercurial-0.2`` depending on whether the client advertised
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
49 support for version ``0.2`` in its request. (Clients aren't supposed to
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
50 advertise support for ``0.2`` until the capabilities response indicates
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
51 the server's support for that media type. However, a client could
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
52 conceivably cache this metadata and issue the capabilities request in such
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
53 a way to elicit an ``application/mercurial-0.2`` response.)
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
54
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
55 Clients wishing to switch to a newer API service may send an
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
56 ``X-HgUpgrade-<X>`` header containing a space-delimited list of API service
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
57 names the client is capable of speaking. The request MUST also include an
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
58 ``X-HgProto-<X>`` header advertising a known serialization format for the
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
59 response. ``cbor`` is currently the only defined serialization format.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
60
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
61 If the request contains these headers, the response ``Content-Type`` MAY
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
62 be for a different media type. e.g. ``application/mercurial-cbor`` if the
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
63 client advertises support for CBOR.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
64
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
65 The response MUST be deserializable to a map with the following keys:
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
66
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
67 apibase
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
68 URL path to API services, relative to the repository root. e.g. ``api/``.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
69
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
70 apis
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
71 A map of API service names to API descriptors. An API descriptor contains
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
72 more details about that API. In the case of the HTTP Version 2 Transport,
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
73 it will be the normal response to a ``capabilities`` command.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
74
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
75 Only the services advertised by the client that are also available on
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
76 the server are advertised.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
77
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
78 v1capabilities
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
79 The capabilities string that would be returned by a version 1 response.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
80
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
81 The client can then inspect the server-advertised APIs and decide which
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
82 API to use, including continuing to use the HTTP Version 1 Transport.
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
83
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
84 HTTP Version 1 Transport
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
85 ------------------------
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
86
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
87 Commands are issued as HTTP/1.0 or HTTP/1.1 requests. Commands are
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
88 sent to the base URL of the repository with the command name sent in
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
89 the ``cmd`` query string parameter. e.g.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
90 ``https://example.com/repo?cmd=capabilities``. The HTTP method is ``GET``
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
91 or ``POST`` depending on the command and whether there is a request
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
92 body.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
93
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
94 Command arguments can be sent multiple ways.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
95
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
96 The simplest is part of the URL query string using ``x-www-form-urlencoded``
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
97 encoding (see Python's ``urllib.urlencode()``. However, many servers impose
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
98 length limitations on the URL. So this mechanism is typically only used if
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
99 the server doesn't support other mechanisms.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
100
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
101 If the server supports the ``httpheader`` capability, command arguments can
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
102 be sent in HTTP request headers named ``X-HgArg-<N>`` where ``<N>`` is an
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
103 integer starting at 1. A ``x-www-form-urlencoded`` representation of the
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
104 arguments is obtained. This full string is then split into chunks and sent
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
105 in numbered ``X-HgArg-<N>`` headers. The maximum length of each HTTP header
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
106 is defined by the server in the ``httpheader`` capability value, which defaults
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
107 to ``1024``. The server reassembles the encoded arguments string by
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
108 concatenating the ``X-HgArg-<N>`` headers then URL decodes them into a
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
109 dictionary.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
110
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
111 The list of ``X-HgArg-<N>`` headers should be added to the ``Vary`` request
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
112 header to instruct caches to take these headers into consideration when caching
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
113 requests.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
114
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
115 If the server supports the ``httppostargs`` capability, the client
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
116 may send command arguments in the HTTP request body as part of an
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
117 HTTP POST request. The command arguments will be URL encoded just like
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
118 they would for sending them via HTTP headers. However, no splitting is
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
119 performed: the raw arguments are included in the HTTP request body.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
120
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
121 The client sends a ``X-HgArgs-Post`` header with the string length of the
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
122 encoded arguments data. Additional data may be included in the HTTP
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
123 request body immediately following the argument data. The offset of the
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
124 non-argument data is defined by the ``X-HgArgs-Post`` header. The
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
125 ``X-HgArgs-Post`` header is not required if there is no argument data.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
126
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
127 Additional command data can be sent as part of the HTTP request body. The
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
128 default ``Content-Type`` when sending data is ``application/mercurial-0.1``.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
129 A ``Content-Length`` header is currently always sent.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
130
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
131 Example HTTP requests::
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
132
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
133 GET /repo?cmd=capabilities
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
134 X-HgArg-1: foo=bar&baz=hello%20world
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
135
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
136 The request media type should be chosen based on server support. If the
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
137 ``httpmediatype`` server capability is present, the client should send
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
138 the newest mutually supported media type. If this capability is absent,
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
139 the client must assume the server only supports the
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
140 ``application/mercurial-0.1`` media type.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
141
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
142 The ``Content-Type`` HTTP response header identifies the response as coming
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
143 from Mercurial and can also be used to signal an error has occurred.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
144
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
145 The ``application/mercurial-*`` media types indicate a generic Mercurial
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
146 data type.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
147
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
148 The ``application/mercurial-0.1`` media type is raw Mercurial data. It is the
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
149 predecessor of the format below.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
150
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
151 The ``application/mercurial-0.2`` media type is compression framed Mercurial
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
152 data. The first byte of the payload indicates the length of the compression
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
153 format identifier that follows. Next are N bytes indicating the compression
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
154 format. e.g. ``zlib``. The remaining bytes are compressed according to that
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
155 compression format. The decompressed data behaves the same as with
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
156 ``application/mercurial-0.1``.
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
157
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
158 The ``application/hg-error`` media type indicates a generic error occurred.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
159 The content of the HTTP response body typically holds text describing the
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
160 error.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
161
37557
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
162 The ``application/mercurial-cbor`` media type indicates a CBOR payload
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
163 and should be interpreted as identical to ``application/cbor``.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
164
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
165 Behavior of media types is further described in the ``Content Negotiation``
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
166 section below.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
167
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
168 Clients should issue a ``User-Agent`` request header that identifies the client.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
169 The server should not use the ``User-Agent`` for feature detection.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
170
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
171 A command returning a ``string`` response issues a
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
172 ``application/mercurial-0.*`` media type and the HTTP response body contains
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
173 the raw string value (after compression decoding, if used). A
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
174 ``Content-Length`` header is typically issued, but not required.
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
175
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
176 A command returning a ``stream`` response issues a
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
177 ``application/mercurial-0.*`` media type and the HTTP response is typically
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
178 using *chunked transfer* (``Transfer-Encoding: chunked``).
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
179
37047
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
180 HTTP Version 2 Transport
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
181 ------------------------
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
182
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
183 **Experimental - feature under active development**
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
184
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
185 Version 2 of the HTTP protocol is exposed under the ``/api/*`` URL space.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
186 It's final API name is not yet formalized.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
187
37048
fc5e261915b9 wireproto: require POST for all HTTPv2 requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
188 Commands are triggered by sending HTTP POST requests against URLs of the
37047
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
189 form ``<permission>/<command>``, where ``<permission>`` is ``ro`` or
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
190 ``rw``, meaning read-only and read-write, respectively and ``<command>``
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
191 is a named wire protocol command.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
192
37048
fc5e261915b9 wireproto: require POST for all HTTPv2 requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
193 Non-POST request methods MUST be rejected by the server with an HTTP
fc5e261915b9 wireproto: require POST for all HTTPv2 requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
194 405 response.
fc5e261915b9 wireproto: require POST for all HTTPv2 requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37047
diff changeset
195
37047
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
196 Commands that modify repository state in meaningful ways MUST NOT be
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
197 exposed under the ``ro`` URL prefix. All available commands MUST be
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
198 available under the ``rw`` URL prefix.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
199
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
200 Server adminstrators MAY implement blanket HTTP authentication keyed
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
201 off the URL prefix. For example, a server may require authentication
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
202 for all ``rw/*`` URLs and let unauthenticated requests to ``ro/*``
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
203 URL proceed. A server MAY issue an HTTP 401, 403, or 407 response
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
204 in accordance with RFC 7235. Clients SHOULD recognize the HTTP Basic
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
205 (RFC 7617) and Digest (RFC 7616) authentication schemes. Clients SHOULD
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
206 make an attempt to recognize unknown schemes using the
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
207 ``WWW-Authenticate`` response header on a 401 response, as defined by
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
208 RFC 7235.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
209
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
210 Read-only commands are accessible under ``rw/*`` URLs so clients can
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
211 signal the intent of the operation very early in the connection
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
212 lifecycle. For example, a ``push`` operation - which consists of
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
213 various read-only commands mixed with at least one read-write command -
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
214 can perform all commands against ``rw/*`` URLs so that any server-side
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
215 authentication requirements are discovered upon attempting the first
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
216 command - not potentially several commands into the exchange. This
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
217 allows clients to fail faster or prompt for credentials as soon as the
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
218 exchange takes place. This provides a better end-user experience.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
219
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
220 Requests to unknown commands or URLS result in an HTTP 404.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
221 TODO formally define response type, how error is communicated, etc.
fddcb51b5084 wireproto: define permissions-based routing of HTTPv2 wire protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35976
diff changeset
222
39558
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
223 HTTP request and response bodies use the ``hgrpc`` protocol for media
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
224 exchange.` (See :hg:`help internals.wireprotocolrpc` for details of
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
225 the protocol.) The entirety of the HTTP message body is 0 or more frames
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
226 as defined by this protocol.
37050
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
227
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
228 Clients and servers MUST advertise the ``TBD`` media type via the
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
229 ``Content-Type`` request and response headers. In addition, clients MUST
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
230 advertise this media type value in their ``Accept`` request header in all
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
231 requests.
37051
40206e227412 wireproto: define and implement protocol for issuing requests
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37050
diff changeset
232 TODO finalize the media type. For now, it is defined in wireprotoserver.py.
37050
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
233
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
234 Servers receiving requests without an ``Accept`` header SHOULD respond with
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
235 an HTTP 406.
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
236
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
237 Servers receiving requests with an invalid ``Content-Type`` header SHOULD
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
238 respond with an HTTP 415.
37d7a1d18b97 wireproto: define content negotiation for HTTPv2
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37048
diff changeset
239
39558
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
240 The command to run is specified in the POST payload as defined by ``hgrpc``.
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
241 This is redundant with data already encoded in the URL. This is by design,
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
242 so server operators can have better understanding about server activity from
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
243 looking merely at HTTP access logs.
37059
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
244
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
245 In most circumstances, the command specified in the URL MUST match
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
246 the command specified in the frame-based payload or the server will
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
247 respond with an error. The exception to this is the special
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
248 ``multirequest`` URL. (See below.) In addition, HTTP requests
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
249 are limited to one command invocation. The exception is the special
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
250 ``multirequest`` URL.
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
251
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
252 The ``multirequest`` command endpoints (``ro/multirequest`` and
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
253 ``rw/multirequest``) are special in that they allow the execution of
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
254 *any* command and allow the execution of multiple commands. If the
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
255 HTTP request issues multiple commands across multiple frames, all
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
256 issued commands will be processed by the server. Per the defined
39558
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
257 behavior of ``hgrpc```, commands may be issued interleaved and responses
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
258 may come back in a different order than they were issued. Clients MUST
b0e0db1565d1 internals: extract frame-based protocol docs to own document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39439
diff changeset
259 be able to deal with this.
37059
bbea991635d0 wireproto: service multiple command requests per HTTP request
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37057
diff changeset
260
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
261 SSH Protocol
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
262 ============
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
263
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
264 Handshake
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
265 ---------
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
266
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
267 For all clients, the handshake consists of the client sending 1 or more
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
268 commands to the server using version 1 of the transport. Servers respond
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
269 to commands they know how to respond to and send an empty response (``0\n``)
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
270 for unknown commands (per standard behavior of version 1 of the transport).
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
271 Clients then typically look for a response to the newest sent command to
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
272 determine which transport version to use and what the available features for
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
273 the connection and server are.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
274
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
275 Preceding any response from client-issued commands, the server may print
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
276 non-protocol output. It is common for SSH servers to print banners, message
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
277 of the day announcements, etc when clients connect. It is assumed that any
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
278 such *banner* output will precede any Mercurial server output. So clients
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
279 must be prepared to handle server output on initial connect that isn't
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
280 in response to any client-issued command and doesn't conform to Mercurial's
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
281 wire protocol. This *banner* output should only be on stdout. However,
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
282 some servers may send output on stderr.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
283
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
284 Pre 0.9.1 clients issue a ``between`` command with the ``pairs`` argument
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
285 having the value
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
286 ``0000000000000000000000000000000000000000-0000000000000000000000000000000000000000``.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
287
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
288 The ``between`` command has been supported since the original Mercurial
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
289 SSH server. Requesting the empty range will return a ``\n`` string response,
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
290 which will be encoded as ``1\n\n`` (value length of ``1`` followed by a newline
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
291 followed by the value, which happens to be a newline).
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
292
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
293 For pre 0.9.1 clients and all servers, the exchange looks like::
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
294
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
295 c: between\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
296 c: pairs 81\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
297 c: 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
298 s: 1\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
299 s: \n
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
300
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
301 0.9.1+ clients send a ``hello`` command (with no arguments) before the
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
302 ``between`` command. The response to this command allows clients to
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
303 discover server capabilities and settings.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
304
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
305 An example exchange between 0.9.1+ clients and a ``hello`` aware server looks
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
306 like::
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
307
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
308 c: hello\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
309 c: between\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
310 c: pairs 81\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
311 c: 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
312 s: 324\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
313 s: capabilities: lookup changegroupsubset branchmap pushkey known getbundle ...\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
314 s: 1\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
315 s: \n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
316
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
317 And a similar scenario but with servers sending a banner on connect::
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
318
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
319 c: hello\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
320 c: between\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
321 c: pairs 81\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
322 c: 0000000000000000000000000000000000000000-0000000000000000000000000000000000000000
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
323 s: welcome to the server\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
324 s: if you find any issues, email someone@somewhere.com\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
325 s: 324\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
326 s: capabilities: lookup changegroupsubset branchmap pushkey known getbundle ...\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
327 s: 1\n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
328 s: \n
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
329
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
330 Note that output from the ``hello`` command is terminated by a ``\n``. This is
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
331 part of the response payload and not part of the wire protocol adding a newline
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
332 after responses. In other words, the length of the response contains the
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
333 trailing ``\n``.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
334
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
335 SSH Version 1 Transport
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
336 -----------------------
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
337
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
338 The SSH transport (version 1) is a custom text-based protocol suitable for
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
339 use over any bi-directional stream transport. It is most commonly used with
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
340 SSH.
29860
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
341
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
342 A SSH transport server can be started with ``hg serve --stdio``. The stdin,
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
343 stderr, and stdout file descriptors of the started process are used to exchange
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
344 data. When Mercurial connects to a remote server over SSH, it actually starts
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
345 a ``hg serve --stdio`` process on the remote server.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
346
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
347 Commands are issued by sending the command name followed by a trailing newline
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
348 ``\n`` to the server. e.g. ``capabilities\n``.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
349
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
350 Command arguments are sent in the following format::
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
351
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
352 <argument> <length>\n<value>
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
353
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
354 That is, the argument string name followed by a space followed by the
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
355 integer length of the value (expressed as a string) followed by a newline
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
356 (``\n``) followed by the raw argument value.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
357
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
358 Dictionary arguments are encoded differently::
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
359
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
360 <argument> <# elements>\n
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
361 <key1> <length1>\n<value1>
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
362 <key2> <length2>\n<value2>
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
363 ...
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
364
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
365 Non-argument data is sent immediately after the final argument value. It is
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
366 encoded in chunks::
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
367
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
368 <length>\n<data>
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
369
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
370 Each command declares a list of supported arguments and their types. If a
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
371 client sends an unknown argument to the server, the server should abort
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
372 immediately. The special argument ``*`` in a command's definition indicates
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
373 that all argument names are allowed.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
374
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
375 The definition of supported arguments and types is initially made when a
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
376 new command is implemented. The client and server must initially independently
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
377 agree on the arguments and their types. This initial set of arguments can be
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
378 supplemented through the presence of *capabilities* advertised by the server.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
379
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
380 Each command has a defined expected response type.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
381
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
382 A ``string`` response type is a length framed value. The response consists of
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
383 the string encoded integer length of a value followed by a newline (``\n``)
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
384 followed by the value. Empty values are allowed (and are represented as
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
385 ``0\n``).
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
386
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
387 A ``stream`` response type consists of raw bytes of data. There is no framing.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
388
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
389 A generic error response type is also supported. It consists of a an error
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
390 message written to ``stderr`` followed by ``\n-\n``. In addition, ``\n`` is
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
391 written to ``stdout``.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
392
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
393 If the server receives an unknown command, it will send an empty ``string``
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
394 response.
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
395
b42c26b0a785 help: document wire protocol transport protocols
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29859
diff changeset
396 The server terminates if it receives an empty command (a ``\n`` character).
29863
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
397
37393
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
398 If the server announces support for the ``protocaps`` capability, the client
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
399 should issue a ``protocaps`` command after the initial handshake to annonunce
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
400 its own capabilities. The client capabilities are persistent.
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
401
29863
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
402 Capabilities
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
403 ============
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
404
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
405 Servers advertise supported wire protocol features. This allows clients to
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
406 probe for server features before blindly calling a command or passing a
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
407 specific argument.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
408
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
409 The server's features are exposed via a *capabilities* string. This is a
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
410 space-delimited string of tokens/features. Some features are single words
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
411 like ``lookup`` or ``batch``. Others are complicated key-value pairs
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
412 advertising sub-features. e.g. ``httpheader=2048``. When complex, non-word
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
413 values are used, each feature name can define its own encoding of sub-values.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
414 Comma-delimited and ``x-www-form-urlencoded`` values are common.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
415
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
416 The following document capabilities defined by the canonical Mercurial server
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
417 implementation.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
418
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
419 batch
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
420 -----
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
421
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
422 Whether the server supports the ``batch`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
423
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
424 This capability/command was introduced in Mercurial 1.9 (released July 2011).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
425
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
426 branchmap
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
427 ---------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
428
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
429 Whether the server supports the ``branchmap`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
430
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
431 This capability/command was introduced in Mercurial 1.3 (released July 2009).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
432
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
433 bundle2-exp
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
434 -----------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
435
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
436 Precursor to ``bundle2`` capability that was used before bundle2 was a
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
437 stable feature.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
438
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
439 This capability was introduced in Mercurial 3.0 behind an experimental
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
440 flag. This capability should not be observed in the wild.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
441
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
442 bundle2
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
443 -------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
444
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
445 Indicates whether the server supports the ``bundle2`` data exchange format.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
446
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
447 The value of the capability is a URL quoted, newline (``\n``) delimited
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
448 list of keys or key-value pairs.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
449
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
450 A key is simply a URL encoded string.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
451
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
452 A key-value pair is a URL encoded key separated from a URL encoded value by
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
453 an ``=``. If the value is a list, elements are delimited by a ``,`` after
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
454 URL encoding.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
455
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
456 For example, say we have the values::
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
457
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
458 {'HG20': [], 'changegroup': ['01', '02'], 'digests': ['sha1', 'sha512']}
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
459
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
460 We would first construct a string::
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
461
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
462 HG20\nchangegroup=01,02\ndigests=sha1,sha512
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
463
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
464 We would then URL quote this string::
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
465
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
466 HG20%0Achangegroup%3D01%2C02%0Adigests%3Dsha1%2Csha512
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
467
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
468 This capability was introduced in Mercurial 3.4 (released May 2015).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
469
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
470 changegroupsubset
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
471 -----------------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
472
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
473 Whether the server supports the ``changegroupsubset`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
474
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
475 This capability was introduced in Mercurial 0.9.2 (released December
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
476 2006).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
477
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
478 This capability was introduced at the same time as the ``lookup``
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
479 capability/command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
480
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
481 compression
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
482 -----------
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
483
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
484 Declares support for negotiating compression formats.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
485
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
486 Presence of this capability indicates the server supports dynamic selection
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
487 of compression formats based on the client request.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
488
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
489 Servers advertising this capability are required to support the
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
490 ``application/mercurial-0.2`` media type in response to commands returning
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
491 streams. Servers may support this media type on any command.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
492
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
493 The value of the capability is a comma-delimited list of strings declaring
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
494 supported compression formats. The order of the compression formats is in
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
495 server-preferred order, most preferred first.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
496
30761
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
497 The identifiers used by the official Mercurial distribution are:
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
498
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
499 bzip2
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
500 bzip2
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
501 none
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
502 uncompressed / raw data
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
503 zlib
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
504 zlib (no gzip header)
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
505 zstd
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
506 zstd
7283719e2bfd util: declare wire protocol support of compression engines
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30760
diff changeset
507
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
508 This capability was introduced in Mercurial 4.1 (released February 2017).
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
509
29863
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
510 getbundle
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
511 ---------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
512
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
513 Whether the server supports the ``getbundle`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
514
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
515 This capability was introduced in Mercurial 1.9 (released July 2011).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
516
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
517 httpheader
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
518 ----------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
519
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
520 Whether the server supports receiving command arguments via HTTP request
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
521 headers.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
522
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
523 The value of the capability is an integer describing the max header
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
524 length that clients should send. Clients should ignore any content after a
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
525 comma in the value, as this is reserved for future use.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
526
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
527 This capability was introduced in Mercurial 1.9 (released July 2011).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
528
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
529 httpmediatype
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
530 -------------
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
531
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
532 Indicates which HTTP media types (``Content-Type`` header) the server is
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
533 capable of receiving and sending.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
534
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
535 The value of the capability is a comma-delimited list of strings identifying
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
536 support for media type and transmission direction. The following strings may
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
537 be present:
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
538
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
539 0.1rx
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
540 Indicates server support for receiving ``application/mercurial-0.1`` media
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
541 types.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
542
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
543 0.1tx
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
544 Indicates server support for sending ``application/mercurial-0.1`` media
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
545 types.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
546
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
547 0.2rx
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
548 Indicates server support for receiving ``application/mercurial-0.2`` media
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
549 types.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
550
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
551 0.2tx
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
552 Indicates server support for sending ``application/mercurial-0.2`` media
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
553 types.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
554
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
555 minrx=X
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
556 Minimum media type version the server is capable of receiving. Value is a
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
557 string like ``0.2``.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
558
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
559 This capability can be used by servers to limit connections from legacy
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
560 clients not using the latest supported media type. However, only clients
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
561 with knowledge of this capability will know to consult this value. This
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
562 capability is present so the client may issue a more user-friendly error
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
563 when the server has locked out a legacy client.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
564
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
565 mintx=X
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
566 Minimum media type version the server is capable of sending. Value is a
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
567 string like ``0.1``.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
568
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
569 Servers advertising support for the ``application/mercurial-0.2`` media type
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
570 should also advertise the ``compression`` capability.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
571
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
572 This capability was introduced in Mercurial 4.1 (released February 2017).
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
573
29863
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
574 httppostargs
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
575 ------------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
576
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
577 **Experimental**
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
578
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
579 Indicates that the server supports and prefers clients send command arguments
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
580 via a HTTP POST request as part of the request body.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
581
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
582 This capability was introduced in Mercurial 3.8 (released May 2016).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
583
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
584 known
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
585 -----
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
586
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
587 Whether the server supports the ``known`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
588
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
589 This capability/command was introduced in Mercurial 1.9 (released July 2011).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
590
40348
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
591 lfs
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
592 ---
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
593
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
594 Indicates that the LFS extension is enabled on the server. It makes no claims
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
595 about the repository actually having LFS blobs committed to it.
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
596
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
597 This capability was introduced by the LFS extension in Mercurial 4.5 (released
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
598 Feb 2018).
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
599
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
600 lfs-serve
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
601 ---------
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
602
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
603 Indicates that the LFS extension is enabled on the server, and LFS blobs are
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
604 committed to the remote repository. (Specifically, it indicates that the 'lfs'
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
605 requirement is present in the remote repository.)
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
606
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
607 This capability was introduced by the LFS extension in Mercurial 4.8 (released
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
608 Nov 2018).
124507a263e5 help: document the server capabilities added by the LFS extension
Matt Harbison <matt_harbison@yahoo.com>
parents: 39558
diff changeset
609
29863
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
610 lookup
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
611 ------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
612
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
613 Whether the server supports the ``lookup`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
614
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
615 This capability was introduced in Mercurial 0.9.2 (released December
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
616 2006).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
617
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
618 This capability was introduced at the same time as the ``changegroupsubset``
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
619 capability/command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
620
37498
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
621 partial-pull
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
622 ------------
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
623
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
624 Indicates that the client can deal with partial answers to pull requests
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
625 by repeating the request.
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
626
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
627 If this parameter is not advertised, the server will not send pull bundles.
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
628
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
629 This client capability was introduced in Mercurial 4.6.
aacfca6f9767 wireproto: support for pullbundles
Joerg Sonnenberger <joerg@bec.de>
parents: 37488
diff changeset
630
37393
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
631 protocaps
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
632 ---------
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
633
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
634 Whether the server supports the ``protocaps`` command for SSH V1 transport.
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
635
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
636 This capability was introduced in Mercurial 4.6.
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
637
29863
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
638 pushkey
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
639 -------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
640
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
641 Whether the server supports the ``pushkey`` and ``listkeys`` commands.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
642
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
643 This capability was introduced in Mercurial 1.6 (released July 2010).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
644
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
645 standardbundle
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
646 --------------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
647
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
648 **Unsupported**
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
649
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
650 This capability was introduced during the Mercurial 0.9.2 development cycle in
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
651 2006. It was never present in a release, as it was replaced by the ``unbundle``
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
652 capability. This capability should not be encountered in the wild.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
653
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
654 stream-preferred
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
655 ----------------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
656
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
657 If present the server prefers that clients clone using the streaming clone
34393
fffd3369aa83 commands: rename clone --uncompressed to --stream and document
Gregory Szorc <gregory.szorc@gmail.com>
parents: 32133
diff changeset
658 protocol (``hg clone --stream``) rather than the standard
29863
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
659 changegroup/bundle based protocol.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
660
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
661 This capability was introduced in Mercurial 2.2 (released May 2012).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
662
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
663 streamreqs
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
664 ----------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
665
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
666 Indicates whether the server supports *streaming clones* and the *requirements*
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
667 that clients must support to receive it.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
668
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
669 If present, the server supports the ``stream_out`` command, which transmits
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
670 raw revlogs from the repository instead of changegroups. This provides a faster
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
671 cloning mechanism at the expense of more bandwidth used.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
672
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
673 The value of this capability is a comma-delimited list of repo format
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
674 *requirements*. These are requirements that impact the reading of data in
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
675 the ``.hg/store`` directory. An example value is
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
676 ``streamreqs=generaldelta,revlogv1`` indicating the server repo requires
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
677 the ``revlogv1`` and ``generaldelta`` requirements.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
678
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
679 If the only format requirement is ``revlogv1``, the server may expose the
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
680 ``stream`` capability instead of the ``streamreqs`` capability.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
681
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
682 This capability was introduced in Mercurial 1.7 (released November 2010).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
683
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
684 stream
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
685 ------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
686
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
687 Whether the server supports *streaming clones* from ``revlogv1`` repos.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
688
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
689 If present, the server supports the ``stream_out`` command, which transmits
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
690 raw revlogs from the repository instead of changegroups. This provides a faster
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
691 cloning mechanism at the expense of more bandwidth used.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
692
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
693 This capability was introduced in Mercurial 0.9.1 (released July 2006).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
694
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
695 When initially introduced, the value of the capability was the numeric
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
696 revlog revision. e.g. ``stream=1``. This indicates the changegroup is using
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
697 ``revlogv1``. This simple integer value wasn't powerful enough, so the
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
698 ``streamreqs`` capability was invented to handle cases where the repo
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
699 requirements have more than just ``revlogv1``. Newer servers omit the
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
700 ``=1`` since it was the only value supported and the value of ``1`` can
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
701 be implied by clients.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
702
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
703 unbundlehash
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
704 ------------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
705
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
706 Whether the ``unbundle`` commands supports receiving a hash of all the
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
707 heads instead of a list.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
708
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
709 For more, see the documentation for the ``unbundle`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
710
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
711 This capability was introduced in Mercurial 1.9 (released July 2011).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
712
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
713 unbundle
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
714 --------
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
715
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
716 Whether the server supports pushing via the ``unbundle`` command.
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
717
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
718 This capability/command has been present since Mercurial 0.9.1 (released
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
719 July 2006).
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
720
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
721 Mercurial 0.9.2 (released December 2006) added values to the capability
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
722 indicating which bundle types the server supports receiving. This value is a
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
723 comma-delimited list. e.g. ``HG10GZ,HG10BZ,HG10UN``. The order of values
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
724 reflects the priority/preference of that type, where the first value is the
2435ba6c82e6 help: document wire protocol capabilities
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29860
diff changeset
725 most preferred type.
29864
f0d47aca1d47 help: document wire protocol "handshake" protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29863
diff changeset
726
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
727 Content Negotiation
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
728 ===================
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
729
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
730 The wire protocol has some mechanisms to help peers determine what content
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
731 types and encoding the other side will accept. Historically, these mechanisms
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
732 have been built into commands themselves because most commands only send a
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
733 well-defined response type and only certain commands needed to support
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
734 functionality like compression.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
735
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
736 Currently, only the HTTP version 1 transport supports content negotiation
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
737 at the protocol layer.
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
738
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
739 HTTP requests advertise supported response formats via the ``X-HgProto-<N>``
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
740 request header, where ``<N>`` is an integer starting at 1 allowing the logical
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
741 value to span multiple headers. This value consists of a list of
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
742 space-delimited parameters. Each parameter denotes a feature or capability.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
743
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
744 The following parameters are defined:
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
745
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
746 0.1
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
747 Indicates the client supports receiving ``application/mercurial-0.1``
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
748 responses.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
749
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
750 0.2
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
751 Indicates the client supports receiving ``application/mercurial-0.2``
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
752 responses.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
753
37557
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
754 cbor
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
755 Indicates the client supports receiving ``application/mercurial-cbor``
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
756 responses.
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
757
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
758 (Only intended to be used with version 2 transports.)
734515aca84d wireproto: define and implement HTTP handshake to upgrade protocol
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37554
diff changeset
759
30760
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
760 comp
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
761 Indicates compression formats the client can decode. Value is a list of
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
762 comma delimited strings identifying compression formats ordered from
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
763 most preferential to least preferential. e.g. ``comp=zstd,zlib,none``.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
764
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
765 This parameter does not have an effect if only the ``0.1`` parameter
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
766 is defined, as support for ``application/mercurial-0.2`` or greater is
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
767 required to use arbitrary compression formats.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
768
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
769 If this parameter is not advertised, the server interprets this as
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
770 equivalent to ``zlib,none``.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
771
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
772 Clients may choose to only send this header if the ``httpmediatype``
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
773 server capability is present, as currently all server-side features
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
774 consulting this header require the client to opt in to new protocol features
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
775 advertised via the ``httpmediatype`` capability.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
776
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
777 A server that doesn't receive an ``X-HgProto-<N>`` header should infer a
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
778 value of ``0.1``. This is compatible with legacy clients.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
779
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
780 A server receiving a request indicating support for multiple media type
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
781 versions may respond with any of the supported media types. Not all servers
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
782 may support all media types on all commands.
753b9d43ca81 internals: document compression negotiation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29865
diff changeset
783
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
784 Commands
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
785 ========
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
786
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
787 This section contains a list of all wire protocol commands implemented by
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
788 the canonical Mercurial server.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
789
39439
dc61a67c1fc0 internals: extract wire protocol version 2 commands to standalone doc
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37726
diff changeset
790 See :hg:`help internals.wireprotocolv2` for information on commands exposed
dc61a67c1fc0 internals: extract wire protocol version 2 commands to standalone doc
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37726
diff changeset
791 to the frame-based protocol.
dc61a67c1fc0 internals: extract wire protocol version 2 commands to standalone doc
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37726
diff changeset
792
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
793 batch
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
794 -----
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
795
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
796 Issue multiple commands while sending a single command request. The purpose
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
797 of this command is to allow a client to issue multiple commands while avoiding
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
798 multiple round trips to the server therefore enabling commands to complete
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
799 quicker.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
800
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
801 The command accepts a ``cmds`` argument that contains a list of commands to
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
802 execute.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
803
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
804 The value of ``cmds`` is a ``;`` delimited list of strings. Each string has the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
805 form ``<command> <arguments>``. That is, the command name followed by a space
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
806 followed by an argument string.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
807
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
808 The argument string is a ``,`` delimited list of ``<key>=<value>`` values
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
809 corresponding to command arguments. Both the argument name and value are
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
810 escaped using a special substitution map::
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
811
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
812 : -> :c
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
813 , -> :o
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
814 ; -> :s
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
815 = -> :e
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
816
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
817 The response type for this command is ``string``. The value contains a
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
818 ``;`` delimited list of responses for each requested command. Each value
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
819 in this list is escaped using the same substitution map used for arguments.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
820
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
821 If an error occurs, the generic error response may be sent.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
822
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
823 between
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
824 -------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
825
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
826 (Legacy command used for discovery in old clients)
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
827
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
828 Obtain nodes between pairs of nodes.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
829
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
830 The ``pairs`` arguments contains a space-delimited list of ``-`` delimited
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
831 hex node pairs. e.g.::
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
832
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
833 a072279d3f7fd3a4aa7ffa1a5af8efc573e1c896-6dc58916e7c070f678682bfe404d2e2d68291a18
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
834
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
835 Return type is a ``string``. Value consists of lines corresponding to each
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
836 requested range. Each line contains a space-delimited list of hex nodes.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
837 A newline ``\n`` terminates each line, including the last one.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
838
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
839 branchmap
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
840 ---------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
841
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
842 Obtain heads in named branches.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
843
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
844 Accepts no arguments. Return type is a ``string``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
845
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
846 Return value contains lines with URL encoded branch names followed by a space
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
847 followed by a space-delimited list of hex nodes of heads on that branch.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
848 e.g.::
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
849
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
850 default a072279d3f7fd3a4aa7ffa1a5af8efc573e1c896 6dc58916e7c070f678682bfe404d2e2d68291a18
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
851 stable baae3bf31522f41dd5e6d7377d0edd8d1cf3fccc
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
852
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
853 There is no trailing newline.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
854
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
855 branches
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
856 --------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
857
32133
435a3842ca3a internals: document that "branches" is a legacy wire command
Siddharth Agarwal <sid0@fb.com>
parents: 30761
diff changeset
858 (Legacy command used for discovery in old clients. Clients with ``getbundle``
435a3842ca3a internals: document that "branches" is a legacy wire command
Siddharth Agarwal <sid0@fb.com>
parents: 30761
diff changeset
859 use the ``known`` and ``heads`` commands instead.)
435a3842ca3a internals: document that "branches" is a legacy wire command
Siddharth Agarwal <sid0@fb.com>
parents: 30761
diff changeset
860
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
861 Obtain ancestor changesets of specific nodes back to a branch point.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
862
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
863 Despite the name, this command has nothing to do with Mercurial named branches.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
864 Instead, it is related to DAG branches.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
866 The command accepts a ``nodes`` argument, which is a string of space-delimited
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
867 hex nodes.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
868
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
869 For each node requested, the server will find the first ancestor node that is
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
870 a DAG root or is a merge.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
871
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
872 Return type is a ``string``. Return value contains lines with result data for
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
873 each requested node. Each line contains space-delimited nodes followed by a
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
874 newline (``\n``). The 4 nodes reported on each line correspond to the requested
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
875 node, the ancestor node found, and its 2 parent nodes (which may be the null
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
876 node).
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
877
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
878 capabilities
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
879 ------------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
880
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
881 Obtain the capabilities string for the repo.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
882
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
883 Unlike the ``hello`` command, the capabilities string is not prefixed.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
884 There is no trailing newline.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
885
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
886 This command does not accept any arguments. Return type is a ``string``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
887
35883
0d8024be7166 internals: document when "hello" and "capabilities" commands were added
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35267
diff changeset
888 This command was introduced in Mercurial 0.9.1 (released July 2006).
0d8024be7166 internals: document when "hello" and "capabilities" commands were added
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35267
diff changeset
889
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
890 changegroup
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
891 -----------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
892
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
893 (Legacy command: use ``getbundle`` instead)
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
894
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
895 Obtain a changegroup version 1 with data for changesets that are
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
896 descendants of client-specified changesets.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
897
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
898 The ``roots`` arguments contains a list of space-delimited hex nodes.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
899
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
900 The server responds with a changegroup version 1 containing all
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
901 changesets between the requested root/base nodes and the repo's head nodes
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
902 at the time of the request.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
903
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
904 The return type is a ``stream``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
905
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
906 changegroupsubset
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
907 -----------------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
908
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
909 (Legacy command: use ``getbundle`` instead)
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
910
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
911 Obtain a changegroup version 1 with data for changesetsets between
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
912 client specified base and head nodes.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
913
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
914 The ``bases`` argument contains a list of space-delimited hex nodes.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
915 The ``heads`` argument contains a list of space-delimited hex nodes.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
916
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
917 The server responds with a changegroup version 1 containing all
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
918 changesets between the requested base and head nodes at the time of the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
919 request.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
920
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
921 The return type is a ``stream``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
922
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
923 clonebundles
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
924 ------------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
925
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
926 Obtains a manifest of bundle URLs available to seed clones.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
927
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
928 Each returned line contains a URL followed by metadata. See the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
929 documentation in the ``clonebundles`` extension for more.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
930
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
931 The return type is a ``string``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
932
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
933 getbundle
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
934 ---------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
935
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
936 Obtain a bundle containing repository data.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
937
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
938 This command accepts the following arguments:
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
939
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
940 heads
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
941 List of space-delimited hex nodes of heads to retrieve.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
942 common
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
943 List of space-delimited hex nodes that the client has in common with the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
944 server.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
945 obsmarkers
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
946 Boolean indicating whether to include obsolescence markers as part
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
947 of the response. Only works with bundle2.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
948 bundlecaps
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
949 Comma-delimited set of strings defining client bundle capabilities.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
950 listkeys
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
951 Comma-delimited list of strings of ``pushkey`` namespaces. For each
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
952 namespace listed, a bundle2 part will be included with the content of
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
953 that namespace.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
954 cg
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
955 Boolean indicating whether changegroup data is requested.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
956 cbattempted
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
957 Boolean indicating whether the client attempted to use the *clone bundles*
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
958 feature before performing this request.
35267
cb4dcd7fabe7 getbundle: add support for 'bookmarks' boolean argument
Boris Feld <boris.feld@octobus.net>
parents: 34930
diff changeset
959 bookmarks
cb4dcd7fabe7 getbundle: add support for 'bookmarks' boolean argument
Boris Feld <boris.feld@octobus.net>
parents: 34930
diff changeset
960 Boolean indicating whether bookmark data is requested.
34930
28baeab476cc internal-doc: document the 'phases' parameters to 'getbundle'
Boris Feld <boris.feld@octobus.net>
parents: 34393
diff changeset
961 phases
28baeab476cc internal-doc: document the 'phases' parameters to 'getbundle'
Boris Feld <boris.feld@octobus.net>
parents: 34393
diff changeset
962 Boolean indicating whether phases data is requested.
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
963
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
964 The return type on success is a ``stream`` where the value is bundle.
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
965 On the HTTP version 1 transport, the response is zlib compressed.
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
966
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
967 If an error occurs, a generic error response can be sent.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
968
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
969 Unless the client sends a false value for the ``cg`` argument, the returned
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
970 bundle contains a changegroup with the nodes between the specified ``common``
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
971 and ``heads`` nodes. Depending on the command arguments, the type and content
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
972 of the returned bundle can vary significantly.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
973
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
974 The default behavior is for the server to send a raw changegroup version
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
975 ``01`` response.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
976
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
977 If the ``bundlecaps`` provided by the client contain a value beginning
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
978 with ``HG2``, a bundle2 will be returned. The bundle2 data may contain
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
979 additional repository data, such as ``pushkey`` namespace values.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
980
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
981 heads
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
982 -----
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
983
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
984 Returns a list of space-delimited hex nodes of repository heads followed
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
985 by a newline. e.g.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
986 ``a9eeb3adc7ddb5006c088e9eda61791c777cbf7c 31f91a3da534dc849f0d6bfc00a395a97cf218a1\n``
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
987
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
988 This command does not accept any arguments. The return type is a ``string``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
989
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
990 hello
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
991 -----
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
992
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
993 Returns lines describing interesting things about the server in an RFC-822
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
994 like format.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
995
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
996 Currently, the only line defines the server capabilities. It has the form::
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
997
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
998 capabilities: <value>
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
999
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1000 See above for more about the capabilities string.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1001
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1002 SSH clients typically issue this command as soon as a connection is
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1003 established.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1004
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1005 This command does not accept any arguments. The return type is a ``string``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1006
35883
0d8024be7166 internals: document when "hello" and "capabilities" commands were added
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35267
diff changeset
1007 This command was introduced in Mercurial 0.9.1 (released July 2006).
0d8024be7166 internals: document when "hello" and "capabilities" commands were added
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35267
diff changeset
1008
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1009 listkeys
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1010 --------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1011
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1012 List values in a specified ``pushkey`` namespace.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1013
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1014 The ``namespace`` argument defines the pushkey namespace to operate on.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1015
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1016 The return type is a ``string``. The value is an encoded dictionary of keys.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1017
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1018 Key-value pairs are delimited by newlines (``\n``). Within each line, keys and
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1019 values are separated by a tab (``\t``). Keys and values are both strings.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1020
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1021 lookup
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1022 ------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1023
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1024 Try to resolve a value to a known repository revision.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1025
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1026 The ``key`` argument is converted from bytes to an
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1027 ``encoding.localstr`` instance then passed into
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1028 ``localrepository.__getitem__`` in an attempt to resolve it.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1029
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1030 The return type is a ``string``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1031
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1032 Upon successful resolution, returns ``1 <hex node>\n``. On failure,
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1033 returns ``0 <error string>\n``. e.g.::
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1034
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1035 1 273ce12ad8f155317b2c078ec75a4eba507f1fba\n
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1036
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1037 0 unknown revision 'foo'\n
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1038
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1039 known
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1040 -----
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1041
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1042 Determine whether multiple nodes are known.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1043
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1044 The ``nodes`` argument is a list of space-delimited hex nodes to check
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1045 for existence.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1046
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1047 The return type is ``string``.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1048
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1049 Returns a string consisting of ``0``s and ``1``s indicating whether nodes
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1050 are known. If the Nth node specified in the ``nodes`` argument is known,
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1051 a ``1`` will be returned at byte offset N. If the node isn't known, ``0``
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1052 will be present at byte offset N.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1053
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1054 There is no trailing newline.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1055
37393
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1056 protocaps
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1057 ---------
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1058
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1059 Notify the server about the client capabilities in the SSH V1 transport
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1060 protocol.
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1061
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1062 The ``caps`` argument is a space-delimited list of capabilities.
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1063
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1064 The server will reply with the string ``OK``.
afcfdf53e4b5 wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents: 37319
diff changeset
1065
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1066 pushkey
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1067 -------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1068
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1069 Set a value using the ``pushkey`` protocol.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1070
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1071 Accepts arguments ``namespace``, ``key``, ``old``, and ``new``, which
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1072 correspond to the pushkey namespace to operate on, the key within that
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1073 namespace to change, the old value (which may be empty), and the new value.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1074 All arguments are string types.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1075
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1076 The return type is a ``string``. The value depends on the transport protocol.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1077
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1078 The SSH version 1 transport sends a string encoded integer followed by a
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1079 newline (``\n``) which indicates operation result. The server may send
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1080 additional output on the ``stderr`` stream that should be displayed to the
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1081 user.
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1082
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1083 The HTTP version 1 transport sends a string encoded integer followed by a
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1084 newline followed by additional server output that should be displayed to
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1085 the user. This may include output from hooks, etc.
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1086
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1087 The integer result varies by namespace. ``0`` means an error has occurred
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1088 and there should be additional output to display to the user.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1089
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1090 stream_out
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1091 ----------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1092
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1093 Obtain *streaming clone* data.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1094
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1095 The return type is either a ``string`` or a ``stream``, depending on
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1096 whether the request was fulfilled properly.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1097
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1098 A return value of ``1\n`` indicates the server is not configured to serve
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1099 this data. If this is seen by the client, they may not have verified the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1100 ``stream`` capability is set before making the request.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1101
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1102 A return value of ``2\n`` indicates the server was unable to lock the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1103 repository to generate data.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1104
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1105 All other responses are a ``stream`` of bytes. The first line of this data
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1106 contains 2 space-delimited integers corresponding to the path count and
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1107 payload size, respectively::
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1108
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1109 <path count> <payload size>\n
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1110
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1111 The ``<payload size>`` is the total size of path data: it does not include
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1112 the size of the per-path header lines.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1113
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1114 Following that header are ``<path count>`` entries. Each entry consists of a
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1115 line with metadata followed by raw revlog data. The line consists of::
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1116
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1117 <store path>\0<size>\n
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1118
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1119 The ``<store path>`` is the encoded store path of the data that follows.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1120 ``<size>`` is the amount of data for this store path/revlog that follows the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1121 newline.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1122
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1123 There is no trailer to indicate end of data. Instead, the client should stop
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1124 reading after ``<path count>`` entries are consumed.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1125
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1126 unbundle
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1127 --------
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1128
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1129 Send a bundle containing data (usually changegroup data) to the server.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1130
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1131 Accepts the argument ``heads``, which is a space-delimited list of hex nodes
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1132 corresponding to server repository heads observed by the client. This is used
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1133 to detect race conditions and abort push operations before a server performs
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1134 too much work or a client transfers too much data.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1135
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1136 The request payload consists of a bundle to be applied to the repository,
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1137 similarly to as if :hg:`unbundle` were called.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1138
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1139 In most scenarios, a special ``push response`` type is returned. This type
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1140 contains an integer describing the change in heads as a result of the
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1141 operation. A value of ``0`` indicates nothing changed. ``1`` means the number
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1142 of heads remained the same. Values ``2`` and larger indicate the number of
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1143 added heads minus 1. e.g. ``3`` means 2 heads were added. Negative values
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1144 indicate the number of fewer heads, also off by 1. e.g. ``-2`` means there
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1145 is 1 fewer head.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1146
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1147 The encoding of the ``push response`` type varies by transport.
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1148
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1149 For the SSH version 1 transport, this type is composed of 2 ``string``
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1150 responses: an empty response (``0\n``) followed by the integer result value.
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1151 e.g. ``1\n2``. So the full response might be ``0\n1\n2``.
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1152
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1153 For the HTTP version 1 transport, the response is a ``string`` type composed
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1154 of an integer result value followed by a newline (``\n``) followed by string
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1155 content holding server output that should be displayed on the client (output
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1156 hooks, etc).
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1157
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1158 In some cases, the server may respond with a ``bundle2`` bundle. In this
35975
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1159 case, the response type is ``stream``. For the HTTP version 1 transport, the
40d94ea51402 internals: refactor wire protocol documentation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 35883
diff changeset
1160 response is zlib compressed.
29865
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1161
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1162 The server may also respond with a generic error type, which contains a string
80c11c1a64bf help: document wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29864
diff changeset
1163 indicating the failure.