mirror of
https://github.com/git/git.git
synced 2024-06-02 09:26:10 +02:00
Merge branch 'ps/difftool-dir-diff-exit-code' into HEAD
"git difftool --dir-diff" learned to honor the "--trust-exit-code" option; it used to always exit with 0 and signalled success. * ps/difftool-dir-diff-exit-code: git-difftool--helper: honor `--trust-exit-code` with `--dir-diff`
This commit is contained in:
commit
a87469cc99
|
@ -105,7 +105,6 @@ instead. `--no-symlinks` is the default on Windows.
|
||||||
`merge.tool` until a tool is found.
|
`merge.tool` until a tool is found.
|
||||||
|
|
||||||
--[no-]trust-exit-code::
|
--[no-]trust-exit-code::
|
||||||
'git-difftool' invokes a diff tool individually on each file.
|
|
||||||
Errors reported by the diff tool are ignored by default.
|
Errors reported by the diff tool are ignored by default.
|
||||||
Use `--trust-exit-code` to make 'git-difftool' exit when an
|
Use `--trust-exit-code` to make 'git-difftool' exit when an
|
||||||
invoked diff tool returns a non-zero exit code.
|
invoked diff tool returns a non-zero exit code.
|
||||||
|
|
|
@ -91,6 +91,19 @@ then
|
||||||
# ignore the error from the above --- run_merge_tool
|
# ignore the error from the above --- run_merge_tool
|
||||||
# will diagnose unusable tool by itself
|
# will diagnose unusable tool by itself
|
||||||
run_merge_tool "$merge_tool" false
|
run_merge_tool "$merge_tool" false
|
||||||
|
|
||||||
|
status=$?
|
||||||
|
if test $status -ge 126
|
||||||
|
then
|
||||||
|
# Command not found (127), not executable (126) or
|
||||||
|
# exited via a signal (>= 128).
|
||||||
|
exit $status
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test "$GIT_DIFFTOOL_TRUST_EXIT_CODE" = true
|
||||||
|
then
|
||||||
|
exit $status
|
||||||
|
fi
|
||||||
else
|
else
|
||||||
# Launch the merge tool on each path provided by 'git diff'
|
# Launch the merge tool on each path provided by 'git diff'
|
||||||
while test $# -gt 6
|
while test $# -gt 6
|
||||||
|
|
|
@ -91,58 +91,67 @@ test_expect_success 'difftool forwards arguments to diff' '
|
||||||
rm for-diff
|
rm for-diff
|
||||||
'
|
'
|
||||||
|
|
||||||
test_expect_success 'difftool ignores exit code' '
|
for opt in '' '--dir-diff'
|
||||||
|
do
|
||||||
|
test_expect_success "difftool ${opt} ignores exit code" "
|
||||||
test_config difftool.error.cmd false &&
|
test_config difftool.error.cmd false &&
|
||||||
git difftool -y -t error branch
|
git difftool ${opt} -y -t error branch
|
||||||
'
|
"
|
||||||
|
|
||||||
test_expect_success 'difftool forwards exit code with --trust-exit-code' '
|
test_expect_success "difftool ${opt} forwards exit code with --trust-exit-code" "
|
||||||
test_config difftool.error.cmd false &&
|
test_config difftool.error.cmd false &&
|
||||||
test_must_fail git difftool -y --trust-exit-code -t error branch
|
test_must_fail git difftool ${opt} -y --trust-exit-code -t error branch
|
||||||
'
|
"
|
||||||
|
|
||||||
test_expect_success 'difftool forwards exit code with --trust-exit-code for built-ins' '
|
test_expect_success "difftool ${opt} forwards exit code with --trust-exit-code for built-ins" "
|
||||||
test_config difftool.vimdiff.path false &&
|
test_config difftool.vimdiff.path false &&
|
||||||
test_must_fail git difftool -y --trust-exit-code -t vimdiff branch
|
test_must_fail git difftool ${opt} -y --trust-exit-code -t vimdiff branch
|
||||||
'
|
"
|
||||||
|
|
||||||
test_expect_success 'difftool honors difftool.trustExitCode = true' '
|
test_expect_success "difftool ${opt} honors difftool.trustExitCode = true" "
|
||||||
test_config difftool.error.cmd false &&
|
test_config difftool.error.cmd false &&
|
||||||
test_config difftool.trustExitCode true &&
|
test_config difftool.trustExitCode true &&
|
||||||
test_must_fail git difftool -y -t error branch
|
test_must_fail git difftool ${opt} -y -t error branch
|
||||||
'
|
"
|
||||||
|
|
||||||
test_expect_success 'difftool honors difftool.trustExitCode = false' '
|
test_expect_success "difftool ${opt} honors difftool.trustExitCode = false" "
|
||||||
test_config difftool.error.cmd false &&
|
test_config difftool.error.cmd false &&
|
||||||
test_config difftool.trustExitCode false &&
|
test_config difftool.trustExitCode false &&
|
||||||
git difftool -y -t error branch
|
git difftool ${opt} -y -t error branch
|
||||||
'
|
"
|
||||||
|
|
||||||
test_expect_success 'difftool ignores exit code with --no-trust-exit-code' '
|
test_expect_success "difftool ${opt} ignores exit code with --no-trust-exit-code" "
|
||||||
test_config difftool.error.cmd false &&
|
test_config difftool.error.cmd false &&
|
||||||
test_config difftool.trustExitCode true &&
|
test_config difftool.trustExitCode true &&
|
||||||
git difftool -y --no-trust-exit-code -t error branch
|
git difftool ${opt} -y --no-trust-exit-code -t error branch
|
||||||
'
|
"
|
||||||
|
|
||||||
test_expect_success 'difftool stops on error with --trust-exit-code' '
|
test_expect_success "difftool ${opt} stops on error with --trust-exit-code" "
|
||||||
test_when_finished "rm -f for-diff .git/fail-right-file" &&
|
test_when_finished 'rm -f for-diff .git/fail-right-file' &&
|
||||||
test_when_finished "git reset -- for-diff" &&
|
test_when_finished 'git reset -- for-diff' &&
|
||||||
write_script .git/fail-right-file <<-\EOF &&
|
write_script .git/fail-right-file <<-\EOF &&
|
||||||
echo failed
|
echo failed
|
||||||
exit 1
|
exit 1
|
||||||
EOF
|
EOF
|
||||||
>for-diff &&
|
>for-diff &&
|
||||||
git add for-diff &&
|
git add for-diff &&
|
||||||
test_must_fail git difftool -y --trust-exit-code \
|
test_must_fail git difftool ${opt} -y --trust-exit-code \
|
||||||
--extcmd .git/fail-right-file branch >actual &&
|
--extcmd .git/fail-right-file branch >actual &&
|
||||||
test_line_count = 1 actual
|
test_line_count = 1 actual
|
||||||
'
|
"
|
||||||
|
|
||||||
test_expect_success 'difftool honors exit status if command not found' '
|
test_expect_success "difftool ${opt} honors exit status if command not found" "
|
||||||
test_config difftool.nonexistent.cmd i-dont-exist &&
|
test_config difftool.nonexistent.cmd i-dont-exist &&
|
||||||
test_config difftool.trustExitCode false &&
|
test_config difftool.trustExitCode false &&
|
||||||
test_must_fail git difftool -y -t nonexistent branch
|
if test "${opt}" = '--dir-diff'
|
||||||
'
|
then
|
||||||
|
expected_code=127
|
||||||
|
else
|
||||||
|
expected_code=128
|
||||||
|
fi &&
|
||||||
|
test_expect_code \${expected_code} git difftool ${opt} -y -t nonexistent branch
|
||||||
|
"
|
||||||
|
done
|
||||||
|
|
||||||
test_expect_success 'difftool honors --gui' '
|
test_expect_success 'difftool honors --gui' '
|
||||||
difftool_test_setup &&
|
difftool_test_setup &&
|
||||||
|
|
Loading…
Reference in New Issue