##// END OF EJS Templates
internals: document when "hello" and "capabilities" commands were added...
Gregory Szorc -
r35901:0d8024be default
parent child Browse files
Show More
@@ -1,925 +1,929 b''
1 1 The Mercurial wire protocol is a request-response based protocol
2 2 with multiple wire representations.
3 3
4 4 Each request is modeled as a command name, a dictionary of arguments, and
5 5 optional raw input. Command arguments and their types are intrinsic
6 6 properties of commands. So is the response type of the command. This means
7 7 clients can't always send arbitrary arguments to servers and servers can't
8 8 return multiple response types.
9 9
10 10 The protocol is synchronous and does not support multiplexing (concurrent
11 11 commands).
12 12
13 13 Transport Protocols
14 14 ===================
15 15
16 16 HTTP Transport
17 17 --------------
18 18
19 19 Commands are issued as HTTP/1.0 or HTTP/1.1 requests. Commands are
20 20 sent to the base URL of the repository with the command name sent in
21 21 the ``cmd`` query string parameter. e.g.
22 22 ``https://example.com/repo?cmd=capabilities``. The HTTP method is ``GET``
23 23 or ``POST`` depending on the command and whether there is a request
24 24 body.
25 25
26 26 Command arguments can be sent multiple ways.
27 27
28 28 The simplest is part of the URL query string using ``x-www-form-urlencoded``
29 29 encoding (see Python's ``urllib.urlencode()``. However, many servers impose
30 30 length limitations on the URL. So this mechanism is typically only used if
31 31 the server doesn't support other mechanisms.
32 32
33 33 If the server supports the ``httpheader`` capability, command arguments can
34 34 be sent in HTTP request headers named ``X-HgArg-<N>`` where ``<N>`` is an
35 35 integer starting at 1. A ``x-www-form-urlencoded`` representation of the
36 36 arguments is obtained. This full string is then split into chunks and sent
37 37 in numbered ``X-HgArg-<N>`` headers. The maximum length of each HTTP header
38 38 is defined by the server in the ``httpheader`` capability value, which defaults
39 39 to ``1024``. The server reassembles the encoded arguments string by
40 40 concatenating the ``X-HgArg-<N>`` headers then URL decodes them into a
41 41 dictionary.
42 42
43 43 The list of ``X-HgArg-<N>`` headers should be added to the ``Vary`` request
44 44 header to instruct caches to take these headers into consideration when caching
45 45 requests.
46 46
47 47 If the server supports the ``httppostargs`` capability, the client
48 48 may send command arguments in the HTTP request body as part of an
49 49 HTTP POST request. The command arguments will be URL encoded just like
50 50 they would for sending them via HTTP headers. However, no splitting is
51 51 performed: the raw arguments are included in the HTTP request body.
52 52
53 53 The client sends a ``X-HgArgs-Post`` header with the string length of the
54 54 encoded arguments data. Additional data may be included in the HTTP
55 55 request body immediately following the argument data. The offset of the
56 56 non-argument data is defined by the ``X-HgArgs-Post`` header. The
57 57 ``X-HgArgs-Post`` header is not required if there is no argument data.
58 58
59 59 Additional command data can be sent as part of the HTTP request body. The
60 60 default ``Content-Type`` when sending data is ``application/mercurial-0.1``.
61 61 A ``Content-Length`` header is currently always sent.
62 62
63 63 Example HTTP requests::
64 64
65 65 GET /repo?cmd=capabilities
66 66 X-HgArg-1: foo=bar&baz=hello%20world
67 67
68 68 The request media type should be chosen based on server support. If the
69 69 ``httpmediatype`` server capability is present, the client should send
70 70 the newest mutually supported media type. If this capability is absent,
71 71 the client must assume the server only supports the
72 72 ``application/mercurial-0.1`` media type.
73 73
74 74 The ``Content-Type`` HTTP response header identifies the response as coming
75 75 from Mercurial and can also be used to signal an error has occurred.
76 76
77 77 The ``application/mercurial-*`` media types indicate a generic Mercurial
78 78 data type.
79 79
80 80 The ``application/mercurial-0.1`` media type is raw Mercurial data. It is the
81 81 predecessor of the format below.
82 82
83 83 The ``application/mercurial-0.2`` media type is compression framed Mercurial
84 84 data. The first byte of the payload indicates the length of the compression
85 85 format identifier that follows. Next are N bytes indicating the compression
86 86 format. e.g. ``zlib``. The remaining bytes are compressed according to that
87 87 compression format. The decompressed data behaves the same as with
88 88 ``application/mercurial-0.1``.
89 89
90 90 The ``application/hg-error`` media type indicates a generic error occurred.
91 91 The content of the HTTP response body typically holds text describing the
92 92 error.
93 93
94 94 The ``application/hg-changegroup`` media type indicates a changegroup response
95 95 type.
96 96
97 97 Clients also accept the ``text/plain`` media type. All other media
98 98 types should cause the client to error.
99 99
100 100 Behavior of media types is further described in the ``Content Negotiation``
101 101 section below.
102 102
103 103 Clients should issue a ``User-Agent`` request header that identifies the client.
104 104 The server should not use the ``User-Agent`` for feature detection.
105 105
106 106 A command returning a ``string`` response issues a
107 107 ``application/mercurial-0.*`` media type and the HTTP response body contains
108 108 the raw string value (after compression decoding, if used). A
109 109 ``Content-Length`` header is typically issued, but not required.
110 110
111 111 A command returning a ``stream`` response issues a
112 112 ``application/mercurial-0.*`` media type and the HTTP response is typically
113 113 using *chunked transfer* (``Transfer-Encoding: chunked``).
114 114
115 115 SSH Transport
116 116 =============
117 117
118 118 The SSH transport is a custom text-based protocol suitable for use over any
119 119 bi-directional stream transport. It is most commonly used with SSH.
120 120
121 121 A SSH transport server can be started with ``hg serve --stdio``. The stdin,
122 122 stderr, and stdout file descriptors of the started process are used to exchange
123 123 data. When Mercurial connects to a remote server over SSH, it actually starts
124 124 a ``hg serve --stdio`` process on the remote server.
125 125
126 126 Commands are issued by sending the command name followed by a trailing newline
127 127 ``\n`` to the server. e.g. ``capabilities\n``.
128 128
129 129 Command arguments are sent in the following format::
130 130
131 131 <argument> <length>\n<value>
132 132
133 133 That is, the argument string name followed by a space followed by the
134 134 integer length of the value (expressed as a string) followed by a newline
135 135 (``\n``) followed by the raw argument value.
136 136
137 137 Dictionary arguments are encoded differently::
138 138
139 139 <argument> <# elements>\n
140 140 <key1> <length1>\n<value1>
141 141 <key2> <length2>\n<value2>
142 142 ...
143 143
144 144 Non-argument data is sent immediately after the final argument value. It is
145 145 encoded in chunks::
146 146
147 147 <length>\n<data>
148 148
149 149 Each command declares a list of supported arguments and their types. If a
150 150 client sends an unknown argument to the server, the server should abort
151 151 immediately. The special argument ``*`` in a command's definition indicates
152 152 that all argument names are allowed.
153 153
154 154 The definition of supported arguments and types is initially made when a
155 155 new command is implemented. The client and server must initially independently
156 156 agree on the arguments and their types. This initial set of arguments can be
157 157 supplemented through the presence of *capabilities* advertised by the server.
158 158
159 159 Each command has a defined expected response type.
160 160
161 161 A ``string`` response type is a length framed value. The response consists of
162 162 the string encoded integer length of a value followed by a newline (``\n``)
163 163 followed by the value. Empty values are allowed (and are represented as
164 164 ``0\n``).
165 165
166 166 A ``stream`` response type consists of raw bytes of data. There is no framing.
167 167
168 168 A generic error response type is also supported. It consists of a an error
169 169 message written to ``stderr`` followed by ``\n-\n``. In addition, ``\n`` is
170 170 written to ``stdout``.
171 171
172 172 If the server receives an unknown command, it will send an empty ``string``
173 173 response.
174 174
175 175 The server terminates if it receives an empty command (a ``\n`` character).
176 176
177 177 Capabilities
178 178 ============
179 179
180 180 Servers advertise supported wire protocol features. This allows clients to
181 181 probe for server features before blindly calling a command or passing a
182 182 specific argument.
183 183
184 184 The server's features are exposed via a *capabilities* string. This is a
185 185 space-delimited string of tokens/features. Some features are single words
186 186 like ``lookup`` or ``batch``. Others are complicated key-value pairs
187 187 advertising sub-features. e.g. ``httpheader=2048``. When complex, non-word
188 188 values are used, each feature name can define its own encoding of sub-values.
189 189 Comma-delimited and ``x-www-form-urlencoded`` values are common.
190 190
191 191 The following document capabilities defined by the canonical Mercurial server
192 192 implementation.
193 193
194 194 batch
195 195 -----
196 196
197 197 Whether the server supports the ``batch`` command.
198 198
199 199 This capability/command was introduced in Mercurial 1.9 (released July 2011).
200 200
201 201 branchmap
202 202 ---------
203 203
204 204 Whether the server supports the ``branchmap`` command.
205 205
206 206 This capability/command was introduced in Mercurial 1.3 (released July 2009).
207 207
208 208 bundle2-exp
209 209 -----------
210 210
211 211 Precursor to ``bundle2`` capability that was used before bundle2 was a
212 212 stable feature.
213 213
214 214 This capability was introduced in Mercurial 3.0 behind an experimental
215 215 flag. This capability should not be observed in the wild.
216 216
217 217 bundle2
218 218 -------
219 219
220 220 Indicates whether the server supports the ``bundle2`` data exchange format.
221 221
222 222 The value of the capability is a URL quoted, newline (``\n``) delimited
223 223 list of keys or key-value pairs.
224 224
225 225 A key is simply a URL encoded string.
226 226
227 227 A key-value pair is a URL encoded key separated from a URL encoded value by
228 228 an ``=``. If the value is a list, elements are delimited by a ``,`` after
229 229 URL encoding.
230 230
231 231 For example, say we have the values::
232 232
233 233 {'HG20': [], 'changegroup': ['01', '02'], 'digests': ['sha1', 'sha512']}
234 234
235 235 We would first construct a string::
236 236
237 237 HG20\nchangegroup=01,02\ndigests=sha1,sha512
238 238
239 239 We would then URL quote this string::
240 240
241 241 HG20%0Achangegroup%3D01%2C02%0Adigests%3Dsha1%2Csha512
242 242
243 243 This capability was introduced in Mercurial 3.4 (released May 2015).
244 244
245 245 changegroupsubset
246 246 -----------------
247 247
248 248 Whether the server supports the ``changegroupsubset`` command.
249 249
250 250 This capability was introduced in Mercurial 0.9.2 (released December
251 251 2006).
252 252
253 253 This capability was introduced at the same time as the ``lookup``
254 254 capability/command.
255 255
256 256 compression
257 257 -----------
258 258
259 259 Declares support for negotiating compression formats.
260 260
261 261 Presence of this capability indicates the server supports dynamic selection
262 262 of compression formats based on the client request.
263 263
264 264 Servers advertising this capability are required to support the
265 265 ``application/mercurial-0.2`` media type in response to commands returning
266 266 streams. Servers may support this media type on any command.
267 267
268 268 The value of the capability is a comma-delimited list of strings declaring
269 269 supported compression formats. The order of the compression formats is in
270 270 server-preferred order, most preferred first.
271 271
272 272 The identifiers used by the official Mercurial distribution are:
273 273
274 274 bzip2
275 275 bzip2
276 276 none
277 277 uncompressed / raw data
278 278 zlib
279 279 zlib (no gzip header)
280 280 zstd
281 281 zstd
282 282
283 283 This capability was introduced in Mercurial 4.1 (released February 2017).
284 284
285 285 getbundle
286 286 ---------
287 287
288 288 Whether the server supports the ``getbundle`` command.
289 289
290 290 This capability was introduced in Mercurial 1.9 (released July 2011).
291 291
292 292 httpheader
293 293 ----------
294 294
295 295 Whether the server supports receiving command arguments via HTTP request
296 296 headers.
297 297
298 298 The value of the capability is an integer describing the max header
299 299 length that clients should send. Clients should ignore any content after a
300 300 comma in the value, as this is reserved for future use.
301 301
302 302 This capability was introduced in Mercurial 1.9 (released July 2011).
303 303
304 304 httpmediatype
305 305 -------------
306 306
307 307 Indicates which HTTP media types (``Content-Type`` header) the server is
308 308 capable of receiving and sending.
309 309
310 310 The value of the capability is a comma-delimited list of strings identifying
311 311 support for media type and transmission direction. The following strings may
312 312 be present:
313 313
314 314 0.1rx
315 315 Indicates server support for receiving ``application/mercurial-0.1`` media
316 316 types.
317 317
318 318 0.1tx
319 319 Indicates server support for sending ``application/mercurial-0.1`` media
320 320 types.
321 321
322 322 0.2rx
323 323 Indicates server support for receiving ``application/mercurial-0.2`` media
324 324 types.
325 325
326 326 0.2tx
327 327 Indicates server support for sending ``application/mercurial-0.2`` media
328 328 types.
329 329
330 330 minrx=X
331 331 Minimum media type version the server is capable of receiving. Value is a
332 332 string like ``0.2``.
333 333
334 334 This capability can be used by servers to limit connections from legacy
335 335 clients not using the latest supported media type. However, only clients
336 336 with knowledge of this capability will know to consult this value. This
337 337 capability is present so the client may issue a more user-friendly error
338 338 when the server has locked out a legacy client.
339 339
340 340 mintx=X
341 341 Minimum media type version the server is capable of sending. Value is a
342 342 string like ``0.1``.
343 343
344 344 Servers advertising support for the ``application/mercurial-0.2`` media type
345 345 should also advertise the ``compression`` capability.
346 346
347 347 This capability was introduced in Mercurial 4.1 (released February 2017).
348 348
349 349 httppostargs
350 350 ------------
351 351
352 352 **Experimental**
353 353
354 354 Indicates that the server supports and prefers clients send command arguments
355 355 via a HTTP POST request as part of the request body.
356 356
357 357 This capability was introduced in Mercurial 3.8 (released May 2016).
358 358
359 359 known
360 360 -----
361 361
362 362 Whether the server supports the ``known`` command.
363 363
364 364 This capability/command was introduced in Mercurial 1.9 (released July 2011).
365 365
366 366 lookup
367 367 ------
368 368
369 369 Whether the server supports the ``lookup`` command.
370 370
371 371 This capability was introduced in Mercurial 0.9.2 (released December
372 372 2006).
373 373
374 374 This capability was introduced at the same time as the ``changegroupsubset``
375 375 capability/command.
376 376
377 377 pushkey
378 378 -------
379 379
380 380 Whether the server supports the ``pushkey`` and ``listkeys`` commands.
381 381
382 382 This capability was introduced in Mercurial 1.6 (released July 2010).
383 383
384 384 standardbundle
385 385 --------------
386 386
387 387 **Unsupported**
388 388
389 389 This capability was introduced during the Mercurial 0.9.2 development cycle in
390 390 2006. It was never present in a release, as it was replaced by the ``unbundle``
391 391 capability. This capability should not be encountered in the wild.
392 392
393 393 stream-preferred
394 394 ----------------
395 395
396 396 If present the server prefers that clients clone using the streaming clone
397 397 protocol (``hg clone --stream``) rather than the standard
398 398 changegroup/bundle based protocol.
399 399
400 400 This capability was introduced in Mercurial 2.2 (released May 2012).
401 401
402 402 streamreqs
403 403 ----------
404 404
405 405 Indicates whether the server supports *streaming clones* and the *requirements*
406 406 that clients must support to receive it.
407 407
408 408 If present, the server supports the ``stream_out`` command, which transmits
409 409 raw revlogs from the repository instead of changegroups. This provides a faster
410 410 cloning mechanism at the expense of more bandwidth used.
411 411
412 412 The value of this capability is a comma-delimited list of repo format
413 413 *requirements*. These are requirements that impact the reading of data in
414 414 the ``.hg/store`` directory. An example value is
415 415 ``streamreqs=generaldelta,revlogv1`` indicating the server repo requires
416 416 the ``revlogv1`` and ``generaldelta`` requirements.
417 417
418 418 If the only format requirement is ``revlogv1``, the server may expose the
419 419 ``stream`` capability instead of the ``streamreqs`` capability.
420 420
421 421 This capability was introduced in Mercurial 1.7 (released November 2010).
422 422
423 423 stream
424 424 ------
425 425
426 426 Whether the server supports *streaming clones* from ``revlogv1`` repos.
427 427
428 428 If present, the server supports the ``stream_out`` command, which transmits
429 429 raw revlogs from the repository instead of changegroups. This provides a faster
430 430 cloning mechanism at the expense of more bandwidth used.
431 431
432 432 This capability was introduced in Mercurial 0.9.1 (released July 2006).
433 433
434 434 When initially introduced, the value of the capability was the numeric
435 435 revlog revision. e.g. ``stream=1``. This indicates the changegroup is using
436 436 ``revlogv1``. This simple integer value wasn't powerful enough, so the
437 437 ``streamreqs`` capability was invented to handle cases where the repo
438 438 requirements have more than just ``revlogv1``. Newer servers omit the
439 439 ``=1`` since it was the only value supported and the value of ``1`` can
440 440 be implied by clients.
441 441
442 442 unbundlehash
443 443 ------------
444 444
445 445 Whether the ``unbundle`` commands supports receiving a hash of all the
446 446 heads instead of a list.
447 447
448 448 For more, see the documentation for the ``unbundle`` command.
449 449
450 450 This capability was introduced in Mercurial 1.9 (released July 2011).
451 451
452 452 unbundle
453 453 --------
454 454
455 455 Whether the server supports pushing via the ``unbundle`` command.
456 456
457 457 This capability/command has been present since Mercurial 0.9.1 (released
458 458 July 2006).
459 459
460 460 Mercurial 0.9.2 (released December 2006) added values to the capability
461 461 indicating which bundle types the server supports receiving. This value is a
462 462 comma-delimited list. e.g. ``HG10GZ,HG10BZ,HG10UN``. The order of values
463 463 reflects the priority/preference of that type, where the first value is the
464 464 most preferred type.
465 465
466 466 Handshake Protocol
467 467 ==================
468 468
469 469 While not explicitly required, it is common for clients to perform a
470 470 *handshake* when connecting to a server. The handshake accomplishes 2 things:
471 471
472 472 * Obtaining capabilities and other server features
473 473 * Flushing extra server output (e.g. SSH servers may print extra text
474 474 when connecting that may confuse the wire protocol)
475 475
476 476 This isn't a traditional *handshake* as far as network protocols go because
477 477 there is no persistent state as a result of the handshake: the handshake is
478 478 simply the issuing of commands and commands are stateless.
479 479
480 480 The canonical clients perform a capabilities lookup at connection establishment
481 481 time. This is because clients must assume a server only supports the features
482 482 of the original Mercurial server implementation until proven otherwise (from
483 483 advertised capabilities). Nearly every server running today supports features
484 484 that weren't present in the original Mercurial server implementation. Rather
485 485 than wait for a client to perform functionality that needs to consult
486 486 capabilities, it issues the lookup at connection start to avoid any delay later.
487 487
488 488 For HTTP servers, the client sends a ``capabilities`` command request as
489 489 soon as the connection is established. The server responds with a capabilities
490 490 string, which the client parses.
491 491
492 492 For SSH servers, the client sends the ``hello`` command (no arguments)
493 493 and a ``between`` command with the ``pairs`` argument having the value
494 494 ``0000000000000000000000000000000000000000-0000000000000000000000000000000000000000``.
495 495
496 496 The ``between`` command has been supported since the original Mercurial
497 497 server. Requesting the empty range will return a ``\n`` string response,
498 498 which will be encoded as ``1\n\n`` (value length of ``1`` followed by a newline
499 499 followed by the value, which happens to be a newline).
500 500
501 501 The ``hello`` command was later introduced. Servers supporting it will issue
502 502 a response to that command before sending the ``1\n\n`` response to the
503 503 ``between`` command. Servers not supporting ``hello`` will send an empty
504 504 response (``0\n``).
505 505
506 506 In addition to the expected output from the ``hello`` and ``between`` commands,
507 507 servers may also send other output, such as *message of the day (MOTD)*
508 508 announcements. Clients assume servers will send this output before the
509 509 Mercurial server replies to the client-issued commands. So any server output
510 510 not conforming to the expected command responses is assumed to be not related
511 511 to Mercurial and can be ignored.
512 512
513 513 Content Negotiation
514 514 ===================
515 515
516 516 The wire protocol has some mechanisms to help peers determine what content
517 517 types and encoding the other side will accept. Historically, these mechanisms
518 518 have been built into commands themselves because most commands only send a
519 519 well-defined response type and only certain commands needed to support
520 520 functionality like compression.
521 521
522 522 Currently, only the HTTP transport supports content negotiation at the protocol
523 523 layer.
524 524
525 525 HTTP requests advertise supported response formats via the ``X-HgProto-<N>``
526 526 request header, where ``<N>`` is an integer starting at 1 allowing the logical
527 527 value to span multiple headers. This value consists of a list of
528 528 space-delimited parameters. Each parameter denotes a feature or capability.
529 529
530 530 The following parameters are defined:
531 531
532 532 0.1
533 533 Indicates the client supports receiving ``application/mercurial-0.1``
534 534 responses.
535 535
536 536 0.2
537 537 Indicates the client supports receiving ``application/mercurial-0.2``
538 538 responses.
539 539
540 540 comp
541 541 Indicates compression formats the client can decode. Value is a list of
542 542 comma delimited strings identifying compression formats ordered from
543 543 most preferential to least preferential. e.g. ``comp=zstd,zlib,none``.
544 544
545 545 This parameter does not have an effect if only the ``0.1`` parameter
546 546 is defined, as support for ``application/mercurial-0.2`` or greater is
547 547 required to use arbitrary compression formats.
548 548
549 549 If this parameter is not advertised, the server interprets this as
550 550 equivalent to ``zlib,none``.
551 551
552 552 Clients may choose to only send this header if the ``httpmediatype``
553 553 server capability is present, as currently all server-side features
554 554 consulting this header require the client to opt in to new protocol features
555 555 advertised via the ``httpmediatype`` capability.
556 556
557 557 A server that doesn't receive an ``X-HgProto-<N>`` header should infer a
558 558 value of ``0.1``. This is compatible with legacy clients.
559 559
560 560 A server receiving a request indicating support for multiple media type
561 561 versions may respond with any of the supported media types. Not all servers
562 562 may support all media types on all commands.
563 563
564 564 Commands
565 565 ========
566 566
567 567 This section contains a list of all wire protocol commands implemented by
568 568 the canonical Mercurial server.
569 569
570 570 batch
571 571 -----
572 572
573 573 Issue multiple commands while sending a single command request. The purpose
574 574 of this command is to allow a client to issue multiple commands while avoiding
575 575 multiple round trips to the server therefore enabling commands to complete
576 576 quicker.
577 577
578 578 The command accepts a ``cmds`` argument that contains a list of commands to
579 579 execute.
580 580
581 581 The value of ``cmds`` is a ``;`` delimited list of strings. Each string has the
582 582 form ``<command> <arguments>``. That is, the command name followed by a space
583 583 followed by an argument string.
584 584
585 585 The argument string is a ``,`` delimited list of ``<key>=<value>`` values
586 586 corresponding to command arguments. Both the argument name and value are
587 587 escaped using a special substitution map::
588 588
589 589 : -> :c
590 590 , -> :o
591 591 ; -> :s
592 592 = -> :e
593 593
594 594 The response type for this command is ``string``. The value contains a
595 595 ``;`` delimited list of responses for each requested command. Each value
596 596 in this list is escaped using the same substitution map used for arguments.
597 597
598 598 If an error occurs, the generic error response may be sent.
599 599
600 600 between
601 601 -------
602 602
603 603 (Legacy command used for discovery in old clients)
604 604
605 605 Obtain nodes between pairs of nodes.
606 606
607 607 The ``pairs`` arguments contains a space-delimited list of ``-`` delimited
608 608 hex node pairs. e.g.::
609 609
610 610 a072279d3f7fd3a4aa7ffa1a5af8efc573e1c896-6dc58916e7c070f678682bfe404d2e2d68291a18
611 611
612 612 Return type is a ``string``. Value consists of lines corresponding to each
613 613 requested range. Each line contains a space-delimited list of hex nodes.
614 614 A newline ``\n`` terminates each line, including the last one.
615 615
616 616 branchmap
617 617 ---------
618 618
619 619 Obtain heads in named branches.
620 620
621 621 Accepts no arguments. Return type is a ``string``.
622 622
623 623 Return value contains lines with URL encoded branch names followed by a space
624 624 followed by a space-delimited list of hex nodes of heads on that branch.
625 625 e.g.::
626 626
627 627 default a072279d3f7fd3a4aa7ffa1a5af8efc573e1c896 6dc58916e7c070f678682bfe404d2e2d68291a18
628 628 stable baae3bf31522f41dd5e6d7377d0edd8d1cf3fccc
629 629
630 630 There is no trailing newline.
631 631
632 632 branches
633 633 --------
634 634
635 635 (Legacy command used for discovery in old clients. Clients with ``getbundle``
636 636 use the ``known`` and ``heads`` commands instead.)
637 637
638 638 Obtain ancestor changesets of specific nodes back to a branch point.
639 639
640 640 Despite the name, this command has nothing to do with Mercurial named branches.
641 641 Instead, it is related to DAG branches.
642 642
643 643 The command accepts a ``nodes`` argument, which is a string of space-delimited
644 644 hex nodes.
645 645
646 646 For each node requested, the server will find the first ancestor node that is
647 647 a DAG root or is a merge.
648 648
649 649 Return type is a ``string``. Return value contains lines with result data for
650 650 each requested node. Each line contains space-delimited nodes followed by a
651 651 newline (``\n``). The 4 nodes reported on each line correspond to the requested
652 652 node, the ancestor node found, and its 2 parent nodes (which may be the null
653 653 node).
654 654
655 655 capabilities
656 656 ------------
657 657
658 658 Obtain the capabilities string for the repo.
659 659
660 660 Unlike the ``hello`` command, the capabilities string is not prefixed.
661 661 There is no trailing newline.
662 662
663 663 This command does not accept any arguments. Return type is a ``string``.
664 664
665 This command was introduced in Mercurial 0.9.1 (released July 2006).
666
665 667 changegroup
666 668 -----------
667 669
668 670 (Legacy command: use ``getbundle`` instead)
669 671
670 672 Obtain a changegroup version 1 with data for changesets that are
671 673 descendants of client-specified changesets.
672 674
673 675 The ``roots`` arguments contains a list of space-delimited hex nodes.
674 676
675 677 The server responds with a changegroup version 1 containing all
676 678 changesets between the requested root/base nodes and the repo's head nodes
677 679 at the time of the request.
678 680
679 681 The return type is a ``stream``.
680 682
681 683 changegroupsubset
682 684 -----------------
683 685
684 686 (Legacy command: use ``getbundle`` instead)
685 687
686 688 Obtain a changegroup version 1 with data for changesetsets between
687 689 client specified base and head nodes.
688 690
689 691 The ``bases`` argument contains a list of space-delimited hex nodes.
690 692 The ``heads`` argument contains a list of space-delimited hex nodes.
691 693
692 694 The server responds with a changegroup version 1 containing all
693 695 changesets between the requested base and head nodes at the time of the
694 696 request.
695 697
696 698 The return type is a ``stream``.
697 699
698 700 clonebundles
699 701 ------------
700 702
701 703 Obtains a manifest of bundle URLs available to seed clones.
702 704
703 705 Each returned line contains a URL followed by metadata. See the
704 706 documentation in the ``clonebundles`` extension for more.
705 707
706 708 The return type is a ``string``.
707 709
708 710 getbundle
709 711 ---------
710 712
711 713 Obtain a bundle containing repository data.
712 714
713 715 This command accepts the following arguments:
714 716
715 717 heads
716 718 List of space-delimited hex nodes of heads to retrieve.
717 719 common
718 720 List of space-delimited hex nodes that the client has in common with the
719 721 server.
720 722 obsmarkers
721 723 Boolean indicating whether to include obsolescence markers as part
722 724 of the response. Only works with bundle2.
723 725 bundlecaps
724 726 Comma-delimited set of strings defining client bundle capabilities.
725 727 listkeys
726 728 Comma-delimited list of strings of ``pushkey`` namespaces. For each
727 729 namespace listed, a bundle2 part will be included with the content of
728 730 that namespace.
729 731 cg
730 732 Boolean indicating whether changegroup data is requested.
731 733 cbattempted
732 734 Boolean indicating whether the client attempted to use the *clone bundles*
733 735 feature before performing this request.
734 736 bookmarks
735 737 Boolean indicating whether bookmark data is requested.
736 738 phases
737 739 Boolean indicating whether phases data is requested.
738 740
739 741 The return type on success is a ``stream`` where the value is bundle.
740 742 On the HTTP transport, the response is zlib compressed.
741 743
742 744 If an error occurs, a generic error response can be sent.
743 745
744 746 Unless the client sends a false value for the ``cg`` argument, the returned
745 747 bundle contains a changegroup with the nodes between the specified ``common``
746 748 and ``heads`` nodes. Depending on the command arguments, the type and content
747 749 of the returned bundle can vary significantly.
748 750
749 751 The default behavior is for the server to send a raw changegroup version
750 752 ``01`` response.
751 753
752 754 If the ``bundlecaps`` provided by the client contain a value beginning
753 755 with ``HG2``, a bundle2 will be returned. The bundle2 data may contain
754 756 additional repository data, such as ``pushkey`` namespace values.
755 757
756 758 heads
757 759 -----
758 760
759 761 Returns a list of space-delimited hex nodes of repository heads followed
760 762 by a newline. e.g.
761 763 ``a9eeb3adc7ddb5006c088e9eda61791c777cbf7c 31f91a3da534dc849f0d6bfc00a395a97cf218a1\n``
762 764
763 765 This command does not accept any arguments. The return type is a ``string``.
764 766
765 767 hello
766 768 -----
767 769
768 770 Returns lines describing interesting things about the server in an RFC-822
769 771 like format.
770 772
771 773 Currently, the only line defines the server capabilities. It has the form::
772 774
773 775 capabilities: <value>
774 776
775 777 See above for more about the capabilities string.
776 778
777 779 SSH clients typically issue this command as soon as a connection is
778 780 established.
779 781
780 782 This command does not accept any arguments. The return type is a ``string``.
781 783
784 This command was introduced in Mercurial 0.9.1 (released July 2006).
785
782 786 listkeys
783 787 --------
784 788
785 789 List values in a specified ``pushkey`` namespace.
786 790
787 791 The ``namespace`` argument defines the pushkey namespace to operate on.
788 792
789 793 The return type is a ``string``. The value is an encoded dictionary of keys.
790 794
791 795 Key-value pairs are delimited by newlines (``\n``). Within each line, keys and
792 796 values are separated by a tab (``\t``). Keys and values are both strings.
793 797
794 798 lookup
795 799 ------
796 800
797 801 Try to resolve a value to a known repository revision.
798 802
799 803 The ``key`` argument is converted from bytes to an
800 804 ``encoding.localstr`` instance then passed into
801 805 ``localrepository.__getitem__`` in an attempt to resolve it.
802 806
803 807 The return type is a ``string``.
804 808
805 809 Upon successful resolution, returns ``1 <hex node>\n``. On failure,
806 810 returns ``0 <error string>\n``. e.g.::
807 811
808 812 1 273ce12ad8f155317b2c078ec75a4eba507f1fba\n
809 813
810 814 0 unknown revision 'foo'\n
811 815
812 816 known
813 817 -----
814 818
815 819 Determine whether multiple nodes are known.
816 820
817 821 The ``nodes`` argument is a list of space-delimited hex nodes to check
818 822 for existence.
819 823
820 824 The return type is ``string``.
821 825
822 826 Returns a string consisting of ``0``s and ``1``s indicating whether nodes
823 827 are known. If the Nth node specified in the ``nodes`` argument is known,
824 828 a ``1`` will be returned at byte offset N. If the node isn't known, ``0``
825 829 will be present at byte offset N.
826 830
827 831 There is no trailing newline.
828 832
829 833 pushkey
830 834 -------
831 835
832 836 Set a value using the ``pushkey`` protocol.
833 837
834 838 Accepts arguments ``namespace``, ``key``, ``old``, and ``new``, which
835 839 correspond to the pushkey namespace to operate on, the key within that
836 840 namespace to change, the old value (which may be empty), and the new value.
837 841 All arguments are string types.
838 842
839 843 The return type is a ``string``. The value depends on the transport protocol.
840 844
841 845 The SSH transport sends a string encoded integer followed by a newline
842 846 (``\n``) which indicates operation result. The server may send additional
843 847 output on the ``stderr`` stream that should be displayed to the user.
844 848
845 849 The HTTP transport sends a string encoded integer followed by a newline
846 850 followed by additional server output that should be displayed to the user.
847 851 This may include output from hooks, etc.
848 852
849 853 The integer result varies by namespace. ``0`` means an error has occurred
850 854 and there should be additional output to display to the user.
851 855
852 856 stream_out
853 857 ----------
854 858
855 859 Obtain *streaming clone* data.
856 860
857 861 The return type is either a ``string`` or a ``stream``, depending on
858 862 whether the request was fulfilled properly.
859 863
860 864 A return value of ``1\n`` indicates the server is not configured to serve
861 865 this data. If this is seen by the client, they may not have verified the
862 866 ``stream`` capability is set before making the request.
863 867
864 868 A return value of ``2\n`` indicates the server was unable to lock the
865 869 repository to generate data.
866 870
867 871 All other responses are a ``stream`` of bytes. The first line of this data
868 872 contains 2 space-delimited integers corresponding to the path count and
869 873 payload size, respectively::
870 874
871 875 <path count> <payload size>\n
872 876
873 877 The ``<payload size>`` is the total size of path data: it does not include
874 878 the size of the per-path header lines.
875 879
876 880 Following that header are ``<path count>`` entries. Each entry consists of a
877 881 line with metadata followed by raw revlog data. The line consists of::
878 882
879 883 <store path>\0<size>\n
880 884
881 885 The ``<store path>`` is the encoded store path of the data that follows.
882 886 ``<size>`` is the amount of data for this store path/revlog that follows the
883 887 newline.
884 888
885 889 There is no trailer to indicate end of data. Instead, the client should stop
886 890 reading after ``<path count>`` entries are consumed.
887 891
888 892 unbundle
889 893 --------
890 894
891 895 Send a bundle containing data (usually changegroup data) to the server.
892 896
893 897 Accepts the argument ``heads``, which is a space-delimited list of hex nodes
894 898 corresponding to server repository heads observed by the client. This is used
895 899 to detect race conditions and abort push operations before a server performs
896 900 too much work or a client transfers too much data.
897 901
898 902 The request payload consists of a bundle to be applied to the repository,
899 903 similarly to as if :hg:`unbundle` were called.
900 904
901 905 In most scenarios, a special ``push response`` type is returned. This type
902 906 contains an integer describing the change in heads as a result of the
903 907 operation. A value of ``0`` indicates nothing changed. ``1`` means the number
904 908 of heads remained the same. Values ``2`` and larger indicate the number of
905 909 added heads minus 1. e.g. ``3`` means 2 heads were added. Negative values
906 910 indicate the number of fewer heads, also off by 1. e.g. ``-2`` means there
907 911 is 1 fewer head.
908 912
909 913 The encoding of the ``push response`` type varies by transport.
910 914
911 915 For the SSH transport, this type is composed of 2 ``string`` responses: an
912 916 empty response (``0\n``) followed by the integer result value. e.g.
913 917 ``1\n2``. So the full response might be ``0\n1\n2``.
914 918
915 919 For the HTTP transport, the response is a ``string`` type composed of an
916 920 integer result value followed by a newline (``\n``) followed by string
917 921 content holding server output that should be displayed on the client (output
918 922 hooks, etc).
919 923
920 924 In some cases, the server may respond with a ``bundle2`` bundle. In this
921 925 case, the response type is ``stream``. For the HTTP transport, the response
922 926 is zlib compressed.
923 927
924 928 The server may also respond with a generic error type, which contains a string
925 929 indicating the failure.
General Comments 0
You need to be logged in to leave comments. Login now