1
0
mirror of https://github.com/git/git.git synced 2025-03-14 13:28:13 +00:00

read-cache: touch shared index files when used

When a split-index file is created, let's update the mtime of the
shared index file that the split-index file is referencing.

In a following commit we will make shared index file expire
depending on their mtime, so updating the mtime makes sure that
the shared index file will not be deleted soon.

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Christian Couder 2017-02-27 19:00:12 +01:00 committed by Junio C Hamano
parent 6a5e6f5e44
commit 0d59ffb47e

View File

@ -1682,6 +1682,19 @@ unmap:
die("index file corrupt"); die("index file corrupt");
} }
/*
* Signal that the shared index is used by updating its mtime.
*
* This way, shared index can be removed if they have not been used
* for some time.
*/
static void freshen_shared_index(char *base_sha1_hex, int warn)
{
const char *shared_index = git_path("sharedindex.%s", base_sha1_hex);
if (!check_and_freshen_file(shared_index, 1) && warn)
warning("could not freshen shared index '%s'", shared_index);
}
int read_index_from(struct index_state *istate, const char *path) int read_index_from(struct index_state *istate, const char *path)
{ {
struct split_index *split_index; struct split_index *split_index;
@ -2253,6 +2266,7 @@ static int too_many_not_shared_entries(struct index_state *istate)
int write_locked_index(struct index_state *istate, struct lock_file *lock, int write_locked_index(struct index_state *istate, struct lock_file *lock,
unsigned flags) unsigned flags)
{ {
int new_shared_index, ret;
struct split_index *si = istate->split_index; struct split_index *si = istate->split_index;
if (!si || alternate_index_output || if (!si || alternate_index_output ||
@ -2269,13 +2283,22 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock,
} }
if (too_many_not_shared_entries(istate)) if (too_many_not_shared_entries(istate))
istate->cache_changed |= SPLIT_INDEX_ORDERED; istate->cache_changed |= SPLIT_INDEX_ORDERED;
if (istate->cache_changed & SPLIT_INDEX_ORDERED) {
int ret = write_shared_index(istate, lock, flags); new_shared_index = istate->cache_changed & SPLIT_INDEX_ORDERED;
if (new_shared_index) {
ret = write_shared_index(istate, lock, flags);
if (ret) if (ret)
return ret; return ret;
} }
return write_split_index(istate, lock, flags); ret = write_split_index(istate, lock, flags);
/* Freshen the shared index only if the split-index was written */
if (!ret && !new_shared_index)
freshen_shared_index(sha1_to_hex(si->base_sha1), 1);
return ret;
} }
/* /*