1
0
Fork 0
mirror of https://github.com/git/git.git synced 2024-05-26 00:06:16 +02:00

gitweb: Extract print_sidebyside_diff_lines()

Currently, print_sidebyside_diff_chunk() does two things: it
accumulates diff lines and prints them.  Accumulation may be used to
perform additional operations on diff lines, so it makes sense to split
these two things.  Thus, whole code that formats and prints diff lines
in the 'side-by-side' manner is moved out of print_sidebyside_diff_chunk()
to a separate subroutine and two conditions that control printing
diff liens are merged.

Thanks to that, we can easily (in later patches) replace call to that
subroutine with a call to more generic print_diff_lines() that will
control whether 'inline' or 'side-by-side' diff should be printed.

As a side effect, context lines are printed just before printing added
and removed lines, and at the end of chunk (previously, they were
printed immediately on the class change).  However, this doesn't change
gitweb output.

The outcome of this patch is that print_sidebyside_diff_chunk() is now
much shorter and easier to read.

While at it, drop the '# assume that it is change' comment.  According
to Jakub Narębski:

	What I meant here when I was writing it that they are lines that
	changed between two versions, like '!' in original (not unified)
	context format.

	We can omit this comment.

Signed-off-by: Michał Kiedrowicz <michal.kiedrowicz@gmail.com>
Acked-by: Jakub Narębski <jnareb@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Michał Kiedrowicz 2012-04-11 23:18:40 +02:00 committed by Junio C Hamano
parent 9768a9d884
commit d21102c9ff

View File

@ -5002,6 +5002,52 @@ sub git_difftree_body {
print "</table>\n";
}
# Print context lines and then rem/add lines in a side-by-side manner.
sub print_sidebyside_diff_lines {
my ($ctx, $rem, $add) = @_;
# print context block before add/rem block
if (@$ctx) {
print join '',
'<div class="chunk_block ctx">',
'<div class="old">',
@$ctx,
'</div>',
'<div class="new">',
@$ctx,
'</div>',
'</div>';
}
if (!@$add) {
# pure removal
print join '',
'<div class="chunk_block rem">',
'<div class="old">',
@$rem,
'</div>',
'</div>';
} elsif (!@$rem) {
# pure addition
print join '',
'<div class="chunk_block add">',
'<div class="new">',
@$add,
'</div>',
'</div>';
} else {
print join '',
'<div class="chunk_block chg">',
'<div class="old">',
@$rem,
'</div>',
'<div class="new">',
@$add,
'</div>',
'</div>';
}
}
sub print_sidebyside_diff_chunk {
my @chunk = @_;
my (@ctx, @rem, @add);
@ -5028,51 +5074,11 @@ sub print_sidebyside_diff_chunk {
next;
}
## print from accumulator when type of class of lines change
# empty contents block on start rem/add block, or end of chunk
if (@ctx && (!$class || $class eq 'rem' || $class eq 'add')) {
print join '',
'<div class="chunk_block ctx">',
'<div class="old">',
@ctx,
'</div>',
'<div class="new">',
@ctx,
'</div>',
'</div>';
@ctx = ();
}
# empty add/rem block on start context block, or end of chunk
if ((@rem || @add) && (!$class || $class eq 'ctx')) {
if (!@add) {
# pure removal
print join '',
'<div class="chunk_block rem">',
'<div class="old">',
@rem,
'</div>',
'</div>';
} elsif (!@rem) {
# pure addition
print join '',
'<div class="chunk_block add">',
'<div class="new">',
@add,
'</div>',
'</div>';
} else {
# assume that it is change
print join '',
'<div class="chunk_block chg">',
'<div class="old">',
@rem,
'</div>',
'<div class="new">',
@add,
'</div>',
'</div>';
}
@rem = @add = ();
## print from accumulator when have some add/rem lines or end
# of chunk (flush context lines)
if (!$class || ((@rem || @add) && $class eq 'ctx')) {
print_sidebyside_diff_lines(\@ctx, \@rem, \@add);
@ctx = @rem = @add = ();
}
## adding lines to accumulator