Skip to content

Commit cf4bbd3

Browse files
committed
built-in add -i: wire up the new C code for the patch command
The code in `git-add--interactive.perl` that takes care of the `patch` command can look quite intimidating. There are so many modes in which it can be called, for example. But for the `patch` command in `git add -i`, only one mode is relevant: the `stage` mode. And we just implemented the beginnings of that mode in C so far. So let's use it when `add.interactive.useBuiltin=true`. Now, while the code in `add-patch.c` is far from reaching feature parity with the code in `git-add--interactive.perl` (color is not implemented, the diff algorithm cannot be configured, the colored diff cannot be post-processed via `interactive.diffFilter`, many commands are unimplemented yet, etc), hooking it all up with the part of `git add -i` that is already converted to C makes it easier to test and develop it. Note: at this stage, both the `add.interactive.useBuiltin` config setting is still safely opt-in, and will probably be fore quite some time, to allow for thorough testing "in the wild" without adversely affecting existing users. Signed-off-by: Johannes Schindelin <[email protected]>
1 parent 5051b44 commit cf4bbd3

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

add-interactive.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -831,14 +831,17 @@ static int run_patch(struct add_i_state *s, const struct pathspec *ps,
831831
count = list_and_choose(items, selected, files->nr, s, opts);
832832
if (count >= 0) {
833833
struct argv_array args = ARGV_ARRAY_INIT;
834+
struct pathspec ps_selected = { 0 };
834835

835-
argv_array_pushl(&args, "git", "add--interactive", "--patch",
836-
"--", NULL);
837836
for (i = 0; i < files->nr; i++)
838837
if (selected[i])
839838
argv_array_push(&args, items[i]->name);
840-
res = run_command_v_opt(args.argv, 0);
839+
parse_pathspec(&ps_selected,
840+
PATHSPEC_ALL_MAGIC & ~PATHSPEC_LITERAL,
841+
PATHSPEC_LITERAL_PATH, "", args.argv);
842+
res = run_add_p(s->r, &ps_selected);
841843
argv_array_clear(&args);
844+
clear_pathspec(&ps_selected);
842845
}
843846

844847
free(selected);

0 commit comments

Comments
 (0)