From: Junio C Hamano Date: Wed, 13 Jun 2012 05:47:12 +0000 (-0700) Subject: apply: factor out checkout_target() helper function X-Git-Tag: v1.7.12-rc0~31^2~14 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=f4c66eeddd37d3e5f4043df89c2679fbadeb57bd;p=git.git 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 --- diff --git a/builtin/apply.c b/builtin/apply.c index 15bcbb0f2..487e4034a 100644 --- a/builtin/apply.c +++ b/builtin/apply.c @@ -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))