[PATCH v5 15/22] read-cache: touch shared index files when used
- From
Christian Couder <christian.couder@gmail.com>
- Date
- Mar 6, 2017, 09:41 UTC
- Message-ID
- <20170306094203.28250-16-chriscool@tuxfamily.org>
- In-Reply-To
- <20170306094203.28250-1-chriscool@tuxfamily.org>
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> --- read-cache.c | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-)
diff --git a/read-cache.c b/read-cache.c index aeb413a508..13375fa0ff 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1674,6 +1674,19 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) 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) { struct split_index *split_index; @@ -2245,6 +2258,7 @@ static int too_many_not_shared_entries(struct index_state *istate) int write_locked_index(struct index_state *istate, struct lock_file *lock, unsigned flags) { + int new_shared_index, ret; struct split_index *si = istate->split_index; if (!si || alternate_index_output || @@ -2261,13 +2275,22 @@ int write_locked_index(struct index_state *istate, struct lock_file *lock, } if (too_many_not_shared_entries(istate)) 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) 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; } /*
-- 2.12.0.206.g74921e51d6.dirty