diff-highlight: match multi-line hunks
authorJeff King <peff@peff.net>
Mon, 13 Feb 2012 22:36:36 +0000 (17:36 -0500)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Feb 2012 23:57:06 +0000 (15:57 -0800)
commit34d9819e0a387be6d49cffe67458036450d6d0d5
treed11fc079858328ca3ec4abe51f7a7cd48211c4b0
parent6463fd7ed189f4100e1102062f29b969384f1436
diff-highlight: match multi-line hunks

Currently we only bother highlighting single-line hunks. The
rationale was that the purpose of highlighting is to point
out small changes between two similar lines that are
otherwise hard to see. However, that meant we missed similar
cases where two lines were changed together, like:

   -foo(buf);
   -bar(buf);
   +foo(obj->buf);
   +bar(obj->buf);

Each of those changes is simple, and would benefit from
highlighting (the "obj->" parts in this case).

This patch considers whole hunks at a time. For now, we
consider only the case where the hunk has the same number of
removed and added lines, and assume that the lines from each
segment correspond one-to-one. While this is just a
heuristic, in practice it seems to generate sensible
results (especially because we now omit highlighting on
completely-changed lines, so when our heuristic is wrong, we
tend to avoid highlighting at all).

Based on an original idea and implementation by Michał
Kiedrowicz.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/diff-highlight/README
contrib/diff-highlight/diff-highlight