Mercurial > hg
diff mercurial/pure/parsers.py @ 44313:6f9e8e142cea
nodemap: add a (python) index class for persistent nodemap testing
Using the persistent nodemap require a compeling performance boost and an
existing implementation. The benefit of the persistent nodemap for pure python
code is unclear and we don't have a C implementation for it. Yet we would like
to actually start testing it in more details and define an API for using that
persistent nodemap.
We introduce a new `devel` config option to use an index class dedicated to
Nodemap Testing. This feature is "pure" only because having using a pure-python
index with the `cext` policy proved more difficult than I would like.
There is nothing going on in that class for now, but the coming changeset will
change that.
Differential Revision: https://phab.mercurial-scm.org/D7840
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 15 Jan 2020 15:48:09 +0100 |
parents | ab595920de0e |
children | 7f4f7ef3133e |
line wrap: on
line diff
--- a/mercurial/pure/parsers.py Wed Jan 15 15:47:59 2020 +0100 +++ b/mercurial/pure/parsers.py Wed Jan 15 15:48:09 2020 +0100 @@ -141,6 +141,15 @@ self._extra = self._extra[: i - self._lgt] +class PersistentNodeMapIndexObject(IndexObject): + """a Debug oriented class to test persistent nodemap + + We need a simple python object to test API and higher level behavior. See + the Rust implementation for more serious usage. This should be used only + through the dedicated `devel.persistent-nodemap` config. + """ + + class InlinedIndexObject(BaseIndexObject): def __init__(self, data, inline=0): self._data = data @@ -188,6 +197,12 @@ return InlinedIndexObject(data, inline), (0, data) +def parse_index_devel_nodemap(data, inline): + """like parse_index2, but alway return a PersistentNodeMapIndexObject + """ + return PersistentNodeMapIndexObject(data), None + + def parse_dirstate(dmap, copymap, st): parents = [st[:20], st[20:40]] # dereference fields so they will be local in loop