git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* diff --cached --no-ext-diff --find-copies-harder --quiet exits with wrong status code
@ 2025-11-08 19:05 D. Ben Knoble
  2025-11-08 19:08 ` D. Ben Knoble
                   ` (2 more replies)
  0 siblings, 3 replies; 15+ messages in thread
From: D. Ben Knoble @ 2025-11-08 19:05 UTC (permalink / raw)
  To: Git

AFAICT, you need all of the mentioned options to trigger the bug.
Allowing ext-diff works fine, I don't think it's triggered in
non-cached diffs, and I've never seen it without --find-copies-harder.
Notably, s/quiet/exit-code works just fine.

Here's a repro from git.git:

    cp git{,1}.c
    git add git1.c
    git diff --cached --no-ext-diff --quiet --find-copies-harder &&
echo 'this should exit 1!'

(And of course, ^quiet^exit-code if your shell supports it yields a
different outcome)

Context: my distro applies a patch that allows
diff.renames=copies-harder. In a repo with that turned on,
git-prompt.sh stopped showing some staged changes.  Turns out it runs
git diff with all these flags (less --find-copies-harder, which is
enabled by the config option). I _have_ confirmed this bug exists in
unpatched Git, however.

Some rough debugging notes: when entering diffcore_std (or
diffcore_rename_extended's cleanup loop):
- for exit-code, diff_queued_diff.nr matches "git ls-files :/ | wc -l"
- for quiet, it's just 1 (the first file listed by git ls-files :/, AFAICT)
The only other obvious difference I spotted is that the "quick" flag
is turned on for quiet, which makes sense.

I tried to figure out who builds the queue, and it looks like it's
diff_cache -> unpack_trees -> ..., where at some point for exit-code
we _keep_ queuing files, but for quiet we don't.

I also saw diff_cache tweaks opts.diff_index_cached based on
--find-copies-harder, but I haven't looked further to see how that
affects things or what the interaction with ext-diff is.

Help welcome, thanks.

-- 
D. Ben Knoble

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2025-11-23  7:09 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-08 19:05 diff --cached --no-ext-diff --find-copies-harder --quiet exits with wrong status code D. Ben Knoble
2025-11-08 19:08 ` D. Ben Knoble
2025-11-08 19:12   ` D. Ben Knoble
2025-11-09 12:11 ` [PATCH] diff: disabled quick optimization with --find-copies-harder René Scharfe
2025-11-09 14:18   ` Phillip Wood
2025-11-09 16:43     ` René Scharfe
2025-11-09 16:43 ` [PATCH v2] diff: disable rename detection with --quiet René Scharfe
2025-11-09 17:34   ` D. Ben Knoble
2025-11-09 18:35     ` René Scharfe
2025-11-10 23:58       ` D. Ben Knoble
2025-11-10  9:42     ` Phillip Wood
2025-11-10 17:54   ` Jeff King
2025-11-10 19:13     ` Junio C Hamano
2025-11-22 21:44     ` René Scharfe
2025-11-23  7:09       ` Junio C Hamano

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).