summaryrefslogtreecommitdiff
path: root/git-difftool--helper.sh
diff options
context:
space:
mode:
authorJohn Keeping <john@keeping.me.uk>2016-08-15 21:54:39 (GMT)
committerJunio C Hamano <gitster@pobox.com>2016-08-15 22:24:05 (GMT)
commit45a4f5d9f99334151af90b2199004ec49a651d7a (patch)
tree578d5f3d91b2729173c3460d0332c0f3cf448e15 /git-difftool--helper.sh
parente0c1ceafc5bece92d35773a75fff59497e1d9bd5 (diff)
downloadgit-45a4f5d9f99334151af90b2199004ec49a651d7a.zip
git-45a4f5d9f99334151af90b2199004ec49a651d7a.tar.gz
git-45a4f5d9f99334151af90b2199004ec49a651d7a.tar.bz2
difftool: always honor fatal error exit codes
At the moment difftool's "trust exit code" logic always suppresses the exit status of the diff utility we invoke. This is useful because we don't want to exit just because diff returned "1" because the files differ, but it's confusing if the shell returns an error because the selected diff utility is not found. POSIX specifies 127 as the exit status for "command not found", 126 for "command found but is not executable" and values greater than 128 if the command terminated because it received a signal [1] and at least bash and dash follow this specification, while diff utilities generally use "1" for the exit status we want to ignore. Handle any value of 126 or greater as a special value indicating that some form of fatal error occurred. [1] http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_08_02 Signed-off-by: John Keeping <john@keeping.me.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-difftool--helper.sh')
-rwxr-xr-xgit-difftool--helper.sh7
1 files changed, 7 insertions, 0 deletions
diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh
index 84d6cc0..7bfb673 100755
--- a/git-difftool--helper.sh
+++ b/git-difftool--helper.sh
@@ -86,6 +86,13 @@ else
do
launch_merge_tool "$1" "$2" "$5"
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 "$status" != 0 &&
test "$GIT_DIFFTOOL_TRUST_EXIT_CODE" = true
then