===================================================================
RCS file: /cvs/cvsweb/cvsweb.cgi,v
retrieving revision 4.18
retrieving revision 4.22
diff -u -p -r4.18 -r4.22
--- cvsweb/cvsweb.cgi 2019/11/11 14:37:54 4.18
+++ cvsweb/cvsweb.cgi 2019/11/13 09:12:47 4.22
@@ -1,5 +1,5 @@
#!/usr/bin/perl
-# $Id: cvsweb.cgi,v 4.18 2019/11/11 14:37:54 schwarze Exp $
+# $Id: cvsweb.cgi,v 4.22 2019/11/13 09:12:47 schwarze Exp $
# $knu: cvsweb.cgi,v 1.299 2010/11/13 16:37:18 simon
#
# cvsweb - a CGI interface to CVS trees.
@@ -62,8 +62,7 @@ use vars qw (
%alltags %fileinfo %tags @branchnames %nameprinted
%symrev %revsym @allrevisions %date %author @revdisplayorder
@revisions %state %difflines %log %branchpoint @revorder $keywordsubstitution
- $prcgi @prcategories $re_prcategories $prkeyword $re_prkeyword $mancgi
- $doCheckout $scriptname $scriptwhere
+ $mancgi $doCheckout $scriptname $scriptwhere
$where $Browser $nofilelinks $maycompress @stickyvars
$is_links $is_lynx $is_w3m $is_msie $is_mozilla3 $is_textbased
%input $query $barequery $sortby $bydate $byrev $byauthor
@@ -83,7 +82,6 @@ use vars qw (
$allow_tar @tar_options @gzip_options @zip_options @cvs_options
@annotate_options @rcsdiff_options
$HTML_DOCTYPE $HTML_META $cssurl $CSS $cvshistory_url
- $allow_enscript @enscript_options %enscript_types
);
require Compress::Zlib;
@@ -146,18 +144,15 @@ sub spacedHtmlText($;$);
sub link($$);
sub revcmp($$);
sub fatal($$@);
-sub config_error($$);
sub redirect($;$);
sub safeglob($);
sub search_path($);
-sub getEnscriptHL($);
sub getMimeType($;$);
sub head($;$);
sub scan_directives(@);
sub openOutputFilter();
sub doAnnotate($$);
sub doCheckout($$$);
-sub doEnscript($$$;$);
sub cvswebMarkup($$$$$$;$);
sub viewable($);
sub doDiff($$$$$$);
@@ -267,7 +262,7 @@ $scriptname = '' unless defined($scriptname);
$where = $pathinfo;
$doCheckout = $where =~ s|^/$CheckoutMagic/|/|o;
$where =~ s|^/||;
-$scriptname =~ s|^/*|/|;
+$scriptname =~ s|^/+||;
# Let's workaround thttpd's stupidity..
if ($scriptname =~ m|/$|) {
@@ -275,6 +270,7 @@ if ($scriptname =~ m|/$|) {
my $re = quotemeta $pathinfo;
$scriptname =~ s/$re$//;
}
+$scriptname = "/$scriptname" if $scriptname;
# $scriptname : the URI escaped path to this script
# $where : the path in the CVS repository (without leading /, or only /)
@@ -319,14 +315,18 @@ $maycompress = (
qw(cvsroot hideattic ignorecase sortby logsort f only_with_tag ln
hidecvsroot hidenonreadable);
-#
# Load configuration.
-#
-if (-f $config) {
- do "$config" or config_error($config, $@);
-} else {
- fatal("500 Internal Error",
- 'Configuration not found. Set the parameter $config
in cvsweb.cgi to your cvsweb.conf configuration file first.');
+{
+ $config =~ m|^/| or fatal '500 Internal Error',
+ 'Configuration file name "%s
" is not an absolute path.',
+ $config;
+ defined do $config and last;
+ $@ and fatal '500 Internal Error',
+ 'Error loading configuration file "%s
":
%s', + $config, $@; + fatal '500 Internal Error', + 'Cannot read configuration file "
%s
": %s',
+ $config, $! || 'unknown error';
}
# Try to find a readable dir where we can cd into. Some abs_path()
@@ -534,27 +534,6 @@ 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 ?
if (@barequery) {
$barequery = join (';', @barequery);
@@ -627,10 +606,6 @@ if (-f $config_cvstree) {
}
undef $config_cvstree;
-$re_prcategories = '(?:' . join ('|', @prcategories) . ')' if @prcategories;
-$re_prkeyword = quotemeta($prkeyword) if defined($prkeyword);
-$prcgi .= '%s' if defined($prcgi) && $prcgi !~ /%s/;
-
$fullname = catfile($cvsroot, $where);
my $rewrite = 0;
@@ -1478,39 +1453,6 @@ sub htmlify($;$)
}
if ($extra) {
-
- # get PR #'s as link: "PR#nnnn" "PR: nnnn, ..." "PR nnnn, ..." "bin/nnnn"
- if (defined($prcgi) && defined($re_prkeyword)) {
- my $prev;
-
- do {
- $prev = $_;
- $_ = htmlify_sub {
- s{
- (\b$re_prkeyword[:\#]?\s*
- (?:
- \#?
- \d+[,\s]\s*
- )*
- \#?)
- (\d+)\b
- }{
- $1 . &link($2, sprintf($prcgi, $2))
- }egix;
- } $_;
- } while ($_ ne $prev);
-
- if (defined($re_prcategories)) {
- $_ = htmlify_sub {
- s{
- (\b$re_prcategories/(\d+)\b)
- }{
- &link($1, sprintf($prcgi, $2))
- }egox;
- } $_;
- }
- }
-
# get manpage specs as link: "foo.1" "foo(1)"
if (defined($mancgi)) {
$_ = htmlify_sub {
@@ -1607,17 +1549,6 @@ sub fatal($$@)
#
-# Signal a (fatal) configuration error.
-#
-sub config_error($$)
-{
- fatal('500 Internal Error',
- 'Error loading configuration file "%s
":\n"; my $linenumbers = $input{ln} || 0; - - if (my $enscript_hl = getEnscriptHL($filename)) { - doEnscript($filehandle, $enscript_hl, $linenumbers); - - } else { my $ln = 0; my @buf = (); my $ts = undef; @@ -2157,8 +2067,6 @@ EOF } print $preformat_in_markup ? spacedHtmlText($_, $ts) : htmlquote($_); } - } - print "\n"; } html_footer(); @@ -2301,36 +2209,6 @@ sub doDiff($$$$$$) html_footer(); gzipclose(); 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 - doEnscript(\$fh, $hl, 0, 'cvsweb_diff'); - print <-
-\n"; - html_footer(); - gzipclose(); - exit; - } else { # # Plain diff. @@ -3450,36 +3328,6 @@ 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 () { - printf '%5d: ', (++$ln) x 2; - print $_; - } - } else { - local $/ = undef; - print ; - } - $h->finish(); }