Mercurial > public > mercurial-scm > hg
diff mercurial/pure/parsers.py @ 43525:845e5b313783
revlog: move the nodemap into the index object (for pure)
This make the pure code closer to the C extension one. The ultimate goal is to
merge the two into a single object and offer a unified API. This changeset
focus on gathering the data on the same object.
For now the code for `revlogoldindex` and `BaseIndexObject` index object are
quite similar. However, there will be larger divergence later on, so I don't
think is worth doing a base case.
This work is part of a refactoring to unify the revlog index and the nodemap.
This unification prepare the use of a persistent nodemap.
Differential Revision: https://phab.mercurial-scm.org/D7313
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 06 Nov 2019 14:13:19 +0100 |
parents | d783f945a701 |
children | dcf9826c8d8c |
line wrap: on
line diff
--- a/mercurial/pure/parsers.py Wed Nov 06 14:13:19 2019 +0100 +++ b/mercurial/pure/parsers.py Wed Nov 06 14:13:19 2019 +0100 @@ -10,8 +10,12 @@ import struct import zlib -from ..node import nullid -from .. import pycompat +from ..node import nullid, nullrev +from .. import ( + pycompat, + revlogutils, + util, +) stringio = pycompat.bytesio @@ -43,6 +47,17 @@ class BaseIndexObject(object): + @util.propertycache + def nodemap(self): + nodemap = revlogutils.NodeMap({nullid: nullrev}) + for r in range(0, len(self)): + n = self[r][7] + nodemap[n] = r + return nodemap + + def clearcaches(self): + self.__dict__.pop('nodemap', None) + def __len__(self): return self._lgt + len(self._extra)