revlog: reset _nodepos after strip
authorJoerg Sonnenberger <joerg@bec.de>
Sun, 08 Apr 2018 01:08:43 +0200
changeset 37494 1ce7a55b09d1
parent 37493 f1413e4a54a6
child 37495 b1fb341d8a61
revlog: reset _nodepos after strip When using the pure revlog parser, _nodepos is used to keep track of the position during index scanning in the non-cached cache. If it is out of bounds, BaseIndexObject._fix_index will assert. Since strip can actually remove the position scanned last, make sure to reset it. Add an assertion in the place where the invariance is clearer. Differential Revision: https://phab.mercurial-scm.org/D3188
mercurial/revlog.py
--- a/mercurial/revlog.py	Wed Apr 04 13:14:48 2018 +0800
+++ b/mercurial/revlog.py	Sun Apr 08 01:08:43 2018 +0200
@@ -818,6 +818,8 @@
             p = self._nodepos
             if p is None:
                 p = len(i) - 2
+            else:
+                assert p < len(i)
             for r in xrange(p, -1, -1):
                 v = i[r][7]
                 n[v] = r
@@ -2421,6 +2423,7 @@
             del self.nodemap[self.node(x)]
 
         del self.index[rev:-1]
+        self._nodepos = None
 
     def checksize(self):
         expected = 0