version 4.13, 2019/11/11 12:40:12 |
version 4.16, 2019/11/11 13:15:09 |
Line 103 use constant CVSWEBMARKUP => qr{^text/(x-cvsweb|vnd\.v |
|
Line 103 use constant CVSWEBMARKUP => qr{^text/(x-cvsweb|vnd\.v |
|
use constant LOG_FILESEPR => qr/^={77}$/o; |
use constant LOG_FILESEPR => qr/^={77}$/o; |
use constant LOG_REVSEPR => qr/^-{28}$/o; |
use constant LOG_REVSEPR => qr/^-{28}$/o; |
|
|
use constant HAS_EDIFF => eval { require String::Ediff; }; |
|
|
|
# ----------------------------------------------------------------------------- |
# ----------------------------------------------------------------------------- |
|
|
# All global initialization that can be done in compile time should go to |
# All global initialization that can be done in compile time should go to |
|
|
|
|
$HTML_META = <<EOM; |
$HTML_META = <<EOM; |
<meta name="robots" content="nofollow" /> |
<meta name="robots" content="nofollow" /> |
<meta name="generator" content="FreeBSD-CVSweb $VERSION" /> |
<meta name="generator" content="CVSweb $VERSION" /> |
<meta http-equiv="Content-Script-Type" content="text/javascript" /> |
<meta http-equiv="Content-Script-Type" content="text/javascript" /> |
<meta http-equiv="Content-Style-Type" content="text/css" /> |
<meta http-equiv="Content-Style-Type" content="text/css" /> |
EOM |
EOM |
Line 365 if (defined($ENV{QUERY_STRING})) { |
|
Line 363 if (defined($ENV{QUERY_STRING})) { |
|
$val = uri_unescape($val); |
$val = uri_unescape($val); |
$val =~ /([^a-zA-Z_01-9.\/-])/ and fatal('404 Not Found', |
$val =~ /([^a-zA-Z_01-9.\/-])/ and fatal('404 Not Found', |
'Invalid character "%s" in the value "%s" of the query parameter "%s"', |
'Invalid character "%s" in the value "%s" of the query parameter "%s"', |
$1, $value, $key); |
$1, $val, $key); |
} else { |
} else { |
$val = 1; |
$val = 1; |
} |
} |
|
|
<legend>General options</legend> |
<legend>General options</legend> |
<input type="hidden" name="copt" value="1" /> |
<input type="hidden" name="copt" value="1" /> |
EOF |
EOF |
for my $v qw(hidecvsroot hidenonreadable) { |
for my $v (qw(hidecvsroot hidenonreadable)) { |
printf(qq{<input type="hidden" name="%s" value="%s" />\n}, |
printf(qq{<input type="hidden" name="%s" value="%s" />\n}, |
$v, $input{$v} || 0); |
$v, $input{$v} || 0); |
} |
} |
|
|
} |
} |
} elsif ($state eq "PreChange") { # state eq "PreChange" |
} elsif ($state eq "PreChange") { # state eq "PreChange" |
# we got removes with subsequent adds |
# we got removes with subsequent adds |
if (HAS_EDIFF) { |
|
# construct the suffix tree |
|
my $left_diff = join("\n", @$leftColRef[0..$leftRow-1]); |
|
my $right_diff = join("\n", @$rightColRef[0..$rightRow-1]); |
|
my $diff_str = String::Ediff::ediff($left_diff, $right_diff); |
|
|
|
my @diff_str = split(/ /, $diff_str); |
|
my $INFINITY = 10000000; |
|
push(@diff_str, ($INFINITY) x 8); |
|
my ($idx, $b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2) = |
|
(0, @diff_str[0..7]); |
|
my ($l_cul, $r_cul) = (0, 0); |
|
my ($ldx, $rdx) = (0, 0); |
|
my (@left_html, @right_html); |
|
for (my $j = 0; $j < $leftRow; $j++) { |
|
my $line_len = length(@$leftColRef[$j]); |
|
my $line = @$leftColRef[$j]; |
|
$l_cul += length($line) + 1; # includes "\n" |
|
my $l_culx = $l_cul - 1; # not includes "\n" |
|
if ($j < $lb1) { |
|
$line = spacedHtmlText($line); |
|
push(@left_html, "<td class=\"diff diff-changed\">$line</td>"); |
|
} elsif ($lb1 == $j) { |
|
my $html_line; |
|
while ($lb1 == $j) { |
|
my $begin_char = $l_culx - $b1; |
|
|
|
$line =~ /^(.*)(.{$begin_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-unchanged">'; |
|
$line = $2; |
|
last if ($j != $le1); |
|
|
|
my $end_char = $l_culx - $e1; |
|
$line =~ /^(.*)(.{$end_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-changed">'; |
|
$line = $2; |
|
|
|
$idx++; |
|
my ($tb1, $te1, $tlb1, $tle1, $tb2, $te2, $tlb2, $tle2) = |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2); |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2) = |
|
@diff_str[$idx*8..($idx+1)*8-1]; |
|
$lb1 = $INFINITY if ($lb1 < 0); |
|
$lb2 = $INFINITY if ($lb2 < 0); |
|
$le1 = $INFINITY if ($le1 < 0); |
|
$le2 = $INFINITY if ($le2 < 0); |
|
if ($te1 > $b1) { |
|
($b1, $lb1) = ($te1, $tle1); |
|
} |
|
if ($te2 > $b2) { |
|
($b2, $lb2) = ($te2, $tle2); |
|
} |
|
} |
|
push(@left_html, |
|
sprintf('<td><span class="diff diff-changed">%s%s</span></td>', |
|
$html_line, spacedHtmlText($line))); |
|
} elsif ($le1 == $j) { |
|
my $html_line; |
|
while ($le1 == $j) { |
|
my $end_char = $l_culx - $e1; |
|
$line =~ /^(.*)(.{$end_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-changed">'; |
|
$line = $2; |
|
|
|
$idx++; |
|
my ($tb1, $te1, $tlb1, $tle1, $tb2, $te2, $tlb2, $tle2) = |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2); |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2) = |
|
@diff_str[$idx*8..($idx+1)*8-1]; |
|
$lb1 = $INFINITY if ($lb1 < 0); |
|
$lb2 = $INFINITY if ($lb2 < 0); |
|
$le1 = $INFINITY if ($le1 < 0); |
|
$le2 = $INFINITY if ($le2 < 0); |
|
if ($te1 > $b1) { |
|
($b1, $lb1) = ($te1, $tle1); |
|
} |
|
if ($te2 > $b2) { |
|
($b2, $lb2) = ($te2, $tle2); |
|
} |
|
|
|
last if ($lb1 != $j); |
|
|
|
my $begin_char = $l_culx - $b1; |
|
|
|
$line =~ /^(.*)(.{$begin_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-unchanged">'; |
|
$line = $2; |
|
} |
|
push(@left_html, |
|
sprintf('<td><span class="diff diff-unchanged">%s%s</span></td>', |
|
$html_line, spacedHtmlText($line))); |
|
} else { |
|
$line = spacedHtmlText($line); |
|
push(@left_html, "<td class=\"diff diff-unchanged\">$line</td>"); |
|
} |
|
} |
|
($idx, $b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2) = |
|
(0, @diff_str[0..7]); |
|
$lb1 = $INFINITY if ($lb1 < 0); |
|
$lb2 = $INFINITY if ($lb2 < 0); |
|
$le1 = $INFINITY if ($le1 < 0); |
|
$le2 = $INFINITY if ($le2 < 0); |
|
for (my $j = 0; $j < $rightRow; $j++) { |
|
my $line_len = length(@$rightColRef[$j]); |
|
my $line = @$rightColRef[$j]; |
|
$r_cul += length($line) + 1; # includes "\n" |
|
my $r_culx = $r_cul - 1; # not includes "\n" |
|
if ($j < $lb2) { |
|
$line = spacedHtmlText($line); |
|
push(@right_html, "<td class=\"diff diff-changed\">$line</td>"); |
|
} elsif ($lb2 == $j) { |
|
my $html_line; |
|
while ($lb2 == $j) { |
|
my $begin_char = $r_culx - $b2; |
|
|
|
$line =~ /^(.*)(.{$begin_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-unchanged">'; |
|
$line = $2; |
|
|
|
last if ($j != $le2); |
|
|
|
my $end_char = $r_culx - $e2; |
|
$line =~ /^(.*)(.{$end_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-changed">'; |
|
$line = $2; |
|
|
|
$idx++; |
|
my ($tb1, $te1, $tlb1, $tle1, $tb2, $te2, $tlb2, $tle2) = |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2); |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2) = |
|
@diff_str[$idx*8..($idx+1)*8-1]; |
|
$lb1 = $INFINITY if ($lb1 < 0); |
|
$lb2 = $INFINITY if ($lb2 < 0); |
|
$le1 = $INFINITY if ($le1 < 0); |
|
$le2 = $INFINITY if ($le2 < 0); |
|
if ($te1 > $b1) { |
|
($b1, $lb1) = ($te1, $tle1); |
|
} |
|
if ($te2 > $b2) { |
|
($b2, $lb2) = ($te2, $tle2); |
|
} |
|
} |
|
push(@right_html, |
|
sprintf('<td><span class="diff diff-changed">%s%s</span></td>', |
|
$html_line, spacedHtmlText($line))); |
|
} elsif ($le2 == $j) { |
|
my $html_line; |
|
while ($le2 == $j) { |
|
my $end_char = $r_culx - $e2; |
|
$line =~ /^(.*)(.{$end_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-changed">'; |
|
$line = $2; |
|
|
|
$idx++; |
|
my ($tb1, $te1, $tlb1, $tle1, $tb2, $te2, $tlb2, $tle2) = |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2); |
|
($b1, $e1, $lb1, $le1, $b2, $e2, $lb2, $le2) = |
|
@diff_str[$idx*8..($idx+1)*8-1]; |
|
$lb1 = $INFINITY if ($lb1 < 0); |
|
$lb2 = $INFINITY if ($lb2 < 0); |
|
$le1 = $INFINITY if ($le1 < 0); |
|
$le2 = $INFINITY if ($le2 < 0); |
|
if ($te1 > $b1) { |
|
($b1, $lb1) = ($te1, $tle1); |
|
} |
|
if ($te2 > $b2) { |
|
($b2, $lb2) = ($te2, $tle2); |
|
} |
|
|
|
last if ($lb2 != $j); |
|
|
|
my $begin_char = $r_culx - $b2; |
|
$line =~ /^(.*)(.{$begin_char})$/; |
|
$html_line .= spacedHtmlText($1) . |
|
'</span><span class="diff diff-unchanged">'; |
|
$line = $2; |
|
} |
|
push(@right_html, |
|
sprintf('<td nowrap="nowrap"><span class="diff diff-unchanged"'. |
|
'>%s%s</span></td>', |
|
$html_line, spacedHtmlText($line))); |
|
} else { |
|
$line = spacedHtmlText ($line); |
|
push @right_html, "<td class=\"diff diff-unchanged\">$line</td>"; |
|
} |
|
} |
|
for (my $j = 0; $j < $leftRow || $j < $rightRow ; $j++) { # dump out both cols |
|
print '<tr>'; |
|
if ($j < $leftRow) { |
|
print $left_html[$j]; |
|
} else { |
|
print '<td class="diff diff-changed-missing"> </td>'; |
|
} |
|
if ($j < $rightRow) { |
|
print $right_html[$j]; |
|
} else { |
|
print '<td class="diff diff-changed-missing"> </td>'; |
|
} |
|
print "</tr>\n"; |
|
} |
|
} else { |
|
for (my $j = 0; $j < $leftRow || $j < $rightRow; $j++) { # dump both cols |
for (my $j = 0; $j < $leftRow || $j < $rightRow; $j++) { # dump both cols |
print "<tr>\n"; |
print "<tr>\n"; |
if ($j < $leftRow) { |
if ($j < $leftRow) { |
|
|
} |
} |
print "\n</tr>\n"; |
print "\n</tr>\n"; |
} |
} |
} |
|
} |
} |
} |
} |
|
|