factor out refresh_and_write_cache function
Getting the lock for the index, refreshing it and then writing it is a pattern that happens more than once throughout the codebase, and isn't trivial to get right. Factor out the refresh_and_write_cache function from builtin/am.c to read-cache.c, so it can be re-used in other places in a subsequent commit. Note that we return different error codes for failing to refresh the cache, and failing to write the index. The current caller only cares about failing to write the index. However for other callers we're going to convert in subsequent patches we will need this distinction. Helped-by: Martin Ågren <martin.agren@gmail.com> Helped-by: Johannes Schindelin <Johannes.Schindelin@gmx.de> Signed-off-by: Thomas Gummerer <t.gummerer@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
745f681289
commit
22184497a3
21
read-cache.c
21
read-cache.c
@ -1472,6 +1472,27 @@ static void show_file(const char * fmt, const char * name, int in_porcelain,
|
||||
printf(fmt, name);
|
||||
}
|
||||
|
||||
int repo_refresh_and_write_index(struct repository *repo,
|
||||
unsigned int refresh_flags,
|
||||
unsigned int write_flags,
|
||||
int gentle,
|
||||
const struct pathspec *pathspec,
|
||||
char *seen, const char *header_msg)
|
||||
{
|
||||
struct lock_file lock_file = LOCK_INIT;
|
||||
int fd, ret = 0;
|
||||
|
||||
fd = repo_hold_locked_index(repo, &lock_file, 0);
|
||||
if (!gentle && fd < 0)
|
||||
return -1;
|
||||
if (refresh_index(repo->index, refresh_flags, pathspec, seen, header_msg))
|
||||
ret = 1;
|
||||
if (0 <= fd && write_locked_index(repo->index, &lock_file, COMMIT_LOCK | write_flags))
|
||||
ret = -1;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
int refresh_index(struct index_state *istate, unsigned int flags,
|
||||
const struct pathspec *pathspec,
|
||||
char *seen, const char *header_msg)
|
||||
|
Reference in New Issue
Block a user