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':