зеркало из https://github.com/microsoft/git.git
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>
This commit is contained in:
Родитель
e91162be9c
Коммит
89c8559367
|
@ -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) {
|
||||
|
|
|
@ -530,7 +530,7 @@ test_expect_success 'diff.algorithm is passed to `git diff-files`' '
|
|||
>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
|
||||
'
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче