##// END OF EJS Templates
getbundle: declare type of parameters...
Pierre-Yves David -
r21646:ce25f465 default
parent child Browse files
Show More
@@ -190,6 +190,20 b' def unescapearg(escaped):'
190 .replace(':,', ',')
190 .replace(':,', ',')
191 .replace('::', ':'))
191 .replace('::', ':'))
192
192
193 # mapping of options accepted by getbundle and their types
194 #
195 # Meant to be extended by extensions. It is extensions responsibility to ensure
196 # such options are properly processed in exchange.getbundle.
197 #
198 # supported types are:
199 #
200 # :nodes: list of binary nodes
201 # :csv: list of comma-separated values
202 # :plain: string with no transformation needed.
203 gboptsmap = {'heads': 'nodes',
204 'common': 'nodes',
205 'bundlecaps': 'csv'}
206
193 # client side
207 # client side
194
208
195 class wirepeer(peer.peerrepository):
209 class wirepeer(peer.peerrepository):
@@ -325,18 +339,25 b' class wirepeer(peer.peerrepository):'
325 bases=bases, heads=heads)
339 bases=bases, heads=heads)
326 return changegroupmod.unbundle10(f, 'UN')
340 return changegroupmod.unbundle10(f, 'UN')
327
341
328 def getbundle(self, source, heads=None, common=None, bundlecaps=None,
342 def getbundle(self, source, **kwargs):
329 **kwargs):
330 self.requirecap('getbundle', _('look up remote changes'))
343 self.requirecap('getbundle', _('look up remote changes'))
331 opts = {}
344 opts = {}
332 if heads is not None:
345 for key, value in kwargs.iteritems():
333 opts['heads'] = encodelist(heads)
346 if value is None:
334 if common is not None:
347 continue
335 opts['common'] = encodelist(common)
348 keytype = gboptsmap.get(key)
336 if bundlecaps is not None:
349 if keytype is None:
337 opts['bundlecaps'] = ','.join(bundlecaps)
350 assert False, 'unexpected'
338 opts.update(kwargs)
351 elif keytype == 'nodes':
352 value = encodelist(value)
353 elif keytype == 'csv':
354 value = ','.join(value)
355 elif keytype != 'plain':
356 raise KeyError('unknown getbundle option type %s'
357 % keytype)
358 opts[key] = value
339 f = self._callcompressable("getbundle", **opts)
359 f = self._callcompressable("getbundle", **opts)
360 bundlecaps = kwargs.get('bundlecaps')
340 if bundlecaps is not None and 'HG2X' in bundlecaps:
361 if bundlecaps is not None and 'HG2X' in bundlecaps:
341 return bundle2.unbundle20(self.ui, f)
362 return bundle2.unbundle20(self.ui, f)
342 else:
363 else:
@@ -627,12 +648,16 b" gboptslist = ['heads', 'common', 'bundle"
627
648
628 @wireprotocommand('getbundle', '*')
649 @wireprotocommand('getbundle', '*')
629 def getbundle(repo, proto, others):
650 def getbundle(repo, proto, others):
630 opts = options('getbundle', gboptslist, others)
651 opts = options('getbundle', gboptsmap.keys(), others)
631 for k, v in opts.iteritems():
652 for k, v in opts.iteritems():
632 if k in ('heads', 'common'):
653 keytype = gboptsmap[k]
654 if keytype == 'nodes':
633 opts[k] = decodelist(v)
655 opts[k] = decodelist(v)
634 elif k == 'bundlecaps':
656 elif keytype == 'csv':
635 opts[k] = set(v.split(','))
657 opts[k] = set(v.split(','))
658 elif keytype != 'plain':
659 raise KeyError('unknown getbundle option type %s'
660 % keytype)
636 cg = exchange.getbundle(repo, 'serve', **opts)
661 cg = exchange.getbundle(repo, 'serve', **opts)
637 return streamres(proto.groupchunks(cg))
662 return streamres(proto.groupchunks(cg))
638
663
General Comments 0
You need to be logged in to leave comments. Login now