Mercurial > hg
comparison mercurial/changegroup.py @ 19708:fd4f612f7cb6 stable
bundle: fix performance regression when bundling file changes (issue4031)
Somewhere before 2.7, a change [ec896f9e8894] was committed that
entailed a large performance regression when bundling (and therefore
remote cloning) repositories. For each file in the repository, it would
recompute the set of needed changesets even though it is the same for
all files. This computation would dominate bundle runtimes according to
profiler output (by 10x or more).
author | Antoine Pitrou <solipsis@pitrou.net> |
---|---|
date | Sat, 07 Sep 2013 21:20:00 +0200 |
parents | 95a49112e7ab |
children | f8d50add83e1 bfb40168391c |
comparison
equal
deleted
inserted
replaced
19706:26ddce1a2a55 | 19708:fd4f612f7cb6 |
---|---|
352 reorder=reorder): | 352 reorder=reorder): |
353 yield chunk | 353 yield chunk |
354 progress(msgbundling, None) | 354 progress(msgbundling, None) |
355 | 355 |
356 mfs.clear() | 356 mfs.clear() |
357 needed = set(cl.rev(x) for x in clnodes) | |
357 | 358 |
358 def linknodes(filerevlog, fname): | 359 def linknodes(filerevlog, fname): |
359 if fastpathlinkrev: | 360 if fastpathlinkrev: |
360 ln, llr = filerevlog.node, filerevlog.linkrev | 361 ln, llr = filerevlog.node, filerevlog.linkrev |
361 needed = set(cl.rev(x) for x in clnodes) | |
362 def genfilenodes(): | 362 def genfilenodes(): |
363 for r in filerevlog: | 363 for r in filerevlog: |
364 linkrev = llr(r) | 364 linkrev = llr(r) |
365 if linkrev in needed: | 365 if linkrev in needed: |
366 yield filerevlog.node(r), cl.node(linkrev) | 366 yield filerevlog.node(r), cl.node(linkrev) |