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>maint
parent
e42a96e772
commit
f4c66eeddd
|
@ -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)
|
static int apply_data(struct patch *patch, struct stat *st, struct cache_entry *ce)
|
||||||
{
|
{
|
||||||
struct strbuf buf = STRBUF_INIT;
|
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];
|
*ce = active_cache[pos];
|
||||||
if (stat_ret < 0) {
|
if (stat_ret < 0) {
|
||||||
struct checkout costate;
|
if (checkout_target(*ce, st))
|
||||||
/* checkout */
|
|
||||||
memset(&costate, 0, sizeof(costate));
|
|
||||||
costate.base_dir = "";
|
|
||||||
costate.refresh_cache = 1;
|
|
||||||
if (checkout_entry(*ce, &costate, NULL) ||
|
|
||||||
lstat(old_name, st))
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (!cached && verify_index_match(*ce, st))
|
if (!cached && verify_index_match(*ce, st))
|
||||||
|
|
Loading…
Reference in New Issue