combine-diff.c: Fix output when changes are exactly 3 lines apart
commitaac385717a62bfa6889151d191e08b9725587912
authorMatthijs Kooijman <matthijs@stdin.nl>
Wed, 15 May 2013 17:42:14 +0000 (15 19:42 +0200)
committerJunio C Hamano <gitster@pobox.com>
Wed, 15 May 2013 19:02:04 +0000 (15 12:02 -0700)
treed2362155ed20a4601e69b244894039b376bb22de
parent15999998fbda60552742275570947431b57108ae
combine-diff.c: Fix output when changes are exactly 3 lines apart

When a deletion is followed by exactly 3 (or whatever the number of
context lines) unchanged lines, followed by another change, the combined
diff output would hide the first deletion, resulting in a malformed
diff.

This happened because the 3 lines before each change are painted
interesting, but also marked as no_pre_delete to prevent showing deletes
that were previously marked as uninteresting. This behaviour was
introduced in c86fbe53 (diff -c/--cc: do not include uninteresting
deletion before leading context). However, as a side effect, this could
also mark deletes that were already interesting as no_pre_delete. This
would happen only if the delete was exactly 3 lines away from the next
change, since lines farther away would not be touched by the "paint
three lines before the change" code and lines closer would be painted
by the "merge two adjacent hunks" code instead, which does not set the
no_pre_delete flag.

This commit fixes this problem by only setting the no_pre_delete flag
for changes that were previously uninteresting.

Signed-off-by: Matthijs Kooijman <matthijs@stdin.nl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
combine-diff.c
t/t4038-diff-combined.sh