From: D. Ben Knoble Date: Mon, 10 Nov 2025 23:58:29 GMT Subject: Re: [PATCH v2] diff: disable rename detection with --quiet Message-ID: In-Reply-To: <916cf3cc-185f-447d-845d-a65eddee4a36@web.de> On Sun, Nov 9, 2025 at 1:35 PM René Scharfe wrote: > > On 11/9/25 6:34 PM, D. Ben Knoble wrote: > > On Sun, Nov 9, 2025 at 11:43 AM René Scharfe wrote: > >> > >> This actually fixes the error code when using the options --cached, > >> --find-copies-harder, --no-ext-diff and --quiet together: > >> run_diff_index() indirectly calls diff-lib.c::show_modified(), which > >> queues even non-modified entries using diff_change() because we need > >> them for copy detection. diff_change() sets flags.has_changes, though, > >> which causes diff_can_quit_early() to declare we're done after seeing > >> only the very first entry -- way too soon. > > > > This does describe the behavior I saw, but it seems to me that, if we > > have changes, then we ought to be able to quit early for --quiet, no? > > > > So there's some other knock-on effect that causes quitting early to be > > wrong here, and I'm not exactly sure what it is (other than the diff > > queues being different sizes when we hit relevant parts of > > diffcore_std, though it's the working case that has the larger queue). > > So I'm having a hard time tying this paragraph to the actual issue > > (mostly due to my complete unfamiliarity with the diffing subsystem). > > run_diff_index() calls diff-lib.c::diff_cache() to queue up index > entries. As mentioned above it only queues up the very first one, no > matter if it's a change or not. In Git's repo this would be > .cirrus.yml. That's not the end of it, yet, though. It then calls > diffcore_std(), which calls diffcore_rename() to remove non-changes > from the queue and overwrites flags.has_changes based on whether the > queue is empty now. > > René > Thanks, btw. Still try to absorb this part of the code, but this helps :) -- D. Ben Knoble