diff options
author | Junio C Hamano <gitster@pobox.com> | 2012-06-12 22:47:12 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-07-09 14:36:26 -0700 |
commit | f4c66eeddd37d3e5f4043df89c2679fbadeb57bd (patch) | |
tree | fe64f3b19cc92d22e5fdcbcccfb5f4fa0e61b70d | |
parent | apply: refactor read_file_or_gitlink() (diff) | |
download | tgif-f4c66eeddd37d3e5f4043df89c2679fbadeb57bd.tar.xz |
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>
-rw-r--r-- | builtin/apply.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/builtin/apply.c b/builtin/apply.c index 15bcbb0f2d..487e4034a5 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)) |