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.
index_slice_del(), if the slice start is smaller than
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
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.