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>
} else {
my $fh = undef;
open($fh, '-|', @_) or die;
- return <$fh>;
+ my @out = <$fh>;
+ close $fh || die "Cannot close @_ ($!)";
+ return @out;
}
}
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;
}
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) {
>file &&
git add file &&
echo changed >file &&
- git -c diff.algorithm=bogus add -p 2>err &&
+ test_must_fail git -c diff.algorithm=bogus add -p 2>err &&
test_i18ngrep "error: option diff-algorithm accepts " err
'