Files
git/t/t4071-diff-minimal.sh
Niels Glodny 03f2915541 xdiff: disable cleanup_records heuristic with --minimal
The cleanup_records function marks some lines as changed before running
the actual diff algorithm. For most lines, this is a good performance
optimization, but it also marks lines that are surrounded by many
changed lines as changed as well. This can cause redundant changes and
longer-than-necessary diffs.

Whether this results in better-looking diffs is subjective. However, the
--minimal flag explicitly requests the shortest possible diff.

The change results in shorter diffs in about 1.3% of all diffs in Git's
history. Performance wise, I have measured the impact on
"git log -p -3000 --minimal > /dev/null". With this change, I get
  Time (mean ± σ): 2.363 s ±  0.023 s (25 runs)
and without this patch I measured
  Time (mean ± σ): 2.362 s ±  0.035 s (25 runs).
As the difference is well within the margin of error, this does not seem
to have an impact on performance.

Signed-off-by: Niels Glodny <n.glodny@campus.lmu.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2025-04-29 12:46:58 -07:00

15 lines
344 B
Bash
Executable File

#!/bin/sh
test_description='minimal diff algorithm'
. ./test-lib.sh
test_expect_success 'minimal diff should not mark changes between changed lines' '
test_write_lines x x x x >pre &&
test_write_lines x x x A B C D x E F G >post &&
test_expect_code 1 git diff --no-index --minimal pre post >diff &&
test_grep ! ^[+-]x diff
'
test_done