Patchwork D7841: nodemap: add a optional `nodemap_add_full` method on indexes

login
register
mail settings
Submitter phabricator
Date Jan. 13, 2020, 3:09 p.m.
Message ID <differential-rev-PHID-DREV-gtffg2tbputp4qquyf7y-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/44281/
State New
Headers show

Comments

phabricator - Jan. 13, 2020, 3:09 p.m.
marmoute created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This method can be used to obtains serialized data for a full nodemap. The end
  goal is for some index implementation to managed the nodemap serialization them
  selves (eg: the rust implementation)

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/pure/parsers.py
  mercurial/revlogutils/nodemap.py

CHANGE DETAILS




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

Patch

diff --git a/mercurial/revlogutils/nodemap.py b/mercurial/revlogutils/nodemap.py
--- a/mercurial/revlogutils/nodemap.py
+++ b/mercurial/revlogutils/nodemap.py
@@ -15,6 +15,7 @@ 
 from .. import (
     error,
     node as nodemod,
+    util,
 )
 
 
@@ -68,7 +69,10 @@ 
     if revlog.nodemap_file is None:
         msg = "calling persist nodemap on a revlog without the feature enableb"
         raise error.ProgrammingError(msg)
-    data = persistent_data(revlog.index)
+    if util.safehasattr(revlog.index, "nodemap_data_all"):
+        data = revlog.index.nodemap_data_all()
+    else:
+        data = persistent_data(revlog.index)
     uid = _make_uid()
     datafile = _rawdata_filepath(revlog, uid)
     olds = _otherrawdata_filepath(revlog, uid)
diff --git a/mercurial/pure/parsers.py b/mercurial/pure/parsers.py
--- a/mercurial/pure/parsers.py
+++ b/mercurial/pure/parsers.py
@@ -149,6 +149,13 @@ 
     through the dedicated `devel.persistent-nodemap` config.
     """
 
+    def nodemap_data_all(self):
+        """Return bytes containing a full serialization of a nodemap
+
+        The nodemap should be valid for the full set of revisions in the
+        index."""
+        return nodemaputil.persistent_data(self)
+
 
 class InlinedIndexObject(BaseIndexObject):
     def __init__(self, data, inline=0):