sparse-index: add ensure_correct_sparsity function
The `ensure_correct_sparsity` function is intended to provide a means of aligning the in-core index with the sparsity required by the repository settings and other properties of the index. The function first checks whether a sparse index is allowed (per repository & sparse checkout pattern settings). If the sparse index may be used, the index is converted to sparse; otherwise, it is explicitly expanded with `ensure_full_index`. Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Victoria Dye <vdye@github.com> Reviewed-by: Elijah Newren <newren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
13f69f3082
commit
b93fea08d2
@ -122,17 +122,17 @@ static int index_has_unmerged_entries(struct index_state *istate)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int convert_to_sparse(struct index_state *istate, int flags)
|
||||
static int is_sparse_index_allowed(struct index_state *istate, int flags)
|
||||
{
|
||||
int test_env;
|
||||
if (istate->sparse_index || !istate->cache_nr ||
|
||||
!core_apply_sparse_checkout || !core_sparse_checkout_cone)
|
||||
if (!core_apply_sparse_checkout || !core_sparse_checkout_cone)
|
||||
return 0;
|
||||
|
||||
if (!istate->repo)
|
||||
istate->repo = the_repository;
|
||||
|
||||
if (!(flags & SPARSE_INDEX_MEMORY_ONLY)) {
|
||||
int test_env;
|
||||
|
||||
/*
|
||||
* The sparse index is not (yet) integrated with a split index.
|
||||
*/
|
||||
@ -168,6 +168,19 @@ int convert_to_sparse(struct index_state *istate, int flags)
|
||||
if (!istate->sparse_checkout_patterns->use_cone_patterns)
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
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 ||
|
||||
!is_sparse_index_allowed(istate, flags))
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* NEEDSWORK: If we have unmerged entries, then stay full.
|
||||
* Unmerged entries prevent the cache-tree extension from working.
|
||||
@ -316,6 +329,18 @@ void ensure_full_index(struct index_state *istate)
|
||||
trace2_region_leave("index", "ensure_full_index", istate->repo);
|
||||
}
|
||||
|
||||
void ensure_correct_sparsity(struct index_state *istate)
|
||||
{
|
||||
/*
|
||||
* If the index can be sparse, make it sparse. Otherwise,
|
||||
* ensure the index is full.
|
||||
*/
|
||||
if (is_sparse_index_allowed(istate, 0))
|
||||
convert_to_sparse(istate, 0);
|
||||
else
|
||||
ensure_full_index(istate);
|
||||
}
|
||||
|
||||
/*
|
||||
* This static global helps avoid infinite recursion between
|
||||
* expand_to_path() and index_file_exists().
|
||||
|
@ -4,6 +4,7 @@
|
||||
struct index_state;
|
||||
#define SPARSE_INDEX_MEMORY_ONLY (1 << 0)
|
||||
int convert_to_sparse(struct index_state *istate, int flags);
|
||||
void ensure_correct_sparsity(struct index_state *istate);
|
||||
|
||||
/*
|
||||
* Some places in the codebase expect to search for a specific path.
|
||||
|
Loading…
Reference in New Issue
Block a user