sparse-index: introduce partially-sparse indexes
A future change will present a temporary, in-memory mode where the index can both contain sparse directory entries but also not be completely collapsed to the smallest possible sparse directories. This will be necessary for modifying the sparse-checkout definition while using a sparse index. For now, convert the single-bit member 'sparse_index' in 'struct index_state' to be a an 'enum sparse_index_mode' with three modes: * INDEX_EXPANDED (0): No sparse directories exist. This is always the case for repositories that do not use cone-mode sparse-checkout. * INDEX_COLLAPSED: Sparse directories may exist. Files outside the sparse-checkout cone are reduced to sparse directory entries whenever possible. * INDEX_PARTIALLY_SPARSE: Sparse directories may exist. Some file entries outside the sparse-checkout cone may exist. Running convert_to_sparse() may further reduce those files to sparse directory entries. The main reason to store this extra information is to allow convert_to_sparse() to short-circuit when the index is already in INDEX_EXPANDED mode but to actually do the necessary work when in INDEX_PARTIALLY_SPARSE mode. The INDEX_PARTIALLY_SPARSE mode will be used in an upcoming change. Signed-off-by: Derrick Stolee <derrickstolee@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
dce241b020
commit
9fadb373dd
@ -173,7 +173,7 @@ int convert_to_sparse(struct index_state *istate, int flags)
|
||||
* If the index is already sparse, empty, or otherwise
|
||||
* cannot be converted to sparse, do not convert.
|
||||
*/
|
||||
if (istate->sparse_index || !istate->cache_nr ||
|
||||
if (istate->sparse_index == INDEX_COLLAPSED || !istate->cache_nr ||
|
||||
!is_sparse_index_allowed(istate, flags))
|
||||
return 0;
|
||||
|
||||
@ -214,7 +214,7 @@ int convert_to_sparse(struct index_state *istate, int flags)
|
||||
FREE_AND_NULL(istate->fsmonitor_dirty);
|
||||
FREE_AND_NULL(istate->fsmonitor_last_update);
|
||||
|
||||
istate->sparse_index = 1;
|
||||
istate->sparse_index = INDEX_COLLAPSED;
|
||||
trace2_region_leave("index", "convert_to_sparse", istate->repo);
|
||||
return 0;
|
||||
}
|
||||
@ -259,7 +259,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)
|
||||
if (!istate || istate->sparse_index == INDEX_EXPANDED)
|
||||
return;
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user