Skip to content

Commit

Permalink
gitweb: Push formatting diff lines to print_diff_chunk()
Browse files Browse the repository at this point in the history
Now lines are formatted closer to place where we actually use HTML
formatted output.

This means that we put raw lines in the @chunk accumulator, rather than
formatted lines.  Because we still need to know class (type) of line
when accumulating data to post-process and print, process_diff_line()
subroutine was retired and replaced by diff_line_class() used in
git_patchset_body() and new restructured format_diff_line() used in
print_diff_chunk().

As a side effect, we have to pass \%from and \%to down to callstack.

This is a preparation patch for diff refinement highlightning. It's not
meant to change gitweb output.

[jn: wrote commit message]

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>
  • Loading branch information
Michał Kiedrowicz authored and Junio C Hamano committed Apr 11, 2012
1 parent 44185f9 commit f4a8102
Showing 1 changed file with 18 additions and 19 deletions.
37 changes: 18 additions & 19 deletions gitweb/gitweb.perl
Original file line number Diff line number Diff line change
Expand Up @@ -2430,26 +2430,26 @@ sub format_cc_diff_chunk_header {
}

# process patch (diff) line (not to be used for diff headers),
# returning class and HTML-formatted (but not wrapped) line
sub process_diff_line {
my $line = shift;
my ($from, $to) = @_;

my $diff_class = diff_line_class($line, $from, $to);
# returning HTML-formatted (but not wrapped) line
sub format_diff_line {
my ($line, $diff_class, $from, $to) = @_;

chomp $line;
$line = untabify($line);

if ($from && $to && $line =~ m/^\@{2} /) {
$line = format_unidiff_chunk_header($line, $from, $to);
return $diff_class, $line;

} elsif ($from && $to && $line =~ m/^\@{3}/) {
$line = format_cc_diff_chunk_header($line, $from, $to);
return $diff_class, $line;

} else {
$line = esc_html($line, -nbsp=>1);
}
return $diff_class, esc_html($line, -nbsp=>1);

my $diff_classes = "diff";
$diff_classes .= " $diff_class" if ($diff_class);
$line = "<div class=\"$diff_classes\">$line</div>\n";

return $line;
}

# Generates undef or something like "_snapshot_" or "snapshot (_tbz2_ _zip_)",
Expand Down Expand Up @@ -5068,7 +5068,7 @@ sub print_diff_lines {
}

sub print_diff_chunk {
my ($diff_style, $is_combined, @chunk) = @_;
my ($diff_style, $is_combined, $from, $to, @chunk) = @_;
my (@ctx, @rem, @add);

# The class of the previous line.
Expand All @@ -5090,6 +5090,8 @@ sub print_diff_chunk {
foreach my $line_info (@chunk) {
my ($class, $line) = @$line_info;

$line = format_diff_line($line, $class, $from, $to);

# print chunk headers
if ($class && $class eq 'chunk_header') {
print $line;
Expand Down Expand Up @@ -5243,22 +5245,19 @@ sub git_patchset_body {

next PATCH if ($patch_line =~ m/^diff /);

my ($class, $line) = process_diff_line($patch_line, \%from, \%to);
my $diff_classes = "diff";
$diff_classes .= " $class" if ($class);
$line = "<div class=\"$diff_classes\">$line</div>\n";
my $class = diff_line_class($patch_line, \%from, \%to);

if ($class eq 'chunk_header') {
print_diff_chunk($diff_style, $is_combined, @chunk);
print_diff_chunk($diff_style, $is_combined, \%from, \%to, @chunk);
@chunk = ();
}

push @chunk, [ $class, $line ];
push @chunk, [ $class, $patch_line ];
}

} continue {
if (@chunk) {
print_diff_chunk($diff_style, $is_combined, @chunk);
print_diff_chunk($diff_style, $is_combined, \%from, \%to, @chunk);
@chunk = ();
}
print "</div>\n"; # class="patch"
Expand Down

0 comments on commit f4a8102

Please sign in to comment.