Mercurial > hg
annotate mercurial/wireprototypes.py @ 50359:f4ff55583dec stable
fix: highlight the required configuration and behavior of the fixer tools
The problem is that `hg help fix` didn't mention *how* to configure the tools,
and while I knew that `{rootpath}` existed in the configuration, I missed that
the tools require reading content from stdin. (I configured `gofmt` to use
`{rootpath}`, and that had the effect of squashing all changes in a file at `.`
into the first commit and emptying that content from its descendants.)
Basically all this does is put a pointer in the default (command level) help to
the extension level help that mentions the configuration, and moves the
extension level help that documents reading from stdin and writing to stdout to
the top to give it more prominence. The last sentence is adjusted a bit to
reflect the new location.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Tue, 25 Apr 2023 17:49:35 -0400 |
parents | 642e31cb55f0 |
children | 93b0de7f13ca |
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 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
7 from .node import ( |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
8 bin, |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
9 hex, |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
10 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
11 from .i18n import _ |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
12 from .pycompat import getattr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
13 from .thirdparty import attr |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
14 from . import ( |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
15 error, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
16 util, |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
17 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
18 from .interfaces import util as interfaceutil |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
19 from .utils import compression |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
20 |
36536
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
21 # 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
|
22 SSHV1 = b'ssh-v1' |
36536
3cd245945ef3
wireprotoserver: move SSHV1 and SSHV2 constants to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36371
diff
changeset
|
23 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
24 NARROWCAP = b'exp-narrow-1' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
25 ELLIPSESCAP1 = b'exp-ellipses-1' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
26 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
|
27 SUPPORTED_ELLIPSESCAP = (ELLIPSESCAP1, ELLIPSESCAP) |
40074
f7011b44d205
wireprotoserver: move narrow capabilities to wireprototypes.py
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
40025
diff
changeset
|
28 |
36609
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
29 # 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
|
30 TRANSPORTS = { |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
31 SSHV1: { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
32 b'transport': b'ssh', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
33 b'version': 1, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
34 }, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
35 b'http-v1': { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
36 b'transport': b'http', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
37 b'version': 1, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44452
diff
changeset
|
38 }, |
36609
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
39 } |
abc3b9801563
wireproto: allow wire protocol commands to declare transport support
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36536
diff
changeset
|
40 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
41 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
42 class bytesresponse: |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
43 """A wire protocol response consisting of raw bytes.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
44 |
36074
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
45 def __init__(self, data): |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
46 self.data = data |
2f7290555c96
wireproto: introduce type for raw byte responses (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36073
diff
changeset
|
47 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
48 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
49 class ooberror: |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
50 """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
|
51 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
52 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
|
53 `self.message`. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
54 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
55 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
56 def __init__(self, message): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
57 self.message = message |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
58 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
59 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
60 class pushres: |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
61 """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
|
62 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
63 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
|
64 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
65 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
66 def __init__(self, res, output): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
67 self.res = res |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
68 self.output = output |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
69 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
70 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
71 class pusherr: |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
72 """wireproto reply: failure |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
73 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
74 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
|
75 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
76 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
77 def __init__(self, res, output): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
78 self.res = res |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
79 self.output = output |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
80 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
81 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
82 class streamres: |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
83 """wireproto reply: binary stream |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
84 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
85 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
|
86 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
87 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
|
88 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
89 ``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
|
90 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
|
91 engine. |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
92 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
93 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
94 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
|
95 self.gen = gen |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
96 self.prefer_uncompressed = prefer_uncompressed |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
97 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
98 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
99 class streamreslegacy: |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
100 """wireproto reply: uncompressed binary stream |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
101 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
102 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
|
103 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
104 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
|
105 |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
106 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
|
107 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
|
108 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
109 |
36073
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
110 def __init__(self, gen=None): |
cd6ab329c5c7
wireprototypes: move wire protocol response types to new module
Gregory Szorc <gregory.szorc@gmail.com>
parents:
diff
changeset
|
111 self.gen = gen |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
112 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
113 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
114 # list of nodes encoding / decoding |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 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
|
116 if l: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
117 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
|
118 return [] |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
119 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
120 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
121 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
|
122 try: |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
123 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
|
124 except TypeError: |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
125 raise |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
126 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
127 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
128 # batched call argument encoding |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
129 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
130 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
131 def escapebatcharg(plain): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
132 return ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
133 plain.replace(b':', b':c') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 .replace(b',', b':o') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 .replace(b';', b':s') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 .replace(b'=', b':e') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
137 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
138 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
139 |
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
140 def unescapebatcharg(escaped): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
141 return ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
142 escaped.replace(b':e', b'=') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
143 .replace(b':s', b';') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 .replace(b':o', b',') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 .replace(b':c', b':') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
146 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
147 |
37612
5e71dea79aae
wireproto: move value encoding functions to wireprototypes (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37485
diff
changeset
|
148 |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
149 # 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
|
150 # |
42955
9668744c9122
wireprototypes: clarify documentation of getbundle argument types
Martin von Zweigbergk <martinvonz@google.com>
parents:
42814
diff
changeset
|
151 # 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
|
152 # 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
|
153 # |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
154 # supported types are: |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
155 # |
42955
9668744c9122
wireprototypes: clarify documentation of getbundle argument types
Martin von Zweigbergk <martinvonz@google.com>
parents:
42814
diff
changeset
|
156 # :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
|
157 # :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
|
158 # :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
|
159 # :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
|
160 GETBUNDLE_ARGUMENTS = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
161 b'heads': b'nodes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
162 b'bookmarks': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 b'common': b'nodes', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
164 b'obsmarkers': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 b'phases': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 b'bundlecaps': b'scsv', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 b'listkeys': b'csv', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
168 b'cg': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
169 b'cbattempted': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
170 b'stream': b'boolean', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
171 b'includepats': b'csv', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
172 b'excludepats': b'csv', |
37613
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
173 } |
96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37612
diff
changeset
|
174 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
175 |
37810
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
176 class baseprotocolhandler(interfaceutil.Interface): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
177 """Abstract base class for wire protocol handlers. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
178 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
179 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
|
180 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
|
181 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
|
182 the request, handle response types, etc. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
183 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
184 |
37810
856f381ad74b
interfaceutil: module to stub out zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37783
diff
changeset
|
185 name = interfaceutil.Attribute( |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
186 """The name of the protocol implementation. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
187 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
188 Used for uniquely identifying the transport type. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
189 """ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
190 ) |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
191 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
192 def getargs(args): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
193 """return the value for arguments in <args> |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
194 |
37485
0b7475ea38cf
wireproto: port heads command to wire protocol v2
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37414
diff
changeset
|
195 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
|
196 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
|
197 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
|
198 """ |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
199 |
37393
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
200 def getprotocaps(): |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
201 """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
|
202 |
afcfdf53e4b5
wireproto: provide accessors for client capabilities
Joerg Sonnenberger <joerg@bec.de>
parents:
37296
diff
changeset
|
203 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
|
204 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
|
205 |
37414
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
206 def getpayload(): |
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
207 """Provide a generator for the raw payload. |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
208 |
37414
2d965bfeb8f6
wireproto: allow direct stream processing for unbundle
Joerg Sonnenberger <joerg@bec.de>
parents:
37393
diff
changeset
|
209 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
|
210 processed. |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
211 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
212 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
213 def mayberedirectstdio(): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
214 """Context manager to possibly redirect stdio. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
215 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
216 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
|
217 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
|
218 yields ``None`` if no I/O redirection occurs. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
219 |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
220 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
|
221 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
|
222 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
|
223 won't be captured. |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
224 """ |
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
225 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
226 def client(): |
36371
0c231df1ffdc
wireprototypes: move baseprotocolhandler from wireprotoserver
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36074
diff
changeset
|
227 """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
|
228 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
229 def addcapabilities(repo, caps): |
36613
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
230 """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
|
231 |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
232 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
|
233 |
6e585bca962e
wireproto: add transport specific capabilities in the transport
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36609
diff
changeset
|
234 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
|
235 """ |
36801
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
236 |
37296
78103e4138b1
wireproto: port protocol handler to zope.interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37294
diff
changeset
|
237 def checkperm(perm): |
36801
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
238 """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
|
239 |
66de4555cefd
wireproto: formalize permissions checking as part of protocol interface
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36613
diff
changeset
|
240 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
|
241 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
|
242 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
|
243 """ |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
244 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
245 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
246 class commandentry: |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
247 """Represents a declared wire protocol command.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
248 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
249 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
250 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
251 func, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
252 args=b'', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
253 transports=None, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 permission=b'push', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
255 cachekeyfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
256 extracapabilitiesfn=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
257 ): |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
258 self.func = func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
259 self.args = args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
260 self.transports = transports or set() |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
261 self.permission = permission |
40021
c537144fdbef
wireprotov2: support response caching
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40020
diff
changeset
|
262 self.cachekeyfn = cachekeyfn |
40172
30f70d11c224
wireprotov2: advertise recommended batch size for requests
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40074
diff
changeset
|
263 self.extracapabilitiesfn = extracapabilitiesfn |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
264 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
265 def _merge(self, func, args): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
266 """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
|
267 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
268 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
|
269 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
|
270 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
|
271 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
|
272 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
273 return commandentry( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
274 func, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
275 args=args, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
276 transports=set(self.transports), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
277 permission=self.permission, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
278 ) |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
279 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
280 # 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
|
281 def __iter__(self): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
282 yield self.func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
283 yield self.args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
284 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
285 def __getitem__(self, i): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
286 if i == 0: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
287 return self.func |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
288 elif i == 1: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
289 return self.args |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
290 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 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
|
292 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
293 |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
294 class commanddict(dict): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
295 """Container for registered wire protocol commands. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
296 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
297 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
|
298 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
|
299 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
300 |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
301 def __setitem__(self, k, v): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
302 if isinstance(v, commandentry): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
303 pass |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
304 # Cast 2-tuples to commandentry instances. |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
305 elif isinstance(v, tuple): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
306 if len(v) != 2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
307 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
|
308 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
309 # 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
|
310 # 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
|
311 # 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
|
312 # 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
|
313 if k in self: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
314 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
|
315 else: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
316 # Use default values from @wireprotocommand. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
317 v = commandentry( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
318 v[0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
319 args=v[1], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
320 transports=set(TRANSPORTS), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
321 permission=b'push', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
322 ) |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
323 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
324 raise ValueError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
325 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
|
326 b'or 2-tuples' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
327 ) |
37781
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
328 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
329 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
|
330 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
331 def commandavailable(self, command, proto): |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
332 """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
|
333 assert proto.name in TRANSPORTS |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
334 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
335 entry = self.get(command) |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
336 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
337 if not entry: |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
338 return False |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
339 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
340 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
|
341 return False |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
342 |
352932a11905
wireproto: move command registration types to wireprototypes
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37728
diff
changeset
|
343 return True |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
344 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
345 |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
346 def supportedcompengines(ui, role): |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
347 """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
|
348 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
|
349 |
42041
3e47d1ec9da5
util: extract compression code in `mercurial.utils.compression`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
40492
diff
changeset
|
350 compengines = compression.compengines.supportedwireengines(role) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
351 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
352 # 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
|
353 if role == compression.SERVERROLE: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
354 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
|
355 config = b'server.compressionengines' |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
356 else: |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
357 # 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
|
358 # 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
|
359 # 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
|
360 # 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
|
361 # compression ratio). |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
362 configengines = ui.configlist( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
363 b'experimental', b'clientcompressionengines' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
364 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
365 config = b'experimental.clientcompressionengines' |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
366 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
367 # 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
|
368 # advertised and return default ordering. |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
369 if not configengines: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
370 attr = ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
371 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
|
372 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
373 return [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
374 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
|
375 ] |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
376 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
377 # 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
|
378 # 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
|
379 # 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
|
380 # 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
|
381 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
|
382 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
|
383 if invalidnames: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
384 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
385 _(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
|
386 % (config, b', '.join(sorted(invalidnames))) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
387 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
388 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
389 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
|
390 compengines = sorted( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
391 compengines, key=lambda e: configengines.index(e.name()) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
392 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
393 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
394 if not compengines: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
395 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
396 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
397 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
|
398 b'compression engines' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
399 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
400 % config, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
401 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
|
402 % b', '.sorted(validnames), # pytype: disable=attribute-error |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
403 ) |
37783
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
404 |
9d818539abfa
wireproto: move supportedcompengines out of wireproto
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37781
diff
changeset
|
405 return compengines |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
406 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
407 |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
408 @attr.s |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
409 class encodedresponse: |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
410 """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
|
411 |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
412 Wire protocol version 2 only. |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
413 |
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
414 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
|
415 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
|
416 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
|
417 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
418 |
40020
ed919b90acda
wireprotov2: define type to represent pre-encoded object
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39814
diff
changeset
|
419 data = attr.ib() |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
420 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
421 |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
422 @attr.s |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
423 class alternatelocationresponse: |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
424 """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
|
425 |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
426 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
|
427 is sending a "content redirect" response. |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
428 |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
429 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
|
430 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
431 |
40025
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
432 url = attr.ib() |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
433 mediatype = attr.ib() |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
434 size = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
435 fullhashes = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
436 fullhashseed = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
437 serverdercerts = attr.ib(default=None) |
b099e6032f38
wireprotov2: server support for sending content redirects
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40021
diff
changeset
|
438 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
|
439 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
440 |
40328
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
441 @attr.s |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
442 class indefinitebytestringresponse: |
40328
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
443 """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
|
444 |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
445 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
|
446 a bytes instance. |
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
447 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42955
diff
changeset
|
448 |
40328
2c55716f8a1c
wireprotov2: add response type that serializes to indefinite length bytestring
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40176
diff
changeset
|
449 chunks = attr.ib() |