Mercurial > public > mercurial-scm > hg
comparison mercurial/wireproto.py @ 37613:96d735601ca1
wireproto: move gboptsmap to wireprototypes and rename (API)
This is also shared between client and server and will need to
exist in a shared module when that code is split into different
modules.
Differential Revision: https://phab.mercurial-scm.org/D3258
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Wed, 11 Apr 2018 10:51:38 -0700 |
parents | 5e71dea79aae |
children | a81d02ea65db |
comparison
equal
deleted
inserted
replaced
37612:5e71dea79aae | 37613:96d735601ca1 |
---|---|
142 """ | 142 """ |
143 for cap in proto.getprotocaps(): | 143 for cap in proto.getprotocaps(): |
144 if cap.startswith('comp='): | 144 if cap.startswith('comp='): |
145 return cap[5:].split(',') | 145 return cap[5:].split(',') |
146 return ['zlib', 'none'] | 146 return ['zlib', 'none'] |
147 | |
148 # mapping of options accepted by getbundle and their types | |
149 # | |
150 # Meant to be extended by extensions. It is extensions responsibility to ensure | |
151 # such options are properly processed in exchange.getbundle. | |
152 # | |
153 # supported types are: | |
154 # | |
155 # :nodes: list of binary nodes | |
156 # :csv: list of comma-separated values | |
157 # :scsv: list of comma-separated values return as set | |
158 # :plain: string with no transformation needed. | |
159 gboptsmap = {'heads': 'nodes', | |
160 'bookmarks': 'boolean', | |
161 'common': 'nodes', | |
162 'obsmarkers': 'boolean', | |
163 'phases': 'boolean', | |
164 'bundlecaps': 'scsv', | |
165 'listkeys': 'csv', | |
166 'cg': 'boolean', | |
167 'cbattempted': 'boolean', | |
168 'stream': 'boolean', | |
169 } | |
170 | 147 |
171 # client side | 148 # client side |
172 | 149 |
173 class wirepeer(repository.legacypeer): | 150 class wirepeer(repository.legacypeer): |
174 """Client-side interface for communicating with a peer repository. | 151 """Client-side interface for communicating with a peer repository. |
273 opts = {} | 250 opts = {} |
274 bundlecaps = kwargs.get('bundlecaps') or set() | 251 bundlecaps = kwargs.get('bundlecaps') or set() |
275 for key, value in kwargs.iteritems(): | 252 for key, value in kwargs.iteritems(): |
276 if value is None: | 253 if value is None: |
277 continue | 254 continue |
278 keytype = gboptsmap.get(key) | 255 keytype = wireprototypes.GETBUNDLE_ARGUMENTS.get(key) |
279 if keytype is None: | 256 if keytype is None: |
280 raise error.ProgrammingError( | 257 raise error.ProgrammingError( |
281 'Unexpectedly None keytype for key %s' % key) | 258 'Unexpectedly None keytype for key %s' % key) |
282 elif keytype == 'nodes': | 259 elif keytype == 'nodes': |
283 value = wireprototypes.encodelist(value) | 260 value = wireprototypes.encodelist(value) |
1002 return None | 979 return None |
1003 | 980 |
1004 @wireprotocommand('getbundle', '*', permission='pull', | 981 @wireprotocommand('getbundle', '*', permission='pull', |
1005 transportpolicy=POLICY_V1_ONLY) | 982 transportpolicy=POLICY_V1_ONLY) |
1006 def getbundle(repo, proto, others): | 983 def getbundle(repo, proto, others): |
1007 opts = options('getbundle', gboptsmap.keys(), others) | 984 opts = options('getbundle', wireprototypes.GETBUNDLE_ARGUMENTS.keys(), |
985 others) | |
1008 for k, v in opts.iteritems(): | 986 for k, v in opts.iteritems(): |
1009 keytype = gboptsmap[k] | 987 keytype = wireprototypes.GETBUNDLE_ARGUMENTS[k] |
1010 if keytype == 'nodes': | 988 if keytype == 'nodes': |
1011 opts[k] = wireprototypes.decodelist(v) | 989 opts[k] = wireprototypes.decodelist(v) |
1012 elif keytype == 'csv': | 990 elif keytype == 'csv': |
1013 opts[k] = list(v.split(',')) | 991 opts[k] = list(v.split(',')) |
1014 elif keytype == 'scsv': | 992 elif keytype == 'scsv': |