=================================================================== RCS file: /cvs/cvsweb/cvsweb.cgi,v retrieving revision 3.35 retrieving revision 3.39 diff -u -p -r3.35 -r3.39 --- cvsweb/cvsweb.cgi 2000/10/10 21:14:05 3.35 +++ cvsweb/cvsweb.cgi 2000/11/04 15:32:17 3.39 @@ -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 $ -# $Id: cvsweb.cgi,v 3.35 2000/10/10 21:14:05 knu Exp $ +# $zId: cvsweb.cgi,v 1.104 2000/11/01 22:05:12 hnordstrom Exp $ +# $Id: cvsweb.cgi,v 3.39 2000/11/04 15:32:17 knu Exp $ # ### @@ -52,6 +52,7 @@ use strict; use vars qw ( $config $allow_version_select $verbose %CVSROOT %CVSROOTdescr %MIRRORS %DEFAULTVALUE %ICONS %MTYPES + @DIFFTYPES %DIFFTYPES @LOGSORTKEYS %LOGSORTKEYS %alltags @tabcolors %fileinfo %tags @branchnames %nameprinted %symrev %revsym @allrevisions %date %author @revdisplayorder @revisions %state %difflines %log %branchpoint @revorder @@ -61,7 +62,7 @@ use vars qw ( %funcline_regexp $is_mod_perl $is_links $is_lynx $is_w3m $is_msie $is_mozilla3 $is_textbased %input $query $barequery $sortby $bydate $byrev $byauthor - $bylog $byfile $hr_default $logsort $cvstree $cvsroot + $bylog $byfile $defaultDiffType $logsort $cvstree $cvsroot $mimetype $defaultTextPlain $defaultViewable $allow_compress $GZIPBIN $backicon $diricon $fileicon $fullname $newname $cvstreedefault $body_tag $body_tag_for_src @@ -83,7 +84,10 @@ use vars qw ( ); sub printDiffSelect($); +sub printDiffLinks($$); +sub printLogSortSelect($); sub findLastModifiedSubdirs(@); +sub htmlify_sub(&$); sub htmlify($;$); sub spacedHtmlText($;$); sub link($$); @@ -117,6 +121,7 @@ sub download_link($$$;$); sub toggleQuery($$); sub urlencode($); sub htmlquote($); +sub htmlunquote($); sub http_header(;$); sub html_header($); sub html_footer(); @@ -164,6 +169,49 @@ $tabstop = $use_moddate = $moddate = $gzip_open = unde $LOG_FILESEPARATOR = q/^={77}$/; $LOG_REVSEPARATOR = q/^-{28}$/; +@DIFFTYPES = qw(h H u c s); +@DIFFTYPES{@DIFFTYPES} = ( + { + 'descr' => 'colored', + 'opts' => [ '-u' ], + 'colored' => 1, + }, + { + 'descr' => 'long colored', + 'opts' => [ '--unified=15' ], + 'colored' => 1, + }, + { + 'descr' => 'unified', + 'opts' => [ '-u' ], + 'colored' => 0, + }, + { + 'descr' => 'context', + 'opts' => [ '-c' ], + 'colored' => 0, + }, + { + 'descr' => 'side by side', + 'opts' => [ '--side-by-side', '--width=164' ], + 'colored' => 0, + }, + ); + +@LOGSORTKEYS = qw(cvs date rev); +@LOGSORTKEYS{@LOGSORTKEYS} = ( + { + 'descr' => 'Not sorted', + }, + { + 'descr' => 'Commit date', + }, + { + 'descr' => 'Revision', + }, + ); + + ##### End of configuration variables ##### use Time::Local; @@ -327,7 +375,7 @@ else { $byfile = 1; } -$hr_default = $input{'f'} eq 'h'; +$defaultDiffType = $input{'f'}; $logsort = $input{'logsort'}; @@ -482,9 +530,8 @@ elsif (-d $fullname) { } print "\n"; $infocols++; - print ""; $infocols++; - print ""; if ($show_author) { $infocols++; - print ""; } $infocols++; - print ""; } elsif ($use_descriptions) { - print "
"; + printf '
', + $byfile ? $columnHeaderColorSorted : $columnHeaderColorDefault; if ($byfile) { print 'File'; } else { @@ -496,9 +543,8 @@ elsif (-d $fullname) { # with revision information: if (scalar(%fileinfo)) { $infocols++; - print ""; + printf '', + $byrev ? $columnHeaderColorSorted : $columnHeaderColorDefault; if ($byrev) { print 'Rev.'; } else { @@ -507,21 +553,19 @@ elsif (-d $fullname) { } print ""; + printf '', + $bydate ? $columnHeaderColorSorted : $columnHeaderColorDefault; if ($bydate) { print 'Age'; } else { print &link('Age', sprintf('./%s#dirlist', - &toggleQuery("sortby", "date"))); + &toggleQuery("sortby", "date"))); } print ""; + printf '', + $byauthor ? $columnHeaderColorSorted : $columnHeaderColorDefault; if ($byauthor) { print 'Author'; } else { @@ -531,19 +575,18 @@ elsif (-d $fullname) { print ""; + printf '', + $bylog ? $columnHeaderColorSorted : $columnHeaderColorDefault; if ($bylog) { print 'Last log entry'; } else { print &link('Last log entry', sprintf('./%s#dirlist', - &toggleQuery("sortby", "log"))); + &toggleQuery("sortby", "log"))); } print ""; + printf '', $columnHeaderColorDefault; print "Description"; $infocols++; } @@ -608,9 +651,9 @@ elsif (-d $fullname) { next if ($_ eq '..' && $where eq '/'); my ($rev,$date,$log,$author,$filename) = @{$fileinfo{$_}} if (defined($fileinfo{$_})); - print "
" if ($dirtable); + printf '
', $tabcolors[$dirrow % 2] if $dirtable; if ($_ eq '..') { - $url = "../" . $query; + $url = "../$query"; if ($nofilelinks) { print $backicon; } @@ -620,7 +663,7 @@ elsif (-d $fullname) { print " ", &link("Previous Directory", $url); } else { - $url = urlencode($_) . '/' . $query; + $url = urlencode($_) . "/$query"; print ""; if ($nofilelinks) { print $diricon; @@ -639,7 +682,7 @@ elsif (-d $fullname) { if ($filename) { print "  " if ($dirtable); if ($date) { - print " " . readableTime(time() - $date,0) . ""; + print " ", readableTime(time() - $date,0), ""; } if ($show_author) { print " " if ($dirtable); @@ -650,8 +693,8 @@ elsif (-d $fullname) { print "$filename/$rev"; print "
" if ($dirtable); if ($log) { - print " " - . &htmlify(substr($log,0,$shortLogLen)); + print " ", + &htmlify(substr($log,0,$shortLogLen)); if (length $log > 80) { print "..."; } @@ -661,7 +704,7 @@ elsif (-d $fullname) { else { my ($dwhere) = ($where ne "/" ? $where : "") . $_; if ($use_descriptions && defined $descriptions{$dwhere}) { - print "
 " if $dirtable; + print " " if $dirtable; print $descriptions{$dwhere}; } elsif ($dirtable && $infocols > 1) { # close the row with the appropriate number of @@ -692,7 +735,7 @@ elsif (-d $fullname) { next if (!defined($fileinfo{$_})); ($rev,$date,$log,$author) = @{$fileinfo{$_}}; $filesfound++; - print "
" if ($dirtable); + printf '
', $tabcolors[$dirrow % 2] if $dirtable; print ""; if ($nofilelinks) { print $fileicon; @@ -707,7 +750,7 @@ elsif (-d $fullname) { $defaultViewable ? "text/x-cvsweb-markup" : undef); print " " if ($dirtable); if ($date) { - print " " . readableTime(time() - $date,0) . ""; + print " ", readableTime(time() - $date,0), ""; } if ($show_author) { print " " if ($dirtable); @@ -715,7 +758,7 @@ elsif (-d $fullname) { } print " " if ($dirtable); if ($log) { - print " " . &htmlify(substr($log,0,$shortLogLen)); + print " ", &htmlify(substr($log,0,$shortLogLen)); if (length $log > 80) { print "..."; } @@ -730,7 +773,7 @@ elsif (-d $fullname) { if ($dirtable && defined($tableBorderColor)) { print "
"; } - print "". ($dirtable == 1) ? "" : "" . "\n"; + print( $dirtable == 1 ? "\n" : "\n" ); if ($filesexists && !$filesfound) { print "

NOTE: There are $filesexists files, but none matches the current tag ($input{only_with_tag})\n"; @@ -788,12 +831,9 @@ elsif (-d $fullname) { print "Revision"; print "Log message"; print ""; - print "revisions by: \n"; - print ""; + print "Sort log by: "; + printLogSortSelect(0); + print ""; print "Diff format: "; printDiffSelect(0); print ""; @@ -887,18 +927,43 @@ gzipclose(); sub printDiffSelect($) { my ($use_java_script) = @_; - my ($f) = $input{'f'}; - print "'; + + local $_; + for (@DIFFTYPES) { + printf('

\n";
@@ -2284,8 +2398,8 @@ sub doLog($) {
 	print "
\n"; print ""; print "\n"; - print ""; - print ""; + print "\n"; if (@branchnames) { @@ -2320,13 +2434,9 @@ sub doLog($) { print ""; - print ""; + print ""; print ""; print "\n"; print "
Preferred Diff type:"; + print "
Preferred Diff type:"; printDiffSelect($use_java_script); print "
"; print "\n"; print "Sort log by:"; + printLogSortSelect($use_java_script); + print "
"; @@ -2396,17 +2506,16 @@ sub human_readable_diff($){ $date2 = $r2d; } - print "

Diff for /$where_nd between version $rev1 and $rev2

\n"; - - print "\n"; - print "\n"; - print "
"; - print "version $rev1"; + print "

Diff for /$where_nd between version $rev1 and $rev2

\n", + "\n", + "\n", + "\n"; - print "\n", + "\n"; @@ -2531,7 +2640,7 @@ 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 "
", + "version $rev1"; print ", $date1" if (defined($date1)); print "
Tag: $sym1\n" if ($sym1); - print "
"; - print "version $rev2"; + print "", + "version $rev2"; print ", $date2" if (defined($date2)); print "
Tag: $sym2\n" if ($sym1); print "
"; @@ -2547,10 +2656,10 @@ sub navigateHeader($$$$$) { sub plural_write($$) { my ($num,$text) = @_; if ($num != 1) { - $text = $text . "s"; + $text .= "s"; } if ($num > 0) { - return $num . " " . $text; + return join(' ', $num, $text); } else { return ""; @@ -2594,7 +2703,7 @@ sub readableTime($$) { my $resttime = plural_write(int ($rest / $break), $desc{$break}); if ($resttime) { - $retval = $retval . ", " . $resttime; + $retval .= ", $resttime"; } } @@ -2624,8 +2733,8 @@ sub clickablePath($$) { my $wherepath = ''; my ($lastslash) = $pathname =~ m|/$|; foreach (split(/\//, $pathname)) { - $retval = $retval . " / "; - $wherepath = $wherepath . '/' . $_; + $retval .= " / "; + $wherepath .= "/$_"; my ($last) = "$wherepath/" eq "/$pathname" || $wherepath eq "/$pathname"; if ($clickLast || !$last) { @@ -2669,8 +2778,7 @@ sub chooseCVSRoot() { foreach $k (@foo) { print "\n"; + print ">", ($CVSROOTdescr{$k} ? $CVSROOTdescr{$k} : $k), "\n"; } print "\n"; print ""; @@ -2735,7 +2843,7 @@ sub fileSortCmp() { sub download_url($$;$) { my ($url,$revision,$mimetype) = @_; - $revision =~ s/\b0\.//; + $revision =~ s/\.0\././; if (defined($checkoutMagic) && (!defined($mimetype) || $mimetype ne "text/x-cvsweb-markup")) { @@ -2845,6 +2953,18 @@ sub htmlquote($) { $_; } +sub htmlunquote($) { + local($_) = @_; + + # Special Characters; RFC 1866 + s/"/\"/g; + s/<//g; + s/&/&/g; + + $_; +} + sub http_header(;$) { my $content_type = shift || "text/html"; if (defined($moddate)) { @@ -2852,7 +2972,7 @@ sub http_header(;$) { Apache->request->header_out("Last-Modified" => scalar gmtime($moddate) . " GMT"); } else { - print "Last-Modified: " . scalar gmtime($moddate) . " GMT\r\n"; + print "Last-Modified: ", scalar gmtime($moddate), " GMT\r\n"; } } if ($is_mod_perl) { @@ -2903,7 +3023,7 @@ sub http_header(;$) { sub html_header($) { my ($title) = @_; - my $version = '$zRevision: 1.103 $ $Revision: 3.35 $'; #' + my $version = '$zRevision: 1.104 $ $Revision: 3.39 $'; #' http_header(); print <