]> git.ipfire.org Git - thirdparty/git.git/commit
Start to implement a built-in version of `git add --interactive`
authorJohannes Schindelin <johannes.schindelin@gmx.de>
Wed, 13 Nov 2019 12:40:57 +0000 (12:40 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 14 Nov 2019 02:10:04 +0000 (11:10 +0900)
commitf83dff60a7880f1abfc3dc3c6b8e2972c4889da5
tree87209a9f4882e988bab1b580b049375052970f07
parentda72936f544fec5a335e66432610e4cef4430991
Start to implement a built-in version of `git add --interactive`

Unlike previous conversions to C, where we started with a built-in
helper, we start this conversion by adding an interception in the
`run_add_interactive()` function when the new opt-in
`add.interactive.useBuiltin` config knob is turned on (or the
corresponding environment variable `GIT_TEST_ADD_I_USE_BUILTIN`), and
calling the new internal API function `run_add_i()` that is implemented
directly in libgit.a.

At this point, the built-in version of `git add -i` only states that it
cannot do anything yet. In subsequent patches/patch series, the
`run_add_i()` function will gain more and more functionality, until it
is feature complete. The whole arc of the conversion can be found in the
PRs #170-175 at https://github.com/gitgitgadget/git.

The "--helper approach" can unfortunately not be used here: on Windows
we face the very specific problem that a `system()` call in
Perl seems to close `stdin` in the parent process when the spawned
process consumes even one character from `stdin`. Which prevents us from
implementing the main loop in C and still trying to hand off to the Perl
script.

The very real downside of the approach we have to take here is that the
test suite won't pass with `GIT_TEST_ADD_I_USE_BUILTIN=true` until the
conversion is complete (the `--helper` approach would have let it pass,
even at each of the incremental conversion steps).

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/add.txt
Makefile
add-interactive.c [new file with mode: 0644]
add-interactive.h [new file with mode: 0644]
builtin/add.c
t/README