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>
15 lines
344 B
Bash
Executable File
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
|