D7847: nodemap: provide the on disk data to the index who support it

marmoute (Pierre-Yves David) phabricator at mercurial-scm.org
Mon Jan 13 10:09:51 EST 2020


marmoute created this revision.
Herald added a reviewer: indygreg.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  Time to start defining the API and prepare the rust index support. We provide
  a method to do so. We use a distinct method instead of passing them in the
  constructor because we will need this method anyway later (to refresh the mmap
  once we update the data on disk).

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D7847

AFFECTED FILES
  mercurial/pure/parsers.py
  mercurial/revlog.py

CHANGE DETAILS

diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -626,6 +626,16 @@
             self._io = rustrevlogio()
         try:
             d = self._io.parseindex(indexdata, self._inline)
+            index, _chunkcache = d
+            use_nodemap = (
+                not self._inline
+                and self.nodemap_file is not None
+                and util.safehasattr(index, 'update_nodemap_data')
+            )
+            if use_nodemap:
+                nodemap_data = nodemaputil.persisted_data(self)
+                if nodemap_data is not None:
+                    index.update_nodemap_data(nodemap_data)
         except (ValueError, IndexError):
             raise error.RevlogError(
                 _(b"index %s is corrupted") % self.indexfile
diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -156,6 +156,14 @@
         index."""
         return nodemaputil.persistent_data(self)
 
+    def update_nodemap_data(self, nm_data):
+        """provide full serialiazed data from a nodemap
+
+        The data are expected to come from disk. See `nodemap_data_all` for a
+        produceur of such data."""
+        if nm_data is not None:
+            nodemaputil.parse_data(nm_data)
+
 
 class InlinedIndexObject(BaseIndexObject):
     def __init__(self, data, inline=0):



To: marmoute, indygreg, #hg-reviewers
Cc: mercurial-devel


More information about the Mercurial-devel mailing list