]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Wait for child on signal death for aliases to externals
authorTrygve Aaberge <trygveaa@gmail.com>
Tue, 7 Jul 2020 12:17:15 +0000 (14:17 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 Jul 2020 20:15:13 +0000 (13:15 -0700)
When we are running an alias to an external command, we want to wait for
that process to exit even after receiving ^C which normally kills the
git process. This is useful when the process is ignoring SIGINT (which
e.g. pagers often do), and then we don't want it to be killed.

Having an alias which invokes a pager is probably not common, but it can
be useful e.g. if you have an alias to a git command which uses a
subshell as one of the arguments (in which case you have to use an
external command, not an alias to a builtin).

This patch is similar to the previous commit, but the previous commit
fixed this only for aliases to builtins, while this commit does the same
for aliases to external commands. In addition to waiting after clean
like the previous commit, this also enables cleaning the child (that was
already enabled for aliases to builtins before the previous commit),
because wait_after_clean relies on it. Lastly, while the previous commit
fixed a regression, I don't think this has ever worked properly.

Signed-off-by: Trygve Aaberge <trygveaa@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git.c

diff --git a/git.c b/git.c
index 9b8d3c92e6e8d22493bb6febb4487704e47c6c12..c0698c7d456cd007fa93a834f09a6d0ef09db69a 100644 (file)
--- a/git.c
+++ b/git.c
@@ -345,6 +345,8 @@ static int handle_alias(int *argcp, const char ***argv)
                        commit_pager_choice();
 
                        child.use_shell = 1;
+                       child.clean_on_exit = 1;
+                       child.wait_after_clean = 1;
                        child.trace2_child_class = "shell_alias";
                        argv_array_push(&child.args, alias_string + 1);
                        argv_array_pushv(&child.args, (*argv) + 1);