##// END OF EJS Templates
internals: document that "branches" is a legacy wire command...
Siddharth Agarwal -
r32133:435a3842 default
parent child Browse files
Show More
@@ -1,918 +1,921 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 --uncompressed``) 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 (Legacy command used for discovery in old clients. Clients with ``getbundle``
636 use the ``known`` and ``heads`` commands instead.)
637
635 638 Obtain ancestor changesets of specific nodes back to a branch point.
636 639
637 640 Despite the name, this command has nothing to do with Mercurial named branches.
638 641 Instead, it is related to DAG branches.
639 642
640 643 The command accepts a ``nodes`` argument, which is a string of space-delimited
641 644 hex nodes.
642 645
643 646 For each node requested, the server will find the first ancestor node that is
644 647 a DAG root or is a merge.
645 648
646 649 Return type is a ``string``. Return value contains lines with result data for
647 650 each requested node. Each line contains space-delimited nodes followed by a
648 651 newline (``\n``). The 4 nodes reported on each line correspond to the requested
649 652 node, the ancestor node found, and its 2 parent nodes (which may be the null
650 653 node).
651 654
652 655 capabilities
653 656 ------------
654 657
655 658 Obtain the capabilities string for the repo.
656 659
657 660 Unlike the ``hello`` command, the capabilities string is not prefixed.
658 661 There is no trailing newline.
659 662
660 663 This command does not accept any arguments. Return type is a ``string``.
661 664
662 665 changegroup
663 666 -----------
664 667
665 668 (Legacy command: use ``getbundle`` instead)
666 669
667 670 Obtain a changegroup version 1 with data for changesets that are
668 671 descendants of client-specified changesets.
669 672
670 673 The ``roots`` arguments contains a list of space-delimited hex nodes.
671 674
672 675 The server responds with a changegroup version 1 containing all
673 676 changesets between the requested root/base nodes and the repo's head nodes
674 677 at the time of the request.
675 678
676 679 The return type is a ``stream``.
677 680
678 681 changegroupsubset
679 682 -----------------
680 683
681 684 (Legacy command: use ``getbundle`` instead)
682 685
683 686 Obtain a changegroup version 1 with data for changesetsets between
684 687 client specified base and head nodes.
685 688
686 689 The ``bases`` argument contains a list of space-delimited hex nodes.
687 690 The ``heads`` argument contains a list of space-delimited hex nodes.
688 691
689 692 The server responds with a changegroup version 1 containing all
690 693 changesets between the requested base and head nodes at the time of the
691 694 request.
692 695
693 696 The return type is a ``stream``.
694 697
695 698 clonebundles
696 699 ------------
697 700
698 701 Obtains a manifest of bundle URLs available to seed clones.
699 702
700 703 Each returned line contains a URL followed by metadata. See the
701 704 documentation in the ``clonebundles`` extension for more.
702 705
703 706 The return type is a ``string``.
704 707
705 708 getbundle
706 709 ---------
707 710
708 711 Obtain a bundle containing repository data.
709 712
710 713 This command accepts the following arguments:
711 714
712 715 heads
713 716 List of space-delimited hex nodes of heads to retrieve.
714 717 common
715 718 List of space-delimited hex nodes that the client has in common with the
716 719 server.
717 720 obsmarkers
718 721 Boolean indicating whether to include obsolescence markers as part
719 722 of the response. Only works with bundle2.
720 723 bundlecaps
721 724 Comma-delimited set of strings defining client bundle capabilities.
722 725 listkeys
723 726 Comma-delimited list of strings of ``pushkey`` namespaces. For each
724 727 namespace listed, a bundle2 part will be included with the content of
725 728 that namespace.
726 729 cg
727 730 Boolean indicating whether changegroup data is requested.
728 731 cbattempted
729 732 Boolean indicating whether the client attempted to use the *clone bundles*
730 733 feature before performing this request.
731 734
732 735 The return type on success is a ``stream`` where the value is bundle.
733 736 On the HTTP transport, the response is zlib compressed.
734 737
735 738 If an error occurs, a generic error response can be sent.
736 739
737 740 Unless the client sends a false value for the ``cg`` argument, the returned
738 741 bundle contains a changegroup with the nodes between the specified ``common``
739 742 and ``heads`` nodes. Depending on the command arguments, the type and content
740 743 of the returned bundle can vary significantly.
741 744
742 745 The default behavior is for the server to send a raw changegroup version
743 746 ``01`` response.
744 747
745 748 If the ``bundlecaps`` provided by the client contain a value beginning
746 749 with ``HG2``, a bundle2 will be returned. The bundle2 data may contain
747 750 additional repository data, such as ``pushkey`` namespace values.
748 751
749 752 heads
750 753 -----
751 754
752 755 Returns a list of space-delimited hex nodes of repository heads followed
753 756 by a newline. e.g.
754 757 ``a9eeb3adc7ddb5006c088e9eda61791c777cbf7c 31f91a3da534dc849f0d6bfc00a395a97cf218a1\n``
755 758
756 759 This command does not accept any arguments. The return type is a ``string``.
757 760
758 761 hello
759 762 -----
760 763
761 764 Returns lines describing interesting things about the server in an RFC-822
762 765 like format.
763 766
764 767 Currently, the only line defines the server capabilities. It has the form::
765 768
766 769 capabilities: <value>
767 770
768 771 See above for more about the capabilities string.
769 772
770 773 SSH clients typically issue this command as soon as a connection is
771 774 established.
772 775
773 776 This command does not accept any arguments. The return type is a ``string``.
774 777
775 778 listkeys
776 779 --------
777 780
778 781 List values in a specified ``pushkey`` namespace.
779 782
780 783 The ``namespace`` argument defines the pushkey namespace to operate on.
781 784
782 785 The return type is a ``string``. The value is an encoded dictionary of keys.
783 786
784 787 Key-value pairs are delimited by newlines (``\n``). Within each line, keys and
785 788 values are separated by a tab (``\t``). Keys and values are both strings.
786 789
787 790 lookup
788 791 ------
789 792
790 793 Try to resolve a value to a known repository revision.
791 794
792 795 The ``key`` argument is converted from bytes to an
793 796 ``encoding.localstr`` instance then passed into
794 797 ``localrepository.__getitem__`` in an attempt to resolve it.
795 798
796 799 The return type is a ``string``.
797 800
798 801 Upon successful resolution, returns ``1 <hex node>\n``. On failure,
799 802 returns ``0 <error string>\n``. e.g.::
800 803
801 804 1 273ce12ad8f155317b2c078ec75a4eba507f1fba\n
802 805
803 806 0 unknown revision 'foo'\n
804 807
805 808 known
806 809 -----
807 810
808 811 Determine whether multiple nodes are known.
809 812
810 813 The ``nodes`` argument is a list of space-delimited hex nodes to check
811 814 for existence.
812 815
813 816 The return type is ``string``.
814 817
815 818 Returns a string consisting of ``0``s and ``1``s indicating whether nodes
816 819 are known. If the Nth node specified in the ``nodes`` argument is known,
817 820 a ``1`` will be returned at byte offset N. If the node isn't known, ``0``
818 821 will be present at byte offset N.
819 822
820 823 There is no trailing newline.
821 824
822 825 pushkey
823 826 -------
824 827
825 828 Set a value using the ``pushkey`` protocol.
826 829
827 830 Accepts arguments ``namespace``, ``key``, ``old``, and ``new``, which
828 831 correspond to the pushkey namespace to operate on, the key within that
829 832 namespace to change, the old value (which may be empty), and the new value.
830 833 All arguments are string types.
831 834
832 835 The return type is a ``string``. The value depends on the transport protocol.
833 836
834 837 The SSH transport sends a string encoded integer followed by a newline
835 838 (``\n``) which indicates operation result. The server may send additional
836 839 output on the ``stderr`` stream that should be displayed to the user.
837 840
838 841 The HTTP transport sends a string encoded integer followed by a newline
839 842 followed by additional server output that should be displayed to the user.
840 843 This may include output from hooks, etc.
841 844
842 845 The integer result varies by namespace. ``0`` means an error has occurred
843 846 and there should be additional output to display to the user.
844 847
845 848 stream_out
846 849 ----------
847 850
848 851 Obtain *streaming clone* data.
849 852
850 853 The return type is either a ``string`` or a ``stream``, depending on
851 854 whether the request was fulfilled properly.
852 855
853 856 A return value of ``1\n`` indicates the server is not configured to serve
854 857 this data. If this is seen by the client, they may not have verified the
855 858 ``stream`` capability is set before making the request.
856 859
857 860 A return value of ``2\n`` indicates the server was unable to lock the
858 861 repository to generate data.
859 862
860 863 All other responses are a ``stream`` of bytes. The first line of this data
861 864 contains 2 space-delimited integers corresponding to the path count and
862 865 payload size, respectively::
863 866
864 867 <path count> <payload size>\n
865 868
866 869 The ``<payload size>`` is the total size of path data: it does not include
867 870 the size of the per-path header lines.
868 871
869 872 Following that header are ``<path count>`` entries. Each entry consists of a
870 873 line with metadata followed by raw revlog data. The line consists of::
871 874
872 875 <store path>\0<size>\n
873 876
874 877 The ``<store path>`` is the encoded store path of the data that follows.
875 878 ``<size>`` is the amount of data for this store path/revlog that follows the
876 879 newline.
877 880
878 881 There is no trailer to indicate end of data. Instead, the client should stop
879 882 reading after ``<path count>`` entries are consumed.
880 883
881 884 unbundle
882 885 --------
883 886
884 887 Send a bundle containing data (usually changegroup data) to the server.
885 888
886 889 Accepts the argument ``heads``, which is a space-delimited list of hex nodes
887 890 corresponding to server repository heads observed by the client. This is used
888 891 to detect race conditions and abort push operations before a server performs
889 892 too much work or a client transfers too much data.
890 893
891 894 The request payload consists of a bundle to be applied to the repository,
892 895 similarly to as if :hg:`unbundle` were called.
893 896
894 897 In most scenarios, a special ``push response`` type is returned. This type
895 898 contains an integer describing the change in heads as a result of the
896 899 operation. A value of ``0`` indicates nothing changed. ``1`` means the number
897 900 of heads remained the same. Values ``2`` and larger indicate the number of
898 901 added heads minus 1. e.g. ``3`` means 2 heads were added. Negative values
899 902 indicate the number of fewer heads, also off by 1. e.g. ``-2`` means there
900 903 is 1 fewer head.
901 904
902 905 The encoding of the ``push response`` type varies by transport.
903 906
904 907 For the SSH transport, this type is composed of 2 ``string`` responses: an
905 908 empty response (``0\n``) followed by the integer result value. e.g.
906 909 ``1\n2``. So the full response might be ``0\n1\n2``.
907 910
908 911 For the HTTP transport, the response is a ``string`` type composed of an
909 912 integer result value followed by a newline (``\n``) followed by string
910 913 content holding server output that should be displayed on the client (output
911 914 hooks, etc).
912 915
913 916 In some cases, the server may respond with a ``bundle2`` bundle. In this
914 917 case, the response type is ``stream``. For the HTTP transport, the response
915 918 is zlib compressed.
916 919
917 920 The server may also respond with a generic error type, which contains a string
918 921 indicating the failure.
General Comments 0
You need to be logged in to leave comments. Login now