diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2019-12-06 13:08:24 (GMT) |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2019-12-06 16:57:34 (GMT) |
commit | 89c8559367aae771006cc0956b6f5e54cc8c614c (patch) | |
tree | 8591edc4703cb6f428d9c48eb05fbaa6a73b387c /git-add--interactive.perl | |
parent | e91162be9ce7195309dc2b7e3c03988481cee850 (diff) | |
download | git-89c8559367aae771006cc0956b6f5e54cc8c614c.zip git-89c8559367aae771006cc0956b6f5e54cc8c614c.tar.gz git-89c8559367aae771006cc0956b6f5e54cc8c614c.tar.bz2 |
git add -p: use non-zero exit code when the diff generation failed
The first thing `git add -p` does is to generate a diff. If this diff
cannot be generated, `git add -p` should not continue as if nothing
happened, but instead fail.
What we *actually* do here is much broader: we now verify for *every*
`run_cmd_pipe()` call that the spawned process actually succeeded.
Note that we have to change two callers in this patch, as we need to
store the spawned process' output in a local variable, which means that
the callers can no longer decide whether to interpret the `return <$fh>`
in array or in scalar context.
This bug was noticed while writing a test case for the diff.algorithm
feature, and we let that test case double as a regression test for this
fixed bug, too.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-add--interactive.perl')
-rwxr-xr-x | git-add--interactive.perl | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 52659bb..10fd30a 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -177,7 +177,9 @@ sub run_cmd_pipe { } else { my $fh = undef; open($fh, '-|', @_) or die; - return <$fh>; + my @out = <$fh>; + close $fh || die "Cannot close @_ ($!)"; + return @out; } } @@ -224,7 +226,7 @@ my $status_head = sprintf($status_fmt, __('staged'), __('unstaged'), __('path')) sub get_empty_tree { return $empty_tree if defined $empty_tree; - $empty_tree = run_cmd_pipe(qw(git hash-object -t tree /dev/null)); + ($empty_tree) = run_cmd_pipe(qw(git hash-object -t tree /dev/null)); chomp $empty_tree; return $empty_tree; } @@ -1127,7 +1129,7 @@ aborted and the hunk is left unchanged. EOF2 close $fh; - chomp(my $editor = run_cmd_pipe(qw(git var GIT_EDITOR))); + chomp(my ($editor) = run_cmd_pipe(qw(git var GIT_EDITOR))); system('sh', '-c', $editor.' "$@"', $editor, $hunkfile); if ($? != 0) { |