mirror of
https://github.com/git/git.git
synced 2024-10-30 22:07:53 +01:00
apply: factor out checkout_target() helper function
When a patch wants to touch a path, if the path exists in the index but is missing in the working tree, "git apply --index" checks out the file to the working tree from the index automatically and then applies the patch. Split this logic out to a separate helper function. Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
e42a96e772
commit
f4c66eeddd
1 changed files with 13 additions and 7 deletions
|
@ -3034,6 +3034,18 @@ static void prepare_fn_table(struct patch *patch)
|
|||
}
|
||||
}
|
||||
|
||||
static int checkout_target(struct cache_entry *ce, struct stat *st)
|
||||
{
|
||||
struct checkout costate;
|
||||
|
||||
memset(&costate, 0, sizeof(costate));
|
||||
costate.base_dir = "";
|
||||
costate.refresh_cache = 1;
|
||||
if (checkout_entry(ce, &costate, NULL) || lstat(ce->name, st))
|
||||
return error(_("cannot checkout %s"), ce->name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int apply_data(struct patch *patch, struct stat *st, struct cache_entry *ce)
|
||||
{
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
@ -3163,13 +3175,7 @@ static int check_preimage(struct patch *patch, struct cache_entry **ce, struct s
|
|||
}
|
||||
*ce = active_cache[pos];
|
||||
if (stat_ret < 0) {
|
||||
struct checkout costate;
|
||||
/* checkout */
|
||||
memset(&costate, 0, sizeof(costate));
|
||||
costate.base_dir = "";
|
||||
costate.refresh_cache = 1;
|
||||
if (checkout_entry(*ce, &costate, NULL) ||
|
||||
lstat(old_name, st))
|
||||
if (checkout_target(*ce, st))
|
||||
return -1;
|
||||
}
|
||||
if (!cached && verify_index_match(*ce, st))
|
||||
|
|
Loading…
Reference in a new issue