version 1.7, 1997/04/30 18:25:05 |
version 1.8, 1997/07/01 22:19:57 |
Line 134 if (-d $fullname) { |
|
Line 134 if (-d $fullname) { |
|
"Failed to spawn rlog"); |
"Failed to spawn rlog"); |
while (<RCS>) { |
while (<RCS>) { |
print if ($verbose); |
print if ($verbose); |
|
if (/^branch:\s+([\d\.]+)/) { |
|
$curbranch = $1; |
|
} |
if ($symnames) { |
if ($symnames) { |
if (/^\s+([^:]+):\s+([\d\.]+)/) { |
if (/^\s+([^:]+):\s+([\d\.]+)/) { |
$symrev{$1} = $2; |
$symrev{$1} = $2; |
Line 203 if (-d $fullname) { |
|
Line 206 if (-d $fullname) { |
|
print "Done sorting revisions\n" if ($verbose); |
print "Done sorting revisions\n" if ($verbose); |
# |
# |
# HEAD is an artificial tag which is simply the highest tag number on the main |
# HEAD is an artificial tag which is simply the highest tag number on the main |
# branch (I think!). Find it by looking through @revorder; it should at least |
# branch, unless there is a branch tag in the RCS file in which case it's the |
# be near the beginning (In fact, it *should* be the first commit listed on |
# highest revision on that branch. Find it by looking through @revorder; it |
# the main branch.) |
# is the first commit listed on the appropriate branch. |
|
$headrev = $curbranch || "1"; |
revision: |
revision: |
for ($i = 0; $i <= $#revorder; $i++) { |
for ($i = 0; $i <= $#revorder; $i++) { |
if ($revorder[$i] =~ /^\d+\.\d+$/) { |
if ($revorder[$i] =~ /^(\S*)\.\d+$/ && $headrev eq $1) { |
if ($revsym{$revorder[$i]}) { |
if ($revsym{$revorder[$i]}) { |
$revsym{$revorder[$i]} .= ", "; |
$revsym{$revorder[$i]} .= ", "; |
} |
} |
Line 236 if (-d $fullname) { |
|
Line 240 if (-d $fullname) { |
|
# If there is no branch A.B.D, then it translates into |
# If there is no branch A.B.D, then it translates into |
# the head A.B . |
# the head A.B . |
# |
# |
# This is pure speculation. |
|
# |
|
$head = $1; |
$head = $1; |
$branch = $3; |
$branch = $3; |
$regex = $head . "." . $branch; |
$regex = $head . "." . $branch; |
Line 255 if (-d $fullname) { |
|
Line 257 if (-d $fullname) { |
|
} |
} |
$revsym{$rev} .= ", " if ($revsym{$rev}); |
$revsym{$rev} .= ", " if ($revsym{$rev}); |
$revsym{$rev} .= $_; |
$revsym{$rev} .= $_; |
|
if ($rev ne $head) { |
|
$branchpoint{$head} .= ", " if ($branchpoint{$head}); |
|
$branchpoint{$head} .= $_; |
|
} |
} |
} |
$sel .= "<OPTION VALUE=\"${rev}:${_}\">$_\n"; |
$sel .= "<OPTION VALUE=\"${rev}:${_}\">$_\n"; |
} |
} |
Line 265 if (-d $fullname) { |
|
Line 271 if (-d $fullname) { |
|
print "<BR>\n"; |
print "<BR>\n"; |
print "<A HREF=\"#diff\">Request diff between arbitrary revisions</A>\n"; |
print "<A HREF=\"#diff\">Request diff between arbitrary revisions</A>\n"; |
print "<HR NOSHADE>\n"; |
print "<HR NOSHADE>\n"; |
|
if ($curbranch) { |
|
print "Default branch is "; |
|
print ($revsym{$curbranch} || $curbranch); |
|
} else { |
|
print "No default branch"; |
|
} |
|
print "<BR><HR NOSHADE>\n"; |
# The other possible U.I. I can see is to have each revision be hot |
# The other possible U.I. I can see is to have each revision be hot |
# and have the first one you click do ?r1=foo |
# and have the first one you click do ?r1=foo |
# and since there's no r2 it keeps going & the next one you click |
# and since there's no r2 it keeps going & the next one you click |
Line 288 if (-d $fullname) { |
|
Line 301 if (-d $fullname) { |
|
$nameprinted{$br}++; |
$nameprinted{$br}++; |
} |
} |
print "\n"; |
print "\n"; |
# print "RCS revision <b>$_</b>\n"; |
|
print "<A HREF=\"$scriptwhere?rev=$_\"><b>$_</b></A>"; |
print "<A HREF=\"$scriptwhere?rev=$_\"><b>$_</b></A>"; |
if (/^1\.1\.1\.\d+$/) { |
if (/^1\.1\.1\.\d+$/) { |
print " <i>(vendor branch)</i>"; |
print " <i>(vendor branch)</i>"; |
} |
} |
# print "<BR>\n"; |
|
# print "Checked in on <i>" . &ctime($date{$_}) . "</i> by "; |
|
# print "<i>" . $author{$_} . "</i><BR>\n"; |
|
print " <i>" . &ctime($date{$_}) . "</i> by "; |
print " <i>" . &ctime($date{$_}) . "</i> by "; |
print "<i>" . $author{$_} . "</i>\n"; |
print "<i>" . $author{$_} . "</i>\n"; |
if ($revsym{$_}) { |
if ($revsym{$_}) { |
# print "CVS Tags: <b>$revsym{$_}</b><BR>\n"; |
|
print "<BR>CVS Tags: <b>$revsym{$_}</b>"; |
print "<BR>CVS Tags: <b>$revsym{$_}</b>"; |
} |
} |
if ($revsym{$br}) { |
if ($revsym{$br}) { |
# print "Branch: <b>$revsym{$br}</b><BR>\n"; |
|
if ($revsym{$_}) { |
if ($revsym{$_}) { |
print "; "; |
print "; "; |
} else { |
} else { |
print "<BR>"; |
print "<BR>"; |
} |
} |
print "Branch: <b>$revsym{$br}</b>"; |
print "Branch: <b>$revsym{$br}</b>\n"; |
} |
} |
|
if ($branchpoint{$_}) { |
|
if ($revsym{$br} || $revsym{$_}) { |
|
print "; "; |
|
} else { |
|
print "<BR>"; |
|
} |
|
print "Branch point for: <b>$branchpoint{$_}</b>\n"; |
|
} |
# Find the previous revision on this branch. |
# Find the previous revision on this branch. |
# I think this can be done algorithmically. |
|
@prevrev = split(/\./, $_); |
@prevrev = split(/\./, $_); |
if (--$prevrev[$#prevrev] == 0) { |
if (--$prevrev[$#prevrev] == 0) { |
# If it was X.Y.Z.1, just make it X.Y |
# If it was X.Y.Z.1, just make it X.Y |
Line 348 if (-d $fullname) { |
|
Line 362 if (-d $fullname) { |
|
} |
} |
} |
} |
} |
} |
# print "Log message:<BR>\n"; |
|
print "<PRE>\n"; |
print "<PRE>\n"; |
print &htmlify($log{$_}, 1); |
print &htmlify($log{$_}, 1); |
print "</PRE><HR NOSHADE>\n"; |
print "</PRE><HR NOSHADE>\n"; |
Line 411 if (-d $fullname) { |
|
Line 424 if (-d $fullname) { |
|
# Is there an indexed version of modules? |
# Is there an indexed version of modules? |
if (open(MODULES, "$cvsroot/CVSROOT/modules")) { |
if (open(MODULES, "$cvsroot/CVSROOT/modules")) { |
while (<MODULES>) { |
while (<MODULES>) { |
if (/^${module}\s+(\S+)/o && -d "${cvsroot}/$1" && |
if (/^(\S+)\s+(\S+)/o && $module eq $1 |
$module ne $1) { |
&& -d "${cvsroot}/$2" && $module ne $2) { |
&redirect($scriptname . '/' . $1 . $xtra); |
&redirect($scriptname . '/' . $2 . $xtra); |
} |
} |
} |
} |
} |
} |
|
|
# transform filename from glob to regex. Deal with: |
# transform filename from glob to regex. Deal with: |
# [, {, ?, * as glob chars |
# [, {, ?, * as glob chars |
# make sure to escape all other regex chars |
# make sure to escape all other regex chars |
$glob =~ s/\./\./g; |
$glob =~ s/([\.\(\)\|\+])/\\$1/g; |
$glob =~ s/\*/.*/g; |
$glob =~ s/\*/.*/g; |
$glob =~ s/\?/./g; |
$glob =~ s/\?/./g; |
|
$glob =~ s/{([^}]+)}/($t = $1) =~ s-,-|-g; "($t)"/eg; |
foreach (readdir(DIR)) { |
foreach (readdir(DIR)) { |
if (/^${glob}$/) { |
if (/^${glob}$/) { |
push(@results, $dirname . "/" .$_); |
push(@results, $dirname . "/" .$_); |
|
|
|
|
@results; |
@results; |
} |
} |
|
|
sub checkout { |
sub checkout { |
local($fullname, $rev) = @_; |
local($fullname, $rev) = @_; |
|
|
open(RCS, "co -p$rev '$fullname' 2>&1 |") || |
open(RCS, "co -p$rev '$fullname' 2>&1 |") || |
&fail("500 Internal Error", "Couldn't co: $!"); |
&fail("500 Internal Error", "Couldn't co: $!"); |
# /home/ncvs/src/sys/netinet/igmp.c,v --> standard output |
# /home/ncvs/src/sys/netinet/igmp.c,v --> standard output |
|
# or |
|
# /home/ncvs/src/sys/netinet/igmp.c,v --> stdout |
# revision 1.1.1.2 |
# revision 1.1.1.2 |
# /* |
# /* |
$_ = <RCS>; |
$_ = <RCS>; |
if (/^$fullname,v\s+-->\s+standard output\s*$/o) { |
if (/^(\S+),v\s+-->\s+st(andar)?d ?out(put)?\s*$/o && $1 eq $fullname) { |
# As expected |
# As expected |
} else { |
} else { |
&fatal("500 Internal Error", |
&fatal("500 Internal Error", |