# HG changeset patch # User Joerg Sonnenberger # Date 1523142523 -7200 # Node ID 1ce7a55b09d1d92b3c91c0b02f358485b77cbc03 # Parent f1413e4a54a648a1d2a57ba3659f83075ca57ae6 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 diff -r f1413e4a54a6 -r 1ce7a55b09d1 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