# bug report - `git diff --quiet --cached` returns 0 when a rename is staged

2 messages from 2024-09-06 to 2024-09-08. Participants: Jorge Luis Martinez Gomez, René Scharfe.
Thread: https://gitlist.dev/t/62076

## Jorge Luis Martinez Gomez, 2024-09-06 23:12

Subject: bug report - `git diff --quiet --cached` returns 0 when a rename is staged
Message-ID: <0241cbcc-11b3-483a-8a63-d523291b92ff@app.fastmail.com>
URL: https://gitlist.dev/e/0241cbcc-11b3-483a-8a63-d523291b92ff%40app.fastmail.com

```
Thank you for filling out a Git bug report!
Please answer the following questions to help us understand your issue.

What did you do before the bug happened? (Steps to reproduce your issue)

  $ mkdir /tmp/git-diff-test; cd /tmp/git-diff-test
  $ git init 
  Initialized empty Git repository in /tmp/git-diff-test/.git/
  $ touch foo 
  $ git add foo 
  $ git commit -m "foo"
  [main (root-commit) f60d7bc] foo
   1 file changed, 0 insertions(+), 0 deletions(-)
   create mode 100644 foo
  $ mv foo bar 
  $ git status -s
   D foo
  ?? bar
  $ git add foo bar 
  $ git status -s
  R  foo -> bar
  $ git diff --quiet --cached; echo $?
  0
  $ git diff --quiet --cached --no-renames; echo $?
  1

What did you expect to happen? (Expected behavior)

  Versions prior to commit d7b97b7185521e3b9364b3abc6553df2480da173
  returned 1 for `git diff --quiet --cached`.

What happened instead? (Actual behavior)

  It returned 0.

What's different between what you expected and what actually happened?

  The status code.

Anything else you want to add:

  This bug report originates from a PR I filed with Magit here:

  https://github.com/magit/magit/pull/5221

  I thought this difference between using `--no-renames` and not made
  sense, so I thought the problem lied with Magit. However, like tarsius in
  that thread points out, this is a change that happened recently with git
  and it's not in the release notes. After finding the commit that
  introduces the change, I see the message mentions "The new options are
  off by default, keeping the old behavior." It really doesn't seem
  intentional, so here's a bug report.

  Also, the above difference with --no-renames also happens if I move my
  ~/.gitconfig elsewhere, so there's no use of external diff tools. I
  verified that with strace, too.

Please review the rest of the bug report below.
You can delete any lines you don't wish to share.


[System Info]
git version:
git version 2.46.0
cpu: x86_64
no commit associated with this build
sizeof-long: 8
sizeof-size_t: 8
shell-path: /bin/sh
libcurl: 8.9.0
OpenSSL: OpenSSL 3.3.1 4 Jun 2024
zlib: 1.3.1
uname: Linux 6.10.6-arch1-1 #1 SMP PREEMPT_DYNAMIC Mon, 19 Aug 2024 17:02:39 +0000 x86_64
compiler info: gnuc: 14.1
libc info: glibc: 2.40
$SHELL (typically, interactive shell): /usr/bin/zsh


[Enabled Hooks]

-- 
  Jorge Luis Martinez Gomez
  jol@jol.dev

```

## René Scharfe, 2024-09-08 07:04

Subject: Re: bug report - `git diff --quiet --cached` returns 0 when a rename is staged
Message-ID: <b21d74b6-aa51-474a-a8be-40dc1de94bc3@web.de>
URL: https://gitlist.dev/e/b21d74b6-aa51-474a-a8be-40dc1de94bc3%40web.de
In-Reply-To: <0241cbcc-11b3-483a-8a63-d523291b92ff@app.fastmail.com>

```
Am 07.09.24 um 01:12 schrieb Jorge Luis Martinez Gomez:
> Thank you for filling out a Git bug report!
> Please answer the following questions to help us understand your issue.
>
> What did you do before the bug happened? (Steps to reproduce your issue)
>
>   $ mkdir /tmp/git-diff-test; cd /tmp/git-diff-test
>   $ git init
>   Initialized empty Git repository in /tmp/git-diff-test/.git/
>   $ touch foo
>   $ git add foo
>   $ git commit -m "foo"
>   [main (root-commit) f60d7bc] foo
>    1 file changed, 0 insertions(+), 0 deletions(-)
>    create mode 100644 foo
>   $ mv foo bar
>   $ git status -s
>    D foo
>   ?? bar
>   $ git add foo bar
>   $ git status -s
>   R  foo -> bar
>   $ git diff --quiet --cached; echo $?
>   0
>   $ git diff --quiet --cached --no-renames; echo $?
>   1
>
> What did you expect to happen? (Expected behavior)
>
>   Versions prior to commit d7b97b7185521e3b9364b3abc6553df2480da173
>   returned 1 for `git diff --quiet --cached`.

Thanks a lot for the reproduction recipe and for bisecting it!

> What happened instead? (Actual behavior)
>
>   It returned 0.
>
> What's different between what you expected and what actually happened?
>
>   The status code.
>
> Anything else you want to add:
>
>   This bug report originates from a PR I filed with Magit here:
>
>   https://github.com/magit/magit/pull/5221
>
>   I thought this difference between using `--no-renames` and not made
>   sense, so I thought the problem lied with Magit. However, like tarsius in
>   that thread points out, this is a change that happened recently with git
>   and it's not in the release notes. After finding the commit that
>   introduces the change, I see the message mentions "The new options are
>   off by default, keeping the old behavior." It really doesn't seem
>   intentional, so here's a bug report.

Indeed, that's a bug.  Affects copies as well.  And could be triggered by
e.g. --ignore-space-change or --ignore-matching-lines before, like the
submodule diff regression reported earlier.

René


```
