version 4.18, 2019/11/11 14:37:54 |
version 4.19, 2019/11/11 14:56:27 |
|
|
$allow_tar @tar_options @gzip_options @zip_options @cvs_options |
$allow_tar @tar_options @gzip_options @zip_options @cvs_options |
@annotate_options @rcsdiff_options |
@annotate_options @rcsdiff_options |
$HTML_DOCTYPE $HTML_META $cssurl $CSS $cvshistory_url |
$HTML_DOCTYPE $HTML_META $cssurl $CSS $cvshistory_url |
$allow_enscript @enscript_options %enscript_types |
|
); |
); |
|
|
require Compress::Zlib; |
require Compress::Zlib; |
Line 150 sub config_error($$); |
|
Line 149 sub config_error($$); |
|
sub redirect($;$); |
sub redirect($;$); |
sub safeglob($); |
sub safeglob($); |
sub search_path($); |
sub search_path($); |
sub getEnscriptHL($); |
|
sub getMimeType($;$); |
sub getMimeType($;$); |
sub head($;$); |
sub head($;$); |
sub scan_directives(@); |
sub scan_directives(@); |
sub openOutputFilter(); |
sub openOutputFilter(); |
sub doAnnotate($$); |
sub doAnnotate($$); |
sub doCheckout($$$); |
sub doCheckout($$$); |
sub doEnscript($$$;$); |
|
sub cvswebMarkup($$$$$$;$); |
sub cvswebMarkup($$$$$$;$); |
sub viewable($); |
sub viewable($); |
sub doDiff($$$$$$); |
sub doDiff($$$$$$); |
Line 534 foreach (@stickyvars) { |
|
Line 531 foreach (@stickyvars) { |
|
} |
} |
} |
} |
|
|
if ($allow_enscript) { |
|
push(@DIFFTYPES, qw(uc cc)); |
|
@DIFFTYPES{qw(uc cc)} = ( |
|
{ |
|
'descr' => 'unified, colored', |
|
'opts' => ['-u'], |
|
'colored' => 0, |
|
}, |
|
{ |
|
'descr' => 'context, colored', |
|
'opts' => ['-c'], |
|
'colored' => 0, |
|
}, |
|
); |
|
} else { |
|
# No Enscript -> respect difftype, but don't offer colorization. |
|
if ($input{f} && $input{f} =~ /^([ucs])c$/) { |
|
$input{f} = $1; |
|
} |
|
} |
|
|
|
# is there any query ? |
# is there any query ? |
if (@barequery) { |
if (@barequery) { |
$barequery = join (';', @barequery); |
$barequery = join (';', @barequery); |
Line 1688 sub search_path($) |
|
Line 1664 sub search_path($) |
|
|
|
|
|
# |
# |
# Gets the enscript(1) highlight mode corresponding to the given filename, |
|
# or undef if unsupported. |
|
# |
|
sub getEnscriptHL($) |
|
{ |
|
return undef unless $allow_enscript; |
|
my ($filename) = @_; |
|
while (my ($hl, $regex) = each %enscript_types) { |
|
return $hl if ($filename =~ $regex); |
|
} |
|
return undef; |
|
} |
|
|
|
|
|
# |
|
# Gets the MIME type for the given file name. |
# Gets the MIME type for the given file name. |
# |
# |
sub getMimeType($;$) |
sub getMimeType($;$) |
|
|
printf '<embed src="%s" width="100%%" height="100%%" /><br />', |
printf '<embed src="%s" width="100%%" height="100%%" /><br />', |
$url . $barequery; |
$url . $barequery; |
} else { |
} else { |
|
|
print "<pre>\n"; |
print "<pre>\n"; |
my $linenumbers = $input{ln} || 0; |
my $linenumbers = $input{ln} || 0; |
|
|
if (my $enscript_hl = getEnscriptHL($filename)) { |
|
doEnscript($filehandle, $enscript_hl, $linenumbers); |
|
|
|
} else { |
|
my $ln = 0; |
my $ln = 0; |
my @buf = (); |
my @buf = (); |
my $ts = undef; |
my $ts = undef; |
|
|
} |
} |
print $preformat_in_markup ? spacedHtmlText($_, $ts) : htmlquote($_); |
print $preformat_in_markup ? spacedHtmlText($_, $ts) : htmlquote($_); |
} |
} |
} |
|
|
|
print "</pre>\n"; |
print "</pre>\n"; |
} |
} |
html_footer(); |
html_footer(); |
Line 2301 sub doDiff($$$$$$) |
|
Line 2254 sub doDiff($$$$$$) |
|
html_footer(); |
html_footer(); |
gzipclose(); |
gzipclose(); |
exit; |
exit; |
|
|
} elsif ($f =~ /^([ucs])c$/) { |
|
# |
|
# Enscript colored diff. |
|
# |
|
my $hl = 'diff'; |
|
$hl .= $1 if ($1 eq 'u' || $1 eq 's'); |
|
(my $where_nd = $where) =~ s/\.diff$//; |
|
(my $pathname = $where_nd) =~ s|((?<=/)Attic/)?[^/]*$||; |
|
(my $filename = $where_nd) =~ s|^.*/||; |
|
(my $swhere = $scriptwhere) =~ s|\.diff$||; |
|
navigateHeader($swhere, $pathname, $filename, $rev2, 'diff'); |
|
printf(<<EOF, $where_nd, $rev1, $rev2); |
|
<h3 style="text-align: center">Diff for /%s between versions %s and %s</h3> |
|
<pre> |
|
EOF |
|
doEnscript(\$fh, $hl, 0, 'cvsweb_diff'); |
|
print <<EOF; |
|
</pre> |
|
<hr style="width: 100%" /> |
|
<form method="get" action="$scriptwhere"> |
|
EOF |
|
printDiffSelectStickyVars(); |
|
print 'Diff format: '; |
|
printDiffSelect(); |
|
print "<input type=\"submit\" value=\"Show\" />\n</form>\n"; |
|
html_footer(); |
|
gzipclose(); |
|
exit; |
|
|
|
} else { |
} else { |
# |
# |
# Plain diff. |
# Plain diff. |
|
|
</form> |
</form> |
<br clear="all" /> |
<br clear="all" /> |
EOF |
EOF |
} |
|
|
|
|
|
sub doEnscript($$$;$) |
|
{ |
|
my ($filehandle, $highlight, $linenumbers, $lang) = @_; |
|
$lang ||= 'cvsweb'; |
|
|
|
my @cmd = ($CMD{enscript}, |
|
@enscript_options, |
|
'-q', "--language=$lang", '-o', '-', "--highlight=$highlight"); |
|
|
|
local *ENSCRIPT_OUT; |
|
my ($h, $err) = |
|
startproc(\@cmd, $filehandle, '>pipe', \*ENSCRIPT_OUT); |
|
fatal('500 Internal Error', $err) unless $h; |
|
|
|
# We could short-circuit and have enscript output directly to STDOUT above, |
|
# but that doesn't work with mod_perl (at least some 1.99 versions). |
|
if ($linenumbers) { |
|
my $ln = 0; |
|
while (<ENSCRIPT_OUT>) { |
|
printf '<a id="l%d" class="src">%5d: </a>', (++$ln) x 2; |
|
print $_; |
|
} |
|
} else { |
|
local $/ = undef; |
|
print <ENSCRIPT_OUT>; |
|
} |
|
$h->finish(); |
|
} |
} |
|
|
|
|