difftool: always honor fatal error exit codes
authorJohn Keeping <john@keeping.me.uk>
Mon, 15 Aug 2016 21:54:39 +0000 (22:54 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Aug 2016 22:24:05 +0000 (15:24 -0700)
commit45a4f5d9f99334151af90b2199004ec49a651d7a
tree578d5f3d91b2729173c3460d0332c0f3cf448e15
parente0c1ceafc5bece92d35773a75fff59497e1d9bd5
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>
git-difftool--helper.sh
t/t7800-difftool.sh