diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2022-06-29 00:22:44 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-06-29 00:37:50 +0200 |
commit | 4788e8b25692a8ae1a005554d3ad12f8ee4ee29e (patch) | |
tree | 3d2ba891cef3da768888cbc8b1d2001beef9a2fc /add-interactive.c | |
parent | Merge branch 'js/builtin-add-i-cmds' (diff) | |
download | git-4788e8b25692a8ae1a005554d3ad12f8ee4ee29e.tar.xz git-4788e8b25692a8ae1a005554d3ad12f8ee4ee29e.zip |
add --interactive: allow `update` to stage deleted files
The scripted version of `git add -i` used `git update-index --add
--remove`, but the built-in version implemented only the `--add` part.
This fixes https://github.com/msys2/MSYS2-packages/issues/3066
Reported-by: Christoph Reiter <reiter.christoph@gmail.com>
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'add-interactive.c')
-rw-r--r-- | add-interactive.c | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/add-interactive.c b/add-interactive.c index f395d54c08..63bc1c1d67 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -665,8 +665,16 @@ static int run_update(struct add_i_state *s, const struct pathspec *ps, for (i = 0; i < files->items.nr; i++) { const char *name = files->items.items[i].string; - if (files->selected[i] && - add_file_to_index(s->r->index, name, 0) < 0) { + struct stat st; + + if (!files->selected[i]) + continue; + if (lstat(name, &st) && is_missing_file_error(errno)) { + if (remove_file_from_index(s->r->index, name) < 0) { + res = error(_("could not stage '%s'"), name); + break; + } + } else if (add_file_to_index(s->r->index, name, 0) < 0) { res = error(_("could not stage '%s'"), name); break; } |