diff options
author | Junio C Hamano <gitster@pobox.com> | 2019-07-25 13:59:23 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-07-25 13:59:23 -0700 |
commit | f8aee8576ac5e01fa993c80b5b888af214c03758 (patch) | |
tree | efd02db445dc51f284d3afddcefd9dcd7e5ac6c1 /builtin/stash.c | |
parent | Merge branch 'sr/gpg-interface-stop-at-the-end' (diff) | |
parent | stash: fix handling removed files with --keep-index (diff) | |
download | tgif-f8aee8576ac5e01fa993c80b5b888af214c03758.tar.xz |
Merge branch 'tg/stash-keep-index-with-removed-paths'
"git stash --keep-index" did not work correctly on paths that have
been removed, which has been fixed.
* tg/stash-keep-index-with-removed-paths:
stash: fix handling removed files with --keep-index
Diffstat (limited to 'builtin/stash.c')
-rw-r--r-- | builtin/stash.c | 32 |
1 files changed, 9 insertions, 23 deletions
diff --git a/builtin/stash.c b/builtin/stash.c index fde6397caa..b5a301f24d 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1391,30 +1391,16 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q } if (keep_index == 1 && !is_null_oid(&info.i_tree)) { - struct child_process cp_ls = CHILD_PROCESS_INIT; - struct child_process cp_checkout = CHILD_PROCESS_INIT; - struct strbuf out = STRBUF_INIT; - - if (reset_tree(&info.i_tree, 0, 1)) { - ret = -1; - goto done; - } - - cp_ls.git_cmd = 1; - argv_array_pushl(&cp_ls.args, "ls-files", "-z", - "--modified", "--", NULL); - - add_pathspecs(&cp_ls.args, ps); - if (pipe_command(&cp_ls, NULL, 0, &out, 0, NULL, 0)) { - ret = -1; - goto done; - } + struct child_process cp = CHILD_PROCESS_INIT; - cp_checkout.git_cmd = 1; - argv_array_pushl(&cp_checkout.args, "checkout-index", - "-z", "--force", "--stdin", NULL); - if (pipe_command(&cp_checkout, out.buf, out.len, NULL, - 0, NULL, 0)) { + cp.git_cmd = 1; + argv_array_pushl(&cp.args, "checkout", "--no-overlay", + oid_to_hex(&info.i_tree), "--", NULL); + if (!ps->nr) + argv_array_push(&cp.args, ":/"); + else + add_pathspecs(&cp.args, ps); + if (run_command(&cp)) { ret = -1; goto done; } |