D7846: nodemap: all check that revision and nodes match in the nodemap
marmoute (Pierre-Yves David)
phabricator at mercurial-scm.org
Wed Feb 5 00:25:27 UTC 2020
marmoute added a comment.
marmoute updated this revision to Diff 19894.
rebase to latest default
REPOSITORY
rHG Mercurial
CHANGES SINCE LAST UPDATE
https://phab.mercurial-scm.org/D7846?vs=19835&id=19894
CHANGES SINCE LAST ACTION
https://phab.mercurial-scm.org/D7846/new/
REVISION DETAIL
https://phab.mercurial-scm.org/D7846
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
@@ -356,6 +356,19 @@
ret = 1
else:
all_revs.remove(r)
+ nm_rev = _find_node(root, nodemod.hex(index[r][7]))
+ if nm_rev is None:
+ msg = b" revision node does not match any entries: %d\n" % r
+ ui.write_err(msg)
+ ret = 1
+ elif nm_rev != r:
+ msg = (
+ b" revision node does not match the expected revision: "
+ b"%d != %d\n" % (r, nm_rev)
+ )
+ ui.write_err(msg)
+ ret = 1
+
if all_revs:
for r in sorted(all_revs):
msg = b" extra revision in nodemap: %d\n" % r
@@ -371,3 +384,11 @@
if v is None or isinstance(v, Block):
continue
yield v
+
+
+def _find_node(block, node):
+ """find the revision associated with a given node"""
+ entry = block.get(_to_int(node[0:1]))
+ if isinstance(entry, dict):
+ return _find_node(entry, node[1:])
+ return entry
To: marmoute, #hg-reviewers
Cc: mercurial-devel
More information about the Mercurial-devel
mailing list