From 6463fd7ed189f4100e1102062f29b969384f1436 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Mon, 13 Feb 2012 17:33:10 -0500 Subject: [PATCH] diff-highlight: refactor to prepare for multi-line hunks The current code structure assumes that we will only look at a pair of lines at any given time, and that the end result should always be to output that pair. However, we want to eventually handle multi-line hunks, which will involve collating pairs of removed/added lines. Let's refactor the code to return highlighted pairs instead of printing them. Signed-off-by: Jeff King Signed-off-by: Junio C Hamano --- contrib/diff-highlight/diff-highlight | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/contrib/diff-highlight/diff-highlight b/contrib/diff-highlight/diff-highlight index 0d8df84a20..279d21181e 100755 --- a/contrib/diff-highlight/diff-highlight +++ b/contrib/diff-highlight/diff-highlight @@ -23,7 +23,7 @@ while (<>) { $window[2] =~ /^$COLOR*\+/ && $window[3] !~ /^$COLOR*\+/) { print shift @window; - show_pair(shift @window, shift @window); + show_hunk(shift @window, shift @window); } else { print shift @window; @@ -48,7 +48,7 @@ if (@window == 3 && $window[1] =~ /^$COLOR*-/ && $window[2] =~ /^$COLOR*\+/) { print shift @window; - show_pair(shift @window, shift @window); + show_hunk(shift @window, shift @window); } # And then flush any remaining lines. @@ -58,7 +58,13 @@ while (@window) { exit 0; -sub show_pair { +sub show_hunk { + my ($a, $b) = @_; + + print highlight_pair($a, $b); +} + +sub highlight_pair { my @a = split_line(shift); my @b = split_line(shift); @@ -106,12 +112,12 @@ sub show_pair { } if (is_pair_interesting(\@a, $pa, $sa, \@b, $pb, $sb)) { - print highlight(\@a, $pa, $sa); - print highlight(\@b, $pb, $sb); + return highlight_line(\@a, $pa, $sa), + highlight_line(\@b, $pb, $sb); } else { - print join('', @a); - print join('', @b); + return join('', @a), + join('', @b); } } @@ -121,7 +127,7 @@ sub split_line { split /($COLOR*)/; } -sub highlight { +sub highlight_line { my ($line, $prefix, $suffix) = @_; return join('',