D7893: nodemap: update the index with the newly written data (when appropriate)
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Wed Jan 15 14:58:28 UTC 2020
marmoute created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.
REVISION SUMMARY
If we are to use mmap to read the nodemap data, and if the python code is
responsible for the IO, we need to refresh the mmap after each write and provide
it back to the index.
We start this dance without the mmap first.
REPOSITORY
rHG Mercurial
REVISION DETAIL
https://phab.mercurial-scm.org/D7893
AFFECTED FILES
mercurial/revlogutils/nodemap.py
CHANGE DETAILS
diff --git a/mercurial/revlogutils/nodemap.py b/mercurial/revlogutils/nodemap.py
--- a/mercurial/revlogutils/nodemap.py
+++ b/mercurial/revlogutils/nodemap.py
@@ -100,6 +100,8 @@
with revlog.opener(datafile, 'r+') as fd:
fd.seek(target_docket.data_length)
fd.write(data)
+ fd.seek(0)
+ new_data = fd.read(target_docket.data_length + len(data))
target_docket.data_length += len(data)
target_docket.data_unused += data_changed_count
@@ -113,6 +115,7 @@
data = persistent_data(revlog.index)
# EXP-TODO: if this is a cache, this should use a cache vfs, not a
# store vfs
+ new_data = data
with revlog.opener(datafile, 'w') as fd:
fd.write(data)
target_docket.data_length = len(data)
@@ -122,6 +125,9 @@
with revlog.opener(revlog.nodemap_file, 'w', atomictemp=True) as fp:
fp.write(target_docket.serialize())
revlog._nodemap_docket = target_docket
+ if util.safehasattr(revlog.index, "update_nodemap_data"):
+ revlog.index.update_nodemap_data(target_docket, new_data)
+
# EXP-TODO: if the transaction abort, we should remove the new data and
# reinstall the old one.
To: marmoute, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list