# HG changeset patch # User Pulkit Goyal # Date 2018-09-10 13:29:22 # Node ID 294c571490f02fa487c070dd17f36a68363a37d2 # Parent c90514043eaa05ccbaf4bff0d37e97cce4588388 narrow: build the known set of nodes only when ellipses is enabled We don't need to build the known set in non-ellipses case because we don't have a shallow repo. In this patch, this checks whether the server has ellipses enabled or not using the server capability and then build the known set of nodes. Building the known set of nodes can take ~3-4 minutes on repositories with millions of csets so this patch speeds up extending a non-shallow narrow clone on large repositories. In future, we should first check whether local repository is an ellipses repo using a new ellipses repo requirement and then control all the combinations between local repo requirement and server capability. Differential Revision: https://phab.mercurial-scm.org/D4520 diff --git a/hgext/narrow/narrowcommands.py b/hgext/narrow/narrowcommands.py --- a/hgext/narrow/narrowcommands.py +++ b/hgext/narrow/narrowcommands.py @@ -180,14 +180,17 @@ def pullbundle2extraprepare(orig, pullop kwargs['oldexcludepats'] = exclude kwargs['includepats'] = include kwargs['excludepats'] = exclude - kwargs['known'] = [node.hex(ctx.node()) for ctx in - repo.set('::%ln', pullop.common) - if ctx.node() != node.nullid] - if not kwargs['known']: - # Mercurial serialized an empty list as '' and deserializes it as - # [''], so delete it instead to avoid handling the empty string on the - # server. - del kwargs['known'] + # calculate known nodes only in ellipses cases because in non-ellipses cases + # we have all the nodes + if narrowbundle2.ELLIPSESCAP in pullop.remote.capabilities(): + kwargs['known'] = [node.hex(ctx.node()) for ctx in + repo.set('::%ln', pullop.common) + if ctx.node() != node.nullid] + if not kwargs['known']: + # Mercurial serializes an empty list as '' and deserializes it as + # [''], so delete it instead to avoid handling the empty string on + # the server. + del kwargs['known'] extensions.wrapfunction(exchange,'_pullbundle2extraprepare', pullbundle2extraprepare)