Mercurial > hg
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: |