nodemap: fix validity checking when revlog is too short stable
authorPierre-Yves David <pierre-yves.david@octobus.net>
Sat, 13 Jun 2020 11:57:58 +0200
branchstable
changeset 44954 affe0fb42250
parent 44924 6c8384afbf77
child 44955 b77d5b568496
nodemap: fix validity checking when revlog is too short We cannot check the nodeid of a revision that is not even there. We add a simple fix and simple test.
mercurial/revlog.py
tests/test-persistent-nodemap.t
--- a/mercurial/revlog.py	Tue Jun 09 05:24:45 2020 +0200
+++ b/mercurial/revlog.py	Sat Jun 13 11:57:58 2020 +0200
@@ -651,7 +651,10 @@
                 nodemap_data = nodemaputil.persisted_data(self)
                 if nodemap_data is not None:
                     docket = nodemap_data[0]
-                    if d[0][docket.tip_rev][7] == docket.tip_node:
+                    if (
+                        len(d[0]) > docket.tip_rev
+                        and d[0][docket.tip_rev][7] == docket.tip_node
+                    ):
                         # no changelog tampering
                         self._nodemap_docket = docket
                         index.update_nodemap_data(*nodemap_data)
--- a/tests/test-persistent-nodemap.t	Tue Jun 09 05:24:45 2020 +0200
+++ b/tests/test-persistent-nodemap.t	Sat Jun 13 11:57:58 2020 +0200
@@ -411,3 +411,25 @@
   .hg/store/00changelog-????????????????.nd: size=123584, sha256=8c6cef6fd3d3fac291968793ee19a4be6d0b8375e9508bd5c7d4a8879e8df180 (glob) (pure !)
   .hg/store/00changelog-????????????????.nd: size=123584, sha256=eb9e9a4bcafdb5e1344bc8a0cbb3288b2106413b8efae6265fb8a7973d7e97f9 (glob) (rust !)
   .hg/store/00changelog-????????????????.nd: size=123136, sha256=4f504f5a834db3811ced50ab3e9e80bcae3581bb0f9b13a7a9f94b7fc34bcebe (glob) (no-pure no-rust !)
+
+Check that removing content does not confuse the nodemap
+--------------------------------------------------------
+
+removing data with rollback
+
+  $ echo aso > a
+  $ hg ci -m a4
+  $ hg rollback
+  repository tip rolled back to revision 5005 (undo commit)
+  working directory now based on revision 5005
+  $ hg id -r .
+  bae4d45c759e tip
+
+roming data with strip
+
+  $ echo aso > a
+  $ hg ci -m a4
+  $ hg --config extensions.strip= strip -r . --no-backup
+  1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg id -r . --traceback
+  bae4d45c759e tip