Subject: git diff --exit-code does not honour textconv setting

From: Georg Pichler <[email-masked]>
Date: Sun, 20 Mar 2016 13:43:53 +0100

Hi,

I realized that "git diff --exit-code" does not honour textconv settings.
Maybe this behaviour is desired. It can be partially circumvented by using the "-b" flag if one does not care about whitespace changes.
To reproduce this, create an empty repository and run the following commands:

(I was using git version 2.7.3)

$ git config --add diff.void.textconv test
$ echo "foo diff=void" >.gitattributes
$ echo foo >foo
$ git add . && git commit -m "Init"
[master (root-commit) 70c39d9] Init
2 files changed, 2 insertions(+)
create mode 100644 .gitattributes
create mode 100644 foo
$ echo bar >foo
$ git status
On branch master
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)

modified: foo

no changes added to commit (use "git add" and/or "git commit -a")
$ git diff
$ git diff --exit-code
[exits with 1, no output]
$ git diff --exit-code -b
[exits with 0, no output]

The "test" command is used as it does not generate any output on stdout.

I would expect "git diff --exit-code" to return with exit code 0. If this is not desired, it should be clearly stated in the man page,
that "--exit-code" does not honour the textconv setting, except if "-b" is given. Currently this is not clear:

       --exit-code
           Make the program exit with codes similar to diff(1). That is, it exits
           with 1 if there were differences and 0 means no differences.

Best,
Georg Pichler