cext-revlog: fixed __delitem__ for uninitialized nodetree
This is a bug in a code path that's seldom used, because in practice
(at least in the whole test suite), calls to del index[i:j]
currently
just don't happen before the nodetree has been initialized.
However, in our current work to replace the nodetree by a Rust implementation,
this is of course systematic.
In index_slice_del()
, if the slice start is smaller than self->length
,
the whole of self->added
has to be cleared.
Before this change, the clearing was done only by the call to
index_invalidate_added(self, 0)
, that happens only for initialized
nodetrees. Hence the removal was effective only from start
to self->length
.
The consequence is index corruption, with bogus results in subsequent calls,
and in particular errors such as ValueError("parent out of range")
, due to
the fact that parents of entries in self->added
are now just invalid.
This is detected by the rebase tests, under conditions that the nodetree of revlog.c is never initialized. The provided specific test is more direct.