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
--- 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