summaryrefslogtreecommitdiff
path: root/t/helper/test-pkt-line.c
diff options
context:
space:
mode:
authorLibravatar Phillip Wood <phillip.wood@dunelm.org.uk>2021-12-09 10:30:00 +0000
committerLibravatar Junio C Hamano <gitster@pobox.com>2021-12-09 13:24:05 -0800
commiteb893525041a53b968a46000ed5cb66ffc725853 (patch)
treecae4052094860f5ad8b06c4e6534b3d37790f65b /t/helper/test-pkt-line.c
parentdiff --color-moved=zebra: fix alternate coloring (diff)
downloadtgif-eb893525041a53b968a46000ed5cb66ffc725853.tar.xz
diff --color-moved: avoid false short line matches and bad zebra coloring
When marking moved lines it is possible for a block of potential matched lines to extend past a change in sign when there is a sequence of added lines whose text matches the text of a sequence of deleted and added lines. Most of the time either `match` will be NULL or `pmb_advance_or_null()` will fail when the loop encounters a change of sign but there are corner cases where `match` is non-NULL and `pmb_advance_or_null()` successfully advances the moved block despite the change in sign. One consequence of this is highlighting a short line as moved when it should not be. For example -moved line # Correctly highlighted as moved +short line # Wrongly highlighted as moved context +moved line # Correctly highlighted as moved +short line context -short line The other consequence is coloring a moved addition following a moved deletion in the wrong color. In the example below the first "+moved line 3" should be highlighted as newMoved not newMovedAlternate. -moved line 1 # Correctly highlighted as oldMoved -moved line 2 # Correctly highlighted as oldMovedAlternate +moved line 3 # Wrongly highlighted as newMovedAlternate context # Everything else is highlighted correctly +moved line 2 +moved line 3 context +moved line 1 -moved line 3 These false matches are more likely when using --color-moved-ws with the exception of --color-moved-ws=allow-indentation-change which ties the sign of the current whitespace delta to the sign of the line to avoid this problem. The fix is to check that the sign of the new line being matched is the same as the sign of the line that started the block of potential matches. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/helper/test-pkt-line.c')
0 files changed, 0 insertions, 0 deletions