view hgext/narrow/narrowrepo.py @ 41719:5f9d057ba28c

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 <some_path>` on a narrow repo with ellipses disabled. Differential Revision: https://phab.mercurial-scm.org/D5782
author Pulkit Goyal <pulkit@yandex-team.ru>
date Thu, 31 Jan 2019 20:11:16 +0300
parents f7011b44d205
children 2372284d9457
line wrap: on
line source

# narrowrepo.py - repository which supports narrow revlogs, lazy loading
#
# Copyright 2017 Google, Inc.
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

from __future__ import absolute_import

from mercurial import (
    wireprototypes,
)

from . import (
    narrowdirstate,
)

def wraprepo(repo):
    """Enables narrow clone functionality on a single local repository."""

    class narrowrepository(repo.__class__):

        def _makedirstate(self):
            dirstate = super(narrowrepository, self)._makedirstate()
            return narrowdirstate.wrapdirstate(self, dirstate)

        def peer(self):
            peer = super(narrowrepository, self).peer()
            peer._caps.add(wireprototypes.NARROWCAP)
            peer._caps.add(wireprototypes.ELLIPSESCAP)
            return peer

    repo.__class__ = narrowrepository