Mercurial > public > mercurial-scm > hg
diff mercurial/revlog.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 | daad3aace942 |
children | 671f9479af0e |
line wrap: on
line diff
--- a/mercurial/revlog.py Wed Jan 15 15:47:59 2020 +0100 +++ b/mercurial/revlog.py Wed Jan 15 15:48:09 2020 +0100 @@ -352,6 +352,21 @@ return p +NodemapRevlogIO = None + +if util.safehasattr(parsers, 'parse_index_devel_nodemap'): + + class NodemapRevlogIO(revlogio): + """A debug oriented IO class that return a PersistentNodeMapIndexObject + + The PersistentNodeMapIndexObject object is meant to test the persistent nodemap feature. + """ + + def parseindex(self, data, inline): + index, cache = parsers.parse_index_devel_nodemap(data, inline) + return index, cache + + class rustrevlogio(revlogio): def parseindex(self, data, inline): index, cache = super(rustrevlogio, self).parseindex(data, inline) @@ -596,9 +611,17 @@ self._storedeltachains = True + devel_nodemap = ( + self.nodemap_file + and opts.get(b'devel-force-nodemap', False) + and NodemapRevlogIO is not None + ) + self._io = revlogio() if self.version == REVLOGV0: self._io = revlogoldio() + elif devel_nodemap: + self._io = NodemapRevlogIO() elif rustrevlog is not None and self.opener.options.get(b'rust.index'): self._io = rustrevlogio() try: