Skip to content

Commit bde42f0

Browse files
committed
Merge branch 'jk/difftool-command-not-found' into maint
"git difftool" by default ignores the error exit from the backend commands it spawns, because often they signal that they found differences by exiting with a non-zero status code just like "diff" does; the exit status codes 126 and above however are special in that they are used to signal that the command is not executable, does not exist, or killed by a signal. "git difftool" has been taught to notice these exit status codes. * jk/difftool-command-not-found: difftool: always honor fatal error exit codes
2 parents 7c96471 + 45a4f5d commit bde42f0

File tree

2 files changed

+13
-0
lines changed

2 files changed

+13
-0
lines changed

git-difftool--helper.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,13 @@ else
8686
do
8787
launch_merge_tool "$1" "$2" "$5"
8888
status=$?
89+
if test $status -ge 126
90+
then
91+
# Command not found (127), not executable (126) or
92+
# exited via a signal (>= 128).
93+
exit $status
94+
fi
95+
8996
if test "$status" != 0 &&
9097
test "$GIT_DIFFTOOL_TRUST_EXIT_CODE" = true
9198
then

t/t7800-difftool.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,12 @@ test_expect_success PERL 'difftool stops on error with --trust-exit-code' '
124124
test_cmp expect actual
125125
'
126126

127+
test_expect_success PERL 'difftool honors exit status if command not found' '
128+
test_config difftool.nonexistent.cmd i-dont-exist &&
129+
test_config difftool.trustExitCode false &&
130+
test_must_fail git difftool -y -t nonexistent branch
131+
'
132+
127133
test_expect_success PERL 'difftool honors --gui' '
128134
difftool_test_setup &&
129135
test_config merge.tool bogus-tool &&

0 commit comments

Comments
 (0)