git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git diff --exit-code misbehaving in 2.46.x

From
René Scharfe <l.s.r@web.de>
Date
Sep 25, 2024, 18:06 UTC
Message-ID
<161b4e83-0aa5-4b98-a1c7-b6e1070629d1@web.de>
In-Reply-To
<xmqqbk0bpt5e.fsf@gitster.g>
Am 25.09.24 um 18:58 schrieb Junio C Hamano:
Show 24 quoted lines
> René Scharfe <l.s.r@web.de> writes:
>
>> Am 25.09.24 um 16:27 schrieb Jan Wendland:
>>>
>>> git diff --exit-code in 2.46.x is unexpectedly returning a zero exit
>>> code for files marked as binary in .gitattributes where 2.45.x would
>>> correctly produce a non-zero exit code.
>>> ...
>> Thanks for the report!  This is a known bug.  The "next" branch contains
>> a fix, 9a41735af6 (diff: report modified binary files as changes in
>> builtin_diff(), 2024-09-21).
>
> I just noticed something curious.
>
> 9a41735a (diff: report modified binary files as changes in
> builtin_diff(), 2024-09-21) explains that since 1aaf69e6 (diff:
> shortcut for diff'ing two binary SHA-1 objects, 2014-08-16) added
> binary comparison, the code path always used a quick hash-only
> comparison.  But the above report claims it is a behaviour change
> between 2.45 and 2.46.
>
> It does seem to say things are different with 2.45 when binary
> changes were checked with --quiet/--exit-code from my manual
> testing, though.

There are levels: If the flag diff_from_contents is disabled, diff just compares hashes (and other meta data). If diff_from_contents is enabled, it compares file contents as well. But not for binary files, since 1aaf69e6 (diff: shortcut for diff'ing two binary SHA-1 objects, 2014-08-16).

The shortcut exempts binary files from diff_from_contents. But it forgot to report changes for exit code calculation. So git diff with an option that turns on diff_from_contents (e.g. "git diff -b -q") has not been reporting a modified binary file since then.

d7b97b7185 (diff: let external diffs report that changes are uninteresting, 2024-06-09) enabled diff_from_contents by default, exposing the bug much more widely in 2.46.0.

René
Previous: Junio C Hamano
Message 4 of 4 in “git diff --exit-code misbehaving in 2.46.x”
  1. Jan WendlandSep 25, 2024
  2. René ScharfeSep 25, 2024
  3. Junio C HamanoSep 25, 2024
  4. René ScharfeSep 25, 2024

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.