Re: [PATCH v2] diff-index: don't queue unchanged filepairs with diff_change()
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Nov 30, 2025, 18:02 UTC
- Message-ID
- <xmqq5xarcsb8.fsf@gitster.g>
- In-Reply-To
- <aa28974b-ec73-4562-bfc8-4745ad58b55a@web.de>
René Scharfe <l.s.r@web.de> writes:
Show 17 quoted lines
> Add a new streamlined function for queuing unchanged filepairs and > use it in show_modified(), which is called by diff_cache() via > oneway_diff() and do_oneway_diff(). It allocates only a single filespec > for each filepair and uses it twice with reference counting. This has a > measurable effect if there are a lot of them, like in the Linux repo: > > Benchmark 1: ./git_v2.52.0 -C ../linux diff --cached --find-copies-harder > Time (mean ± σ): 31.8 ms ± 0.2 ms [User: 24.2 ms, System: 6.3 ms] > Range (min … max): 31.5 ms … 32.3 ms 85 runs > > Benchmark 2: ./git -C ../linux diff --cached --find-copies-harder > Time (mean ± σ): 23.9 ms ± 0.2 ms [User: 18.1 ms, System: 4.6 ms] > Range (min … max): 23.5 ms … 24.4 ms 111 runs > > Summary > ./git -C ../linux diff --cached --find-copies-harder ran > 1.33 ± 0.01 times faster than ./git_v2.52.0 -C ../linux diff --cached --find-copies-harder
Nice. Is this technique only applicable to diff-index among the three diff plumbing siblings? I suspect diff-files is an oddball in that on the working tree side we do not necessarily have the blob object names, but it would apply to diff-tree, wouldn't it?
Will queue. Thanks.