sparse-index API: BUG() out on NULL ensure_full_index()

Make the ensure_full_index() function stricter, and have it only
accept a non-NULL "struct index_state". This function (and this
behavior) was added in [1].

The only reason it needed to be this lax was due to interaction with
repo_index_has_changes(). See the addition of that code in [2].

The other reason for why this was needed dates back to interaction
with code added in [3]. In [4] we started calling ensure_full_index()
in unpack_trees(), but the caller added in 34110cd4e3 wants to pass
us a NULL "dst_index". Let's instead do the NULL check in
unpack_trees() itself.

1. 4300f8442a (sparse-index: implement ensure_full_index(), 2021-03-30)
2. 0c18c059a1 (read-cache: ensure full index, 2021-04-01)
3. 34110cd4e3 (Make 'unpack_trees()' have a separate source and
   destination index, 2008-03-06)
4. 6863df3550 (unpack-trees: ensure full index, 2021-03-30)

Signed-off-by: Ævar Arnfjörð Bjarmason <>
Acked-by: Derrick Stolee <>
Signed-off-by: Junio C Hamano <>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2023-01-12 13:55:25 +01:00 committed by Junio C Hamano
parent d2cdf2c285
commit 29fefafcba
2 changed files with 5 additions and 2 deletions

View File

@ -299,7 +299,7 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
* If the index is already full, then keep it full. We will convert
* it to a sparse index on write, if possible.
if (!istate || istate->sparse_index == INDEX_EXPANDED)
if (istate->sparse_index == INDEX_EXPANDED)
@ -424,6 +424,8 @@ void expand_index(struct index_state *istate, struct pattern_list *pl)
void ensure_full_index(struct index_state *istate)
if (!istate)
BUG("ensure_full_index() must get an index!");
expand_index(istate, NULL);

View File

@ -1880,7 +1880,8 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options
if (repo->settings.command_requires_full_index) {
if (o->dst_index)