# HG changeset patch # User Pulkit Goyal # Date 2019-01-31 17:11:16 # Node ID 5f9d057ba28c10f3b7ccadff05e060c33352337b # Parent a87ca1d7e61df30f968f5b0ca1a1f846aef91cb9 changegroup: don't try to prune manifest nodes if not ellipses In non-ellipses case, the number of manifest nodes can be very big, and finding whether one of them can be pruned or not is very costly. For each node, we try to find the rev and the linkrev, which is expensive. Sending bit more manifest nodes seems better and much faster here. On our internal repository, this saves around 5 seconds on `hg tracked --addinclude ` on a narrow repo with ellipses disabled. Differential Revision: https://phab.mercurial-scm.org/D5782 diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -1073,6 +1073,11 @@ class cgpacker(object): # because of narrow clones). Do this even for the root # directory (tree=='') prunednodes = [] + elif not self._ellipses: + # In non-ellipses case and large repositories, it is better to + # prevent calling of store.rev and store.linkrev on a lot of + # nodes as compared to sending some extra data + prunednodes = nodes.copy() else: # Avoid sending any manifest nodes we can prove the # client already has by checking linkrevs. See the