cache API: add a "INDEX_STATE_INIT" macro/function, add release_index()
Hopefully in some not so distant future, we'll get advantages from always initializing the "repo" member of the "struct index_state". To make that easier let's introduce an initialization macro & function. The various ad-hoc initialization of the structure can then be changed over to it, and we can remove the various "0" assignments in discard_index() in favor of calling index_state_init() at the end. While not strictly necessary, let's also change the CALLOC_ARRAY() of various "struct index_state *" to use an ALLOC_ARRAY() followed by index_state_init() instead. We're then adding the release_index() function and converting some callers (including some of these allocations) over to it if they either won't need to use their "struct index_state" again, or are just about to call index_state_init(). Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Acked-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
5bdf6d4ac0
commit
2f6b1eb794
31
read-cache.c
31
read-cache.c
@ -2490,9 +2490,10 @@ int read_index_from(struct index_state *istate, const char *path,
|
||||
|
||||
trace_performance_enter();
|
||||
if (split_index->base)
|
||||
discard_index(split_index->base);
|
||||
release_index(split_index->base);
|
||||
else
|
||||
CALLOC_ARRAY(split_index->base, 1);
|
||||
ALLOC_ARRAY(split_index->base, 1);
|
||||
index_state_init(split_index->base);
|
||||
|
||||
base_oid_hex = oid_to_hex(&split_index->base_oid);
|
||||
base_path = xstrfmt("%s/sharedindex.%s", gitdir, base_oid_hex);
|
||||
@ -2531,7 +2532,13 @@ int is_index_unborn(struct index_state *istate)
|
||||
return (!istate->cache_nr && !istate->timestamp.sec);
|
||||
}
|
||||
|
||||
void discard_index(struct index_state *istate)
|
||||
void index_state_init(struct index_state *istate)
|
||||
{
|
||||
struct index_state blank = INDEX_STATE_INIT;
|
||||
memcpy(istate, &blank, sizeof(*istate));
|
||||
}
|
||||
|
||||
void release_index(struct index_state *istate)
|
||||
{
|
||||
/*
|
||||
* Cache entries in istate->cache[] should have been allocated
|
||||
@ -2543,20 +2550,12 @@ void discard_index(struct index_state *istate)
|
||||
validate_cache_entries(istate);
|
||||
|
||||
resolve_undo_clear_index(istate);
|
||||
istate->cache_nr = 0;
|
||||
istate->cache_changed = 0;
|
||||
istate->timestamp.sec = 0;
|
||||
istate->timestamp.nsec = 0;
|
||||
free_name_hash(istate);
|
||||
cache_tree_free(&(istate->cache_tree));
|
||||
istate->initialized = 0;
|
||||
istate->fsmonitor_has_run_once = 0;
|
||||
FREE_AND_NULL(istate->fsmonitor_last_update);
|
||||
FREE_AND_NULL(istate->cache);
|
||||
istate->cache_alloc = 0;
|
||||
free(istate->fsmonitor_last_update);
|
||||
free(istate->cache);
|
||||
discard_split_index(istate);
|
||||
free_untracked_cache(istate->untracked);
|
||||
istate->untracked = NULL;
|
||||
|
||||
if (istate->sparse_checkout_patterns) {
|
||||
clear_pattern_list(istate->sparse_checkout_patterns);
|
||||
@ -2569,6 +2568,12 @@ void discard_index(struct index_state *istate)
|
||||
}
|
||||
}
|
||||
|
||||
void discard_index(struct index_state *istate)
|
||||
{
|
||||
release_index(istate);
|
||||
index_state_init(istate);
|
||||
}
|
||||
|
||||
/*
|
||||
* Validate the cache entries of this index.
|
||||
* All cache entries associated with this index
|
||||
|
Reference in New Issue
Block a user