===================================================================
RCS file: /cvs/cvsweb/cvsweb.cgi,v
retrieving revision 1.1.1.10
retrieving revision 3.23
diff -u -p -r1.1.1.10 -r3.23
--- cvsweb/cvsweb.cgi 2000/10/07 07:50:18 1.1.1.10
+++ cvsweb/cvsweb.cgi 2000/09/19 19:57:58 3.23
@@ -42,8 +42,8 @@
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
-# $zId: cvsweb.cgi,v 1.103 2000/09/20 17:02:29 jumager Exp $
-# $kId: cvsweb.cgi,v 1.33 2000/10/07 07:44:12 knu Exp $
+# $zId: cvsweb.cgi,v 1.101 2000/09/13 22:44:05 jumager Exp $
+# $Id: cvsweb.cgi,v 3.23 2000/09/19 19:57:58 knu Exp $
#
###
@@ -64,9 +64,8 @@ use vars qw (
$bylog $byfile $hr_default $logsort $cvstree $cvsroot
$mimetype $defaultTextPlain $defaultViewable $allow_compress
$GZIPBIN $backicon $diricon $fileicon $fullname $newname
- $cvstreedefault $body_tag $body_tag_for_src
- $logo $defaulttitle $address
- $long_intro $short_instruction $shortLogLen
+ $cvstreedefault $body_tag $logo $defaulttitle $address
+ $backcolor $long_intro $short_instruction $shortLogLen
$show_author $dirtable $tablepadding $columnHeaderColorDefault
$columnHeaderColorSorted $hr_breakable $showfunc $hr_ignwhite
$hr_ignkeysubst $diffcolorHeading $diffcolorEmpty $diffcolorRemove
@@ -79,7 +78,6 @@ use vars qw (
$tabstop $state $annTable $sel $curbranch @HideModules
$module $use_descriptions %descriptions @mytz $dwhere $moddate
$use_moddate $has_zlib $gzip_open
- $LOG_FILESEPARATOR $LOG_REVSEPARATOR
);
sub printDiffSelect($);
@@ -92,8 +90,6 @@ sub fatal($$);
sub redirect($);
sub safeglob($);
sub getMimeTypeFromSuffix($);
-sub head($;$);
-sub scan_directives(@);
sub doAnnotate($$);
sub doCheckout($$);
sub cvswebMarkup($$$);
@@ -126,13 +122,14 @@ sub forbidden_module($);
use Cwd;
# == EDIT this ==
-# Locations to search for user configuration, in order:
-for (
- $ENV{CVSWEB_CONFIG},
+# User configuration is stored in
+$config = undef;
+
+for ($ENV{CVSWEB_CONFIG},
+# '/home/knu/etc/cvsweb.conf',
'/usr/local/etc/cvsweb.conf',
- getcwd() . '/cvsweb.conf'
- ) {
- $config = $_ if defined($_) && -r $_;
+ getcwd . '/cvsweb.conf') {
+ $config = $_ if defined($_) && -r $_;
}
# == Configuration defaults ==
@@ -146,9 +143,8 @@ $allow_version_select = 1;
# These are defined to allow checking with perl -cw
%CVSROOT = %MIRRORS = %DEFAULTVALUE = %ICONS = %MTYPES =
%tags = %alltags = @tabcolors = ();
-$cvstreedefault = $body_tag = $body_tag_for_src =
-$logo = $defaulttitle = $address =
-$long_intro = $short_instruction = $shortLogLen =
+$cvstreedefault = $body_tag = $logo = $defaulttitle = $address =
+$backcolor = $long_intro = $short_instruction = $shortLogLen =
$show_author = $dirtable = $tablepadding = $columnHeaderColorDefault =
$columnHeaderColorSorted = $hr_breakable = $showfunc = $hr_ignwhite =
$hr_ignkeysubst = $diffcolorHeading = $diffcolorEmpty = $diffcolorRemove =
@@ -158,11 +154,8 @@ $allow_markup = $use_java_script = $open_extern_window
$extern_window_width = $extern_window_height = $edit_option_form =
$checkout_magic = $show_subdir_lastmod = $show_log_in_markup = $v =
$navigationHeaderColor = $tableBorderColor = $markupLogColor =
-$tabstop = $use_moddate = $moddate = $gzip_open = undef;
+$tabstop = $use_moddate = $moddate = undef;
-$LOG_FILESEPARATOR = q/^={77}$/;
-$LOG_REVSEPARATOR = q/^-{28}$/;
-
##### End of configuration variables #####
use Time::Local;
@@ -214,8 +207,7 @@ $nofilelinks = $is_textbased;
# display garbage then :-/
# Turn off gzip if running under mod_perl and no zlib is available,
# piping does not work as expected inside the server.
-$maycompress = (((defined($ENV{HTTP_ACCEPT_ENCODING})
- && $ENV{HTTP_ACCEPT_ENCODING} =~ m`gzip`)
+$maycompress = (($ENV{HTTP_ACCEPT_ENCODING} =~ m`gzip`
|| $is_mozilla3)
&& !$is_msie
&& !($is_mod_perl && !$has_zlib));
@@ -227,11 +219,9 @@ $maycompress = (((defined($ENV{HTTP_ACCEPT_ENCODING})
@stickyvars = qw(cvsroot hideattic sortby logsort f only_with_tag);
if (-f $config) {
- do $config
- || &fatal("500 Internal Error",
- sprintf('Error in loading configuration file: %s
%s
',
- $config, &htmlify($@)));
-} else {
+ do $config;
+}
+else {
&fatal("500 Internal Error",
'Configuration not found. Set the variable $config
'
. 'in cvsweb.cgi, or the environment variable '
@@ -283,24 +273,25 @@ foreach (keys %DEFAULTVALUE)
}
$barequery = "";
-my @barequery;
foreach (@stickyvars) {
# construct a query string with the sticky non default parameters set
if (defined($input{$_}) && $input{$_} ne '' &&
!(defined($DEFAULTVALUE{$_}) && $input{$_} eq $DEFAULTVALUE{$_})) {
- push @barequery, join('=', urlencode($_), urlencode($input{$_}));
+ if ($barequery) {
+ $barequery = $barequery . "&";
+ }
+ my $thisval = urlencode($_) . "=" . urlencode($input{$_});
+ $barequery .= $thisval;
}
}
# is there any query ?
-if (@barequery) {
- $barequery = join('&', @barequery);
+if ($barequery) {
$query = "?$barequery";
- $barequery = "&$barequery";
+ $barequery = "&" . $barequery;
}
else {
$query = "";
}
-undef @barequery;
# get actual parameters
$sortby = $input{"sortby"};
@@ -348,8 +339,7 @@ if ($input{'cvsroot'} && $CVSROOT{$input{'cvsroot'}})
$cvsroot = $CVSROOT{$cvstree};
# create icons out of description
-my $k;
-foreach $k (keys %ICONS) {
+foreach my $k (keys %ICONS) {
no strict 'refs';
my ($itxt,$ipath,$iwidth,$iheight) = @{$ICONS{$k}};
if ($ipath) {
@@ -359,18 +349,9 @@ foreach $k (keys %ICONS) {
${"${k}icon"} = $itxt;
}
}
-undef $k;
-my $config_cvstree = "$config-$cvstree";
-
# Do some special configuration for cvstrees
-if (-f $config_cvstree) {
- do $config_cvstree
- || &fatal("500 Internal Error",
- sprintf('Error in loading configuration file: %s
%s
',
- $config_cvstree, &htmlify($@)));
-}
-undef $config_cvstree;
+do "$config-$cvstree" if (-f "$config-$cvstree");
$prcategories = '(?:' . join('|', @prcategories) . ')';
$prcgi .= '%s' if defined($prcgi) && $prcgi !~ /%s/;
@@ -799,18 +780,18 @@ elsif (-d $fullname) {
elsif (-f $fullname . ',v') {
if (defined($input{'rev'}) || $doCheckout) {
&doCheckout($fullname, $input{'rev'});
- gzipclose();
+ close(GZIP) if ($gzip_open);
exit;
}
if (defined($input{'annotate'}) && $allow_annotate) {
&doAnnotate($input{'annotate'});
- gzipclose();
+ close(GZIP) if ($gzip_open);
exit;
}
if (defined($input{'r1'}) && defined($input{'r2'})) {
&doDiff($fullname, $input{'r1'}, $input{'tr1'},
$input{'r2'}, $input{'tr2'}, $input{'f'});
- gzipclose();
+ close(GZIP) if ($gzip_open);
exit;
}
print("going to dolog($fullname)\n") if ($verbose);
@@ -833,7 +814,7 @@ elsif (-d $fullname) {
# e.g. foo.c
&doDiff($fullname, $input{'r1'}, $input{'tr1'},
$input{'r2'}, $input{'tr2'}, $input{'f'});
- gzipclose();
+ close(GZIP) if ($gzip_open);
exit;
}
elsif (($newname = $fullname) =~ s|/([^/]+)$|/Attic/$1| &&
@@ -868,7 +849,7 @@ elsif (-d $fullname) {
&fatal("404 Not Found","$where: no such file or directory");
}
-gzipclose();
+close(GZIP) if ($gzip_open);
## End MAIN
sub printDiffSelect($) {
@@ -936,13 +917,13 @@ sub htmlify($;$) {
if ($extra) {
# get PR #'s as link ..
if (defined($prcgi)) {
- 1 while $string =~ s`\b(pr[:#]?\s*(?:#?\d+[,\s]\s*)*#?)(\d+)\b`$1 . &link($2, sprintf($prcgi, $2))`ie; # `;
- $string =~ s`\b${prcategories}/(\d+)\b`&link($&, sprintf($prcgi, $1))`igeo; # `;
+ 1 while $string =~ s`\b(pr[:#]?\s*(?:#?\d+[,\s]\s*)*#?)(\d+)\b`$1 . &link($2, sprintf($prcgi, $2))`ie; # `
+ $string =~ s`\b${prcategories}/(\d+)\b`&link($&, sprintf($prcgi, $1))`igeo; # `
}
# get manpage specs as link ..
if (defined($mancgi)) {
- $string =~ s`\b([a-zA-Z]\w+)(?:\(([0-9n])\)\B|\.([0-9n])\b)`&link($&, sprintf($mancgi, $2 ne '' ? $2 : $3, $1))`ge; # `x;
+ $string =~ s`\b([a-zA-Z]\w+)\(([0-9n])\)\B`&link($&, sprintf($mancgi, $2, $1))`ge; # `
}
}
@@ -982,7 +963,7 @@ sub spacedHtmlText($;$) {
sub link($$) {
my($name, $where) = @_;
- return "$name";
+ return "$name\n";
}
sub revcmp($$) {
@@ -1094,40 +1075,6 @@ sub getMimeTypeFromSuffix($) {
}
###############################
-# read first lines like head(1)
-###############################
-sub head($;$) {
- my $fh = $_[0];
- my $linecount = $_[1] || 10;
-
- my @buf;
-
- if ($linecount > 0) {
- my $i;
- for ($i = 0; !eof($fh) && $i < $linecount; $i++) {
- push @buf, scalar <$fh>;
- }
- } else {
- @buf = <$fh>;
- }
-
- @buf;
-}
-
-###############################
-# scan vim and Emacs directives
-###############################
-sub scan_directives(@) {
- my $ts = undef;
-
- for (@_) {
- $ts = $1 if /\b(?:ts|tabstop|tab-width)[:=]\s*([1-9]\d*)\b/;
- }
-
- ('tabstop' => $ts);
-}
-
-###############################
# show Annotation
###############################
sub doAnnotate($$) {
@@ -1147,6 +1094,11 @@ sub doAnnotate($$) {
($pathname = $where) =~ s/(Attic\/)?[^\/]*$//;
($filename = $where) =~ s/^.*\///;
+ http_header();
+
+ navigateHeader($scriptwhere,$pathname,$filename,$rev, "annotate");
+ print "
"; } - - # prefetch several lines - my @buf = head($reader); - - my %d = scan_directives(@buf); - - while (@buf || !eof($reader)) { - $_ = @buf ? shift @buf : <$reader>; - + while (<$reader>) { my @words = split; # Adding one is for the (single) space which follows $words[0]. my $rest = substr ($_, length ($words[0]) + 1); @@ -1245,41 +1184,33 @@ sub doAnnotate($$) { } elsif ($words[0] eq "M") { $lineNr++; - (my $lrev = substr($_, 2, 13)) =~ y/ //d; - (my $lusr = substr($_, 16, 9)) =~ y/ //d; - my $line = substr($_, 36); - my $isCurrentRev = ($rev eq $lrev); + my $lrev = substr ($_, 2, 13); + my $lusr = substr ($_, 16, 9); + my $line = substr ($_, 36); # we should parse the date here .. if ($lrev eq $oldLrev) { - $revprint = sprintf('%-8s', ''); + $revprint = " "; } else { - $revprint = sprintf('%-8s', $lrev); - $revprint =~ s`\S+`$&`; # ` - $oldLusr = ''; + $revprint = $lrev; $oldLusr = ""; + $revprint =~ s`^(\S+)`$1`; # ` } if ($lusr eq $oldLusr) { - $usrprint = ''; + $usrprint = " "; } else { $usrprint = $lusr; } $oldLrev = $lrev; $oldLusr = $lusr; + # is there a less timeconsuming way to strip spaces ? + ($lrev = $lrev) =~ s/\s+//g; + my $isCurrentRev = ($rev eq $lrev); - # Set bold for text-based browsers only - graphical - # browsers show bold fonts a bit wider than regular fonts, - # so it looks irregular. - print "" if ($isCurrentRev && $is_textbased); - - printf "%s%s %-8s %4d:", - $revprint, - $isCurrentRev ? '!' : ' ', - $usrprint, - $lineNr; - print spacedHtmlText($line, $d{'tabstop'}); - - print "" if ($isCurrentRev && $is_textbased); + print "" if ($isCurrentRev); + printf ("%8s%s%8s %4d:", $revprint, ($isCurrentRev ? "|" : " "), $usrprint, $lineNr); + print spacedHtmlText($line); + print "" if ($isCurrentRev); } elsif ($words[0] eq "ok") { # We could complain about any text received after this, like the @@ -1421,6 +1352,7 @@ sub cvswebMarkup($$$) { $input{only_with_tag}; } print ""; + my @content = <$filehandle>; my $url = download_url($fileurl, $revision, $mimetype); print "
"; if ($mimetype =~ /^image/) { @@ -1431,16 +1363,8 @@ sub cvswebMarkup($$$) { } else { print ""; - - # prefetch several lines - my @buf = head($filehandle); - - my %d = scan_directives(@buf); - - while (@buf || !eof($filehandle)) { - $_ = @buf ? shift @buf : <$filehandle>; - - print spacedHtmlText($_, $d{'tabstop'}); + foreach (@content) { + print spacedHtmlText($_); } print ""; } @@ -1547,7 +1471,7 @@ sub doDiff($$$$$$) { if ($human_readable) { http_header(); &human_readable_diff($fh, $rev2); - gzipclose(); + close(GZIP) if ($gzip_open); exit; } else { @@ -1698,7 +1622,7 @@ again: $state = "head"; goto again; } - if ($state eq "head" && /$LOG_REVSEPARATOR/o) { + if ($state eq "head" && /^----------------------------$/) { $state = "log"; $rev = undef; $date = undef; @@ -1708,7 +1632,8 @@ again: next; } if ($state eq "log") { - if (/$LOG_REVSEPARATOR/o || /$LOG_FILESEPARATOR/o) { + if (/^----------------------------$/ + || /^=============================/) { # End of a log entry. my $revbranch; ($revbranch = $rev) =~ s/\.\d+$//; @@ -1755,7 +1680,7 @@ again: $log = $log . $_; } } - if (/$LOG_FILESEPARATOR/o) { + if (/^===============/) { $state = "start"; next; } @@ -1829,7 +1754,7 @@ sub readLog($;$) { # log info # ---------------------------- logentry: - while (!/$LOG_FILESEPARATOR/o) { + while (!/^=========/) { $_ = <$fh>; last logentry if (!defined($_)); # EOF print "R:", $_ if ($verbose); @@ -1837,7 +1762,7 @@ sub readLog($;$) { $rev = $1; unshift(@allrevisions,$rev); } - elsif (/$LOG_FILESEPARATOR/o || /$LOG_REVSEPARATOR/o) { + elsif (/^========/ || /^----------------------------$/) { next logentry; } else { @@ -1871,7 +1796,7 @@ sub readLog($;$) { while (<$fh>) { print "L:", $_ if ($verbose); next line if (/^branches:\s/); - last line if (/$LOG_FILESEPARATOR/o || /$LOG_REVSEPARATOR/o); + last line if (/^----------------------------$/ || /^=========/); $log{$rev} .= $_; } print "E:", $_ if ($verbose); @@ -2329,7 +2254,7 @@ sub flush_diff_rows($$$$) { # human_readable_diff(String revision_to_return_to); ## sub human_readable_diff($){ - my ($difftxt, $where_nd, $filename, $pathname, $scriptwhere_nd); + my ($i,$difftxt, $where_nd, $filename, $pathname, $scriptwhere_nd); my ($fh, $rev) = @_; my ($date1, $date2, $r1d, $r2d, $r1r, $r2r, $rev1, $rev2, $sym1, $sym2); my (@rightCol, @leftCol); @@ -2383,15 +2308,9 @@ sub human_readable_diff($){ # cascading style sheets because we've to set the # font and color for each row. anyone ...? #### + while (<$fh>) { + $difftxt = $_; - # prefetch several lines - my @buf = head($fh); - - my %d = scan_directives(@buf); - - while (@buf || !eof($fh)) { - $difftxt = @buf ? shift @buf : <$fh>; - if ($difftxt =~ /^@@/) { ($oldline,$newline,$funname) = $difftxt =~ /@@ \-([0-9]+).*\+([0-9]+).*@@(.*)/; print ""; @@ -2407,7 +2326,7 @@ sub human_readable_diff($){ } else { ($diffcode,$rest) = $difftxt =~ /^([-+ ])(.*)/; - $_ = spacedHtmlText($rest, $d{'tabstop'}); + $_ = spacedHtmlText ($rest); # Add fontface, size $_ = "$fs $_$fe"; @@ -2491,9 +2410,9 @@ sub navigateHeader($$$$$) { $swhere = urlencode($filename) if ($swhere eq ""); print "<\!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"; print "\n\n"; - print ''; + print ''; print "\n $path$filename - $title - $rev \n"; - print "$body_tag_for_src\n"; + print "\n"; print "