Mercurial > hg
annotate mercurial/wireprototypes.py @ 48713:5dfaca4464d1
merge-actions: add an explicite "no_op" attribute
This make the MergeAction smarter and able to describe themself. This is useful
to help introducing more MergeAction object that better the complexity of the
situation.
Differential Revision: https://phab.mercurial-scm.org/D12116
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 28 Jan 2022 15:19:58 +0100 |
parents | 04688c51f81f |
children | 6000f5b25c9b |
rev | line source |
---|---|
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
1 # Copyright 2018 Gregory Szorc <gregory.szorc@gmail.com> |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
2 # |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
5 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
6 from __future__ import absolute_import |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
7 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
8 from .node import ( |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
9 bin, |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
10 hex, |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
11 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
12 from .i18n import _ |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
13 from .pycompat import getattr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
14 from .thirdparty import attr |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
15 from . import ( |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
16 error, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
17 util, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
18 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
19 from .interfaces import util as interfaceutil |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
20 from .utils import compression |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
21 |
36536
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
22 # Names of the SSH protocol implementations. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
23 SSHV1 = b'ssh-v1' |
36536
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
24 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
25 NARROWCAP = b'exp-narrow-1' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
26 ELLIPSESCAP1 = b'exp-ellipses-1' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
27 ELLIPSESCAP = b'exp-ellipses-2' |
42415
c767e655ffda
narrow: use narrow_widen wireproto command to widen in case of ellipses
Pulkit Goyal <7895pulkit@gmail.com>
parents:
42041
diff
changeset
|
28 SUPPORTED_ELLIPSESCAP = (ELLIPSESCAP1, ELLIPSESCAP) |
40074
f7011b44d205
wireprotoserver: move narrow capabilities to wireprototypes.py
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40025
diff
changeset
|
29 |
36609
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
30 # All available wire protocol transports. |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
31 TRANSPORTS = { |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
32 SSHV1: { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
33 b'transport': b'ssh', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
34 b'version': 1, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
35 }, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
36 b'http-v1': { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
37 b'transport': b'http', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
38 b'version': 1, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
39 }, |
36609
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
40 } |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
41 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
42 |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
43 class bytesresponse(object): |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
44 """A wire protocol response consisting of raw bytes.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
45 |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
46 def __init__(self, data): |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
47 self.data = data |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
48 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
49 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 class ooberror(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
51 """wireproto reply: failure of a batch of operation |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
53 Something failed during a batch call. The error message is stored in |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 `self.message`. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
55 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
56 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 def __init__(self, message): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 self.message = message |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
59 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
60 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 class pushres(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
62 """wireproto reply: success with simple integer return |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
64 The call was successful and returned an integer contained in `self.res`. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
65 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
66 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 def __init__(self, res, output): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 self.res = res |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 self.output = output |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
70 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
71 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 class pusherr(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 """wireproto reply: failure |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
75 The call failed. The `self.res` attribute contains the error message. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
76 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
77 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 def __init__(self, res, output): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 self.res = res |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 self.output = output |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
81 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
82 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 class streamres(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 """wireproto reply: binary stream |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
86 The call was successful and the result is a stream. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
88 Accepts a generator containing chunks of data to be sent to the client. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
90 ``prefer_uncompressed`` indicates that the data is expected to be |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
91 uncompressable and that the stream should therefore use the ``none`` |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 engine. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
93 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
94 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
95 def __init__(self, gen=None, prefer_uncompressed=False): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 self.gen = gen |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 self.prefer_uncompressed = prefer_uncompressed |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
98 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
99 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 class streamreslegacy(object): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 """wireproto reply: uncompressed binary stream |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
103 The call was successful and the result is a stream. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
105 Accepts a generator containing chunks of data to be sent to the client. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
107 Like ``streamres``, but sends an uncompressed data for "version 1" clients |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
108 using the application/mercurial-0.1 media type. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
109 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
110 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
111 def __init__(self, gen=None): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
112 self.gen = gen |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
113 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
114 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
115 # list of nodes encoding / decoding |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 def decodelist(l, sep=b' '): |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
117 if l: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
118 return [bin(v) for v in l.split(sep)] |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
119 return [] |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
120 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
121 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
122 def encodelist(l, sep=b' '): |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
123 try: |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
124 return sep.join(map(hex, l)) |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
125 except TypeError: |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
126 raise |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
127 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
128 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
129 # batched call argument encoding |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
130 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
131 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
132 def escapebatcharg(plain): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
133 return ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 plain.replace(b':', b':c') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 .replace(b',', b':o') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 .replace(b';', b':s') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
137 .replace(b'=', b':e') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
138 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
139 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
140 |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
141 def unescapebatcharg(escaped): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
142 return ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
143 escaped.replace(b':e', b'=') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 .replace(b':s', b';') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 .replace(b':o', b',') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 .replace(b':c', b':') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
147 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
148 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
149 |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
150 # mapping of options accepted by getbundle and their types |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
151 # |
42955
9668744c9122
wireprototypes: clarify documentation of getbundle argument types
Martin von Zweigbergk <martinvonz@google.com>
parents:
42814
diff
changeset
|
152 # Meant to be extended by extensions. It is the extension's responsibility to |
9668744c9122
wireprototypes: clarify documentation of getbundle argument types
Martin von Zweigbergk <martinvonz@google.com>
parents:
42814
diff
changeset
|
153 # ensure such options are properly processed in exchange.getbundle. |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
154 # |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
155 # supported types are: |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
156 # |
42955
9668744c9122
wireprototypes: clarify documentation of getbundle argument types
Martin von Zweigbergk <martinvonz@google.com>
parents:
42814
diff
changeset
|
157 # :nodes: list of binary nodes, transmitted as space-separated hex nodes |
9668744c9122
wireprototypes: clarify documentation of getbundle argument types
Martin von Zweigbergk <martinvonz@google.com>
parents:
42814
diff
changeset
|
158 # :csv: list of values, transmitted as comma-separated values |
9668744c9122
wireprototypes: clarify documentation of getbundle argument types
Martin von Zweigbergk <martinvonz@google.com>
parents:
42814
diff
changeset
|
159 # :scsv: set of values, transmitted as comma-separated values |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
160 # :plain: string with no transformation needed. |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
161 GETBUNDLE_ARGUMENTS = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 b'heads': b'nodes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 b'bookmarks': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
164 b'common': b'nodes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 b'obsmarkers': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 b'phases': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 b'bundlecaps': b'scsv', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
168 b'listkeys': b'csv', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 b'cg': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
170 b'cbattempted': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
171 b'stream': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 b'includepats': b'csv', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
173 b'excludepats': b'csv', |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
174 } |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
175 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
176 |
37810
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
177 class baseprotocolhandler(interfaceutil.Interface): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
178 """Abstract base class for wire protocol handlers. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
179 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
180 A wire protocol handler serves as an interface between protocol command |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
181 handlers and the wire protocol transport layer. Protocol handlers provide |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
182 methods to read command arguments, redirect stdio for the duration of |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
183 the request, handle response types, etc. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
184 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
185 |
37810
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
186 name = interfaceutil.Attribute( |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
187 """The name of the protocol implementation. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
188 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
189 Used for uniquely identifying the transport type. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
190 """ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
191 ) |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
192 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
193 def getargs(args): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
194 """return the value for arguments in <args> |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
195 |
37485
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
196 For version 1 transports, returns a list of values in the same |
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
197 order they appear in ``args``. For version 2 transports, returns |
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
198 a dict mapping argument name to value. |
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
199 """ |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
200 |
37393
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
201 def getprotocaps(): |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
202 """Returns the list of protocol-level capabilities of client |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
203 |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
204 Returns a list of capabilities as declared by the client for |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
205 the current request (or connection for stateful protocol handlers).""" |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
206 |
37414
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
207 def getpayload(): |
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
208 """Provide a generator for the raw payload. |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
209 |
37414
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
210 The caller is responsible for ensuring that the full payload is |
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
211 processed. |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
212 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
213 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
214 def mayberedirectstdio(): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
215 """Context manager to possibly redirect stdio. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
216 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
217 The context manager yields a file-object like object that receives |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
218 stdout and stderr output when the context manager is active. Or it |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
219 yields ``None`` if no I/O redirection occurs. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
220 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
221 The intent of this context manager is to capture stdio output |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
222 so it may be sent in the response. Some transports support streaming |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
223 stdio to the client in real time. For these transports, stdio output |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
224 won't be captured. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
225 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
226 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
227 def client(): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
228 """Returns a string representation of this client (as bytes).""" |
36613
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
229 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
230 def addcapabilities(repo, caps): |
36613
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
231 """Adds advertised capabilities specific to this protocol. |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
232 |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
233 Receives the list of capabilities collected so far. |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
234 |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
235 Returns a list of capabilities. The passed in argument can be returned. |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
236 """ |
36801
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
237 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
238 def checkperm(perm): |
36801
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
239 """Validate that the client has permissions to perform a request. |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
240 |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
241 The argument is the permission required to proceed. If the client |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
242 doesn't have that permission, the exception should raise or abort |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
243 in a protocol specific manner. |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
244 """ |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
245 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
246 |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
247 class commandentry(object): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
248 """Represents a declared wire protocol command.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
249 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
250 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
251 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
252 func, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 args=b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
254 transports=None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
255 permission=b'push', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
256 cachekeyfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
257 extracapabilitiesfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
258 ): |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
259 self.func = func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
260 self.args = args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
261 self.transports = transports or set() |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
262 self.permission = permission |
40021
c537144fdbef
wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40020
diff
changeset
|
263 self.cachekeyfn = cachekeyfn |
40172
30f70d11c224
wireprotov2: advertise recommended batch size for requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40074
diff
changeset
|
264 self.extracapabilitiesfn = extracapabilitiesfn |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
265 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
266 def _merge(self, func, args): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
267 """Merge this instance with an incoming 2-tuple. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
268 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
269 This is called when a caller using the old 2-tuple API attempts |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
270 to replace an instance. The incoming values are merged with |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
271 data not captured by the 2-tuple and a new instance containing |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
272 the union of the two objects is returned. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
273 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
274 return commandentry( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
275 func, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
276 args=args, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
277 transports=set(self.transports), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
278 permission=self.permission, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
279 ) |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
280 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
281 # Old code treats instances as 2-tuples. So expose that interface. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
282 def __iter__(self): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
283 yield self.func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
284 yield self.args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
285 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
286 def __getitem__(self, i): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
287 if i == 0: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
288 return self.func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
289 elif i == 1: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
290 return self.args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
291 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
292 raise IndexError(b'can only access elements 0 and 1') |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
293 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
294 |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
295 class commanddict(dict): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
296 """Container for registered wire protocol commands. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
297 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
298 It behaves like a dict. But __setitem__ is overwritten to allow silent |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
299 coercion of values from 2-tuples for API compatibility. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
300 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
301 |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
302 def __setitem__(self, k, v): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
303 if isinstance(v, commandentry): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
304 pass |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
305 # Cast 2-tuples to commandentry instances. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
306 elif isinstance(v, tuple): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
307 if len(v) != 2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
308 raise ValueError(b'command tuples must have exactly 2 elements') |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
309 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
310 # It is common for extensions to wrap wire protocol commands via |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
311 # e.g. ``wireproto.commands[x] = (newfn, args)``. Because callers |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
312 # doing this aren't aware of the new API that uses objects to store |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
313 # command entries, we automatically merge old state with new. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
314 if k in self: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
315 v = self[k]._merge(v[0], v[1]) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
316 else: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
317 # Use default values from @wireprotocommand. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
318 v = commandentry( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
319 v[0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
320 args=v[1], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
321 transports=set(TRANSPORTS), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
322 permission=b'push', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
323 ) |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
324 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
325 raise ValueError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
326 b'command entries must be commandentry instances ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
327 b'or 2-tuples' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
328 ) |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
329 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
330 return super(commanddict, self).__setitem__(k, v) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
331 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
332 def commandavailable(self, command, proto): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
333 """Determine if a command is available for the requested protocol.""" |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
334 assert proto.name in TRANSPORTS |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
335 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
336 entry = self.get(command) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
337 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
338 if not entry: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
339 return False |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
340 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
341 if proto.name not in entry.transports: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
342 return False |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
343 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
344 return True |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
345 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
346 |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
347 def supportedcompengines(ui, role): |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
348 """Obtain the list of supported compression engines for a request.""" |
42041
3e47d1ec9da5
util: extract compression code in `mercurial.utils.compression`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40492
diff
changeset
|
349 assert role in (compression.CLIENTROLE, compression.SERVERROLE) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
350 |
42041
3e47d1ec9da5
util: extract compression code in `mercurial.utils.compression`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40492
diff
changeset
|
351 compengines = compression.compengines.supportedwireengines(role) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
352 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
353 # Allow config to override default list and ordering. |
42041
3e47d1ec9da5
util: extract compression code in `mercurial.utils.compression`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40492
diff
changeset
|
354 if role == compression.SERVERROLE: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
355 configengines = ui.configlist(b'server', b'compressionengines') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 config = b'server.compressionengines' |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
357 else: |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
358 # This is currently implemented mainly to facilitate testing. In most |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
359 # cases, the server should be in charge of choosing a compression engine |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
360 # because a server has the most to lose from a sub-optimal choice. (e.g. |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
361 # CPU DoS due to an expensive engine or a network DoS due to poor |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
362 # compression ratio). |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
363 configengines = ui.configlist( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
364 b'experimental', b'clientcompressionengines' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
365 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
366 config = b'experimental.clientcompressionengines' |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
367 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
368 # No explicit config. Filter out the ones that aren't supposed to be |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
369 # advertised and return default ordering. |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
370 if not configengines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 attr = ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
372 b'serverpriority' if role == util.SERVERROLE else b'clientpriority' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
373 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
374 return [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
375 e for e in compengines if getattr(e.wireprotosupport(), attr) > 0 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
376 ] |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
377 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
378 # If compression engines are listed in the config, assume there is a good |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
379 # reason for it (like server operators wanting to achieve specific |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
380 # performance characteristics). So fail fast if the config references |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
381 # unusable compression engines. |
44452
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
43481
diff
changeset
|
382 validnames = {e.name() for e in compengines} |
9d2b2df2c2ba
cleanup: run pyupgrade on our source tree to clean up varying things
Augie Fackler <augie@google.com>
parents:
43481
diff
changeset
|
383 invalidnames = {e for e in configengines if e not in validnames} |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
384 if invalidnames: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
385 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
386 _(b'invalid compression engine defined in %s: %s') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
387 % (config, b', '.join(sorted(invalidnames))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
388 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
389 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
390 compengines = [e for e in compengines if e.name() in configengines] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
391 compengines = sorted( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
392 compengines, key=lambda e: configengines.index(e.name()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
393 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
394 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
395 if not compengines: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
396 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
397 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 b'%s config option does not specify any known ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
399 b'compression engines' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
400 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
401 % config, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
402 hint=_(b'usable compression engines: %s') |
43481
f5fcf7123a92
wireprototypes: disable pytype where it's just confused
Augie Fackler <augie@google.com>
parents:
43089
diff
changeset
|
403 % b', '.sorted(validnames), # pytype: disable=attribute-error |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
404 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
405 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
406 return compengines |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
407 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
408 |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
409 @attr.s |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
410 class encodedresponse(object): |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
411 """Represents response data that is already content encoded. |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
412 |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
413 Wire protocol version 2 only. |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
414 |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
415 Commands typically emit Python objects that are encoded and sent over the |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
416 wire. If commands emit an object of this type, the encoding step is bypassed |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
417 and the content from this object is used instead. |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
418 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
419 |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
420 data = attr.ib() |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
421 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
422 |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
423 @attr.s |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
424 class alternatelocationresponse(object): |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
425 """Represents a response available at an alternate location. |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
426 |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
427 Instances are sent in place of actual response objects when the server |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
428 is sending a "content redirect" response. |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
429 |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
430 Only compatible with wire protocol version 2. |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
431 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
432 |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
433 url = attr.ib() |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
434 mediatype = attr.ib() |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
435 size = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
436 fullhashes = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
437 fullhashseed = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
438 serverdercerts = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
439 servercadercerts = attr.ib(default=None) |
40328
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
440 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
441 |
40328
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
442 @attr.s |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
443 class indefinitebytestringresponse(object): |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
444 """Represents an object to be encoded to an indefinite length bytestring. |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
445 |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
446 Instances are initialized from an iterable of chunks, with each chunk being |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
447 a bytes instance. |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
448 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
449 |
40328
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
450 chunks = attr.ib() |