version 1.1.1.33, 2002/07/23 16:15:22 |
version 1.1.1.36, 2002/09/30 19:48:52 |
|
|
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
# SUCH DAMAGE. |
# SUCH DAMAGE. |
# |
# |
# $FreeBSD: projects/cvsweb/cvsweb.cgi,v 1.119 2002/07/23 13:58:32 scop Exp $ |
# $FreeBSD: projects/cvsweb/cvsweb.cgi,v 1.119.2.6 2002/09/26 20:56:05 scop Exp $ |
# $zId: cvsweb.cgi,v 1.112 2001/07/24 13:03:16 hzeller Exp $ |
# $zId: cvsweb.cgi,v 1.112 2001/07/24 13:03:16 hzeller Exp $ |
# $Idaemons: /home/cvs/cvsweb/cvsweb.cgi,v 1.84 2001/10/07 20:50:10 knu Exp $ |
# $Idaemons: /home/cvs/cvsweb/cvsweb.cgi,v 1.84 2001/10/07 20:50:10 knu Exp $ |
# |
# |
|
|
$module $use_descriptions %descriptions @mytz $dwhere $moddate |
$module $use_descriptions %descriptions @mytz $dwhere $moddate |
$use_moddate $has_zlib $gzip_open |
$use_moddate $has_zlib $gzip_open |
$allow_tar @tar_options @gzip_options @zip_options @cvs_options |
$allow_tar @tar_options @gzip_options @zip_options @cvs_options |
$LOG_FILESEPARATOR $LOG_REVSEPARATOR |
@annotate_options $LOG_FILESEPARATOR $LOG_REVSEPARATOR |
$tmpdir $HTML_DOCTYPE $HTML_META |
$tmpdir $HTML_DOCTYPE $HTML_META |
); |
); |
|
|
Line 149 sub forbidden_module($); |
|
Line 149 sub forbidden_module($); |
|
##### Start of Configuration Area ######## |
##### Start of Configuration Area ######## |
delete $ENV{PATH}; |
delete $ENV{PATH}; |
|
|
$cvsweb_revision = '2.0.5'; |
$cvsweb_revision = '2.0.6'; |
|
|
use File::Basename (); |
use File::Basename (); |
|
|
Line 468 if ($input{'cvsroot'} && $CVSROOT{$input{'cvsroot'}}) |
|
Line 468 if ($input{'cvsroot'} && $CVSROOT{$input{'cvsroot'}}) |
|
$cvsroot = $CVSROOT{$cvstree}; |
$cvsroot = $CVSROOT{$cvstree}; |
|
|
# create icons out of description |
# create icons out of description |
my $k; |
foreach my $k (keys %ICONS) { |
foreach $k (keys %ICONS) { |
|
no strict 'refs'; |
no strict 'refs'; |
my ($itxt, $ipath, $iwidth, $iheight) = @{$ICONS{$k}}; |
my ($itxt, $ipath, $iwidth, $iheight) = @{$ICONS{$k}}; |
if ($ipath) { |
if ($ipath) { |
Line 481 foreach $k (keys %ICONS) { |
|
Line 480 foreach $k (keys %ICONS) { |
|
${"${k}icon"} = $itxt; |
${"${k}icon"} = $itxt; |
} |
} |
} |
} |
undef $k; |
|
|
|
my $config_cvstree = "$config-$cvstree"; |
my $config_cvstree = "$config-$cvstree"; |
|
|
Line 812 if (-d $fullname) { |
|
Line 810 if (-d $fullname) { |
|
my $filesexists; |
my $filesexists; |
my $filesfound; |
my $filesfound; |
|
|
foreach (sort { &fileSortCmp } @dir) { |
foreach my $file (sort { &fileSortCmp } @dir) { |
if ($_ eq '.') { |
|
next; |
|
} |
|
|
|
|
next if ($file eq '.'); |
|
|
# ignore CVS lock and stale NFS files |
# ignore CVS lock and stale NFS files |
next if (/^#cvs\.|^,|^\.nfs/); |
next if ($file =~ /^#cvs\.|^,|^\.nfs/); |
|
|
# Check whether to show the CVSROOT path |
# Check whether to show the CVSROOT path |
next if ($input{'hidecvsroot'} && ($_ eq 'CVSROOT')); |
next if ($input{'hidecvsroot'} && $file eq 'CVSROOT'); |
|
|
# Check whether the module is in the restricted list |
# Check whether the module is in the restricted list |
next if ($_ && &forbidden_module($_)); |
next if ($file && &forbidden_module($file)); |
|
|
# Ignore non-readable files |
# Ignore non-readable files |
next if ($input{'hidenonreadable'} && !(-r "$fullname/$_")); |
next if ($input{'hidenonreadable'} && !(-r "$fullname/$file")); |
|
|
if (s|^Attic/||) { |
if ($file =~ s|^Attic/||) { |
$attic = " (in the Attic) " . $hideAtticToggleLink; |
$attic = " (in the Attic) " . $hideAtticToggleLink; |
} else { |
} else { |
$attic = ""; |
$attic = ""; |
} |
} |
|
|
if ($_ eq '..' || -d "$fullname/$_") { |
if ($file eq '..' || -d "$fullname/$file") { |
next if ($_ eq '..' && $where eq '/'); |
next if ($file eq '..' && $where eq '/'); |
my ($rev, $date, $log, $author, $filename); |
my ($rev, $date, $log, $author, $filename) = |
($rev, $date, $log, $author, $filename) = |
@{$fileinfo{$file}} |
@{$fileinfo{$_}} |
if (defined($fileinfo{$file})); |
if (defined($fileinfo{$_})); |
|
printf "<tr style=\"background-color: %s\">\n<td>", |
printf "<tr style=\"background-color: %s\">\n<td>", |
$tabcolors[$dirrow % 2] if $dirtable; |
$tabcolors[$dirrow % 2] if $dirtable; |
|
|
if ($_ eq '..') { |
if ($file eq '..') { |
$url = "../$query"; |
$url = "../$query"; |
if ($nofilelinks) { |
if ($nofilelinks) { |
print $backicon; |
print $backicon; |
Line 853 if (-d $fullname) { |
|
Line 849 if (-d $fullname) { |
|
} |
} |
print ' ', &link("Parent Directory", $url); |
print ' ', &link("Parent Directory", $url); |
} else { |
} else { |
$url = './' . urlencode($_) . "/$query"; |
$url = './' . urlencode($file) . "/$query"; |
print "<a name=\"$_\"></a>"; |
print "<a name=\"$file\"></a>"; |
|
|
if ($nofilelinks) { |
if ($nofilelinks) { |
print $diricon; |
print $diricon; |
} else { |
} else { |
print &link($diricon, $url); |
print &link($diricon, $url); |
} |
} |
print ' ', &link("$_/", $url), $attic; |
print ' ', &link("$file/", $url), $attic; |
|
|
if ($_ eq "Attic") { |
if ($file eq "Attic") { |
print " "; |
print " "; |
print &link( |
print &link( |
"[Don't hide]", |
"[Don't hide]", |
Line 906 if (-d $fullname) { |
|
Line 902 if (-d $fullname) { |
|
} |
} |
} else { |
} else { |
my ($dwhere) = |
my ($dwhere) = |
($where ne "/" ? $where : "") . $_; |
($where ne "/" ? $where : "") . $file; |
|
|
if ($use_descriptions |
if ($use_descriptions |
&& defined $descriptions{$dwhere}) |
&& defined $descriptions{$dwhere}) |
Line 933 if (-d $fullname) { |
|
Line 929 if (-d $fullname) { |
|
print "<br>\n"; |
print "<br>\n"; |
} |
} |
$dirrow++; |
$dirrow++; |
} elsif (s/,v$//) { |
} elsif ($file =~ s/,v$//) { |
|
|
# Skip forbidden files now so we'll give no hint |
# Skip forbidden files now so we'll give no hint |
# about their existence. This should probably have |
# about their existence. This should probably have |
# been done earlier, but it's straightforward here. |
# been done earlier, but it's straightforward here. |
next if forbidden_file("$fullname/$_"); |
next if forbidden_file("$fullname/$file"); |
|
|
$fileurl = ($attic ? "Attic/" : "") . urlencode($_); |
$fileurl = ($attic ? "Attic/" : "") . urlencode($file); |
$url = './' . $fileurl . $query; |
$url = './' . $fileurl . $query; |
my $rev = ''; |
|
my $date = ''; |
|
my $log = ''; |
|
my $author = ''; |
|
$filesexists++; |
$filesexists++; |
next if (!defined($fileinfo{$_})); |
next if (!defined($fileinfo{$file})); |
($rev, $date, $log, $author) = @{$fileinfo{$_}}; |
my ($rev, $date, $log, $author) = @{$fileinfo{$file}}; |
$filesfound++; |
$filesfound++; |
printf "<tr style=\"background-color: %s\">\n<td>", |
printf "<tr style=\"background-color: %s\">\n<td>", |
$tabcolors[$dirrow % 2] if $dirtable; |
$tabcolors[$dirrow % 2] if $dirtable; |
print "<a name=\"$_\"></a>"; |
print "<a name=\"$file\"></a>"; |
|
|
if ($nofilelinks) { |
if ($nofilelinks) { |
print $fileicon; |
print $fileicon; |
} else { |
} else { |
print &link($fileicon, $url); |
print &link($fileicon, $url); |
} |
} |
print ' ', &link($_, $url), $attic; |
print ' ', &link(htmlquote($file), $url), $attic; |
print "</td>\n<td> " if ($dirtable); |
print "</td>\n<td> " if ($dirtable); |
download_link($fileurl, $rev, $rev, |
download_link($fileurl, $rev, $rev, |
$defaultViewable ? "text/x-cvsweb-markup" : |
$defaultViewable ? "text/x-cvsweb-markup" : |
Line 1413 sub spacedHtmlText($;$) { |
|
Line 1405 sub spacedHtmlText($;$) { |
|
return $_; |
return $_; |
} |
} |
|
|
|
# Note that this doesn't htmlquote the first argument... |
sub link($$) { |
sub link($$) { |
my ($name, $url) = @_; |
my ($name, $url) = @_; |
|
|
Line 1614 sub doAnnotate($$) { |
|
Line 1607 sub doAnnotate($$) { |
|
$| = 1; |
$| = 1; |
$| = 0; # Flush |
$| = 0; # Flush |
|
|
|
# Work around a mod_perl bug (?) in order to make open2() work. |
|
# Search for "untie STDIN" in mod_perl mailing list archives. |
|
my $old_stdin; |
|
if ($is_mod_perl && ($old_stdin = tied *STDIN)) { |
|
local $^W = undef; |
|
untie *STDIN; |
|
} |
|
|
# this annotate version is based on the |
# this annotate version is based on the |
# cvs annotate-demo Perl script by Cyclic Software |
# cvs annotate-demo Perl script by Cyclic Software |
# It was written by Cyclic Software, http://www.cyclic.com/, and is in |
# It was written by Cyclic Software, http://www.cyclic.com/, and is in |
# the public domain. |
# the public domain. |
# we could abandon the use of rlog, rcsdiff and co using |
# we could abandon the use of rlog, rcsdiff and co using |
# the cvsserver in a similiar way one day (..after rewrite) |
# the cvsserver in a similiar way one day (..after rewrite) |
$pid = open2($reader, $writer, $CMD{cvs}, @cvs_options, "server") |
$pid = open2($reader, $writer, $CMD{cvs}, @annotate_options, 'server') |
or fatal("500 Internal Error", |
or fatal("500 Internal Error", |
'Fatal Error - unable to open cvs for annotation'); |
'Fatal Error - unable to open cvs for annotation'); |
|
|
|
# Re-tie STDIN if we fiddled around with it earlier, just to be sure. |
|
tie(*STDIN, ref($old_stdin), $old_stdin) if ($old_stdin && !tied(*STDIN)); |
|
|
# OK, first send the request to the server. A simplified example is: |
# OK, first send the request to the server. A simplified example is: |
# Root /home/kingdon/zwork/cvsroot |
# Root /home/kingdon/zwork/cvsroot |
# Argument foo/xx |
# Argument foo/xx |
Line 1767 sub doAnnotate($$) { |
|
Line 1771 sub doAnnotate($$) { |
|
} else { |
} else { |
print "</pre>"; |
print "</pre>"; |
} |
} |
|
html_footer(); |
|
|
close($reader) or warn "cannot close: $!"; |
close($reader) or warn "cannot close: $!"; |
wait; |
wait; |
} |
} |
Line 2109 sub getDirLogs($$@) { |
|
Line 2115 sub getDirLogs($$@) { |
|
push (@files, &safeglob("$DirName/*,v")); |
push (@files, &safeglob("$DirName/*,v")); |
push (@files, &safeglob("$DirName/Attic/*,v")) |
push (@files, &safeglob("$DirName/Attic/*,v")) |
if (!$input{'hideattic'}); |
if (!$input{'hideattic'}); |
foreach $file (@otherFiles) { |
foreach my $file (@otherFiles) { |
push (@files, "$DirName/$file"); |
push (@files, "$DirName/$file"); |
} |
} |
|
|
|
|
} |
} |
|
|
sub html_footer() { |
sub html_footer() { |
print "<hr noshade>\n<address>$address</address>\n</body>\n</html>\n"; |
print "<hr noshade>\n<address>$address</address>\n" if $address; |
|
print "</body>\n</html>\n"; |
} |
} |
|
|
sub link_tags($) { |
sub link_tags($) { |