comparison mercurial/changegroup.py @ 24976:147d8892fc4b

changegroup: extract condition for linkrev fastpath The condition for taking the fastpath (or not) is used in two places. By extracting it, we also provide a place to document what it's about.
author Martin von Zweigbergk <martinvonz@google.com>
date Wed, 29 Apr 2015 10:34:28 -0700
parents e285b98c65cc
children 4289383cb9d2
comparison
equal deleted inserted replaced
24975:89c2bf63a83b 24976:147d8892fc4b
359 def generate(self, commonrevs, clnodes, fastpathlinkrev, source): 359 def generate(self, commonrevs, clnodes, fastpathlinkrev, source):
360 '''yield a sequence of changegroup chunks (strings)''' 360 '''yield a sequence of changegroup chunks (strings)'''
361 repo = self._repo 361 repo = self._repo
362 cl = self._changelog 362 cl = self._changelog
363 ml = self._manifest 363 ml = self._manifest
364 reorder = self._reorder
365 364
366 clrevorder = {} 365 clrevorder = {}
367 mfs = {} # needed manifests 366 mfs = {} # needed manifests
368 fnodes = {} # needed file nodes 367 fnodes = {} # needed file nodes
369 changedfiles = set() 368 changedfiles = set()
384 for chunk in self.group(clnodes, cl, lookupcl, units=_('changesets')): 383 for chunk in self.group(clnodes, cl, lookupcl, units=_('changesets')):
385 size += len(chunk) 384 size += len(chunk)
386 yield chunk 385 yield chunk
387 self._verbosenote(_('%8.i (changelog)\n') % size) 386 self._verbosenote(_('%8.i (changelog)\n') % size)
388 387
388 fastpathlinkrev = fastpathlinkrev and not self._reorder
389 # Callback for the manifest, used to collect linkrevs for filelog 389 # Callback for the manifest, used to collect linkrevs for filelog
390 # revisions. 390 # revisions.
391 # Returns the linkrev node (collected in lookupcl). 391 # Returns the linkrev node (collected in lookupcl).
392 def lookupmf(x): 392 def lookupmf(x):
393 clnode = mfs[x] 393 clnode = mfs[x]
394 if not fastpathlinkrev or reorder: 394 if not fastpathlinkrev:
395 mdata = ml.readfast(x) 395 mdata = ml.readfast(x)
396 for f, n in mdata.iteritems(): 396 for f, n in mdata.iteritems():
397 if f in changedfiles: 397 if f in changedfiles:
398 # record the first changeset introducing this filelog 398 # record the first changeset introducing this filelog
399 # version 399 # version
412 412
413 mfs.clear() 413 mfs.clear()
414 clrevs = set(cl.rev(x) for x in clnodes) 414 clrevs = set(cl.rev(x) for x in clnodes)
415 415
416 def linknodes(filerevlog, fname): 416 def linknodes(filerevlog, fname):
417 if fastpathlinkrev and not reorder: 417 if fastpathlinkrev:
418 llr = filerevlog.linkrev 418 llr = filerevlog.linkrev
419 def genfilenodes(): 419 def genfilenodes():
420 for r in filerevlog: 420 for r in filerevlog:
421 linkrev = llr(r) 421 linkrev = llr(r)
422 if linkrev in clrevs: 422 if linkrev in clrevs: