view hgext/narrow/narrowrepo.py @ 51915:6223892833db

revlogutils: teach issue6528 filtering about grandparents During dynamic filtering, we should assume that the current repository is correct. Therefore the parents of the delta base can tell us if that parent has metadata without having to build the whole text.
author Joerg Sonnenberger <joerg@bec.de>
date Sat, 20 Jul 2024 03:04:48 +0200
parents f4733654f144
children
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 annotations

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, *args, **kwds):
            peer = super(narrowrepository, self).peer(*args, **kwds)
            peer._caps.add(wireprototypes.NARROWCAP)
            peer._caps.add(wireprototypes.ELLIPSESCAP)
            return peer

    repo.__class__ = narrowrepository