version 4.16, 2019/11/11 13:15:09 |
version 4.18, 2019/11/11 14:37:54 |
|
|
%input $query $barequery $sortby $bydate $byrev $byauthor |
%input $query $barequery $sortby $bydate $byrev $byauthor |
$bylog $byfile $defaultDiffType $logsort $cvstree $cvsroot |
$bylog $byfile $defaultDiffType $logsort $cvstree $cvsroot |
$charset $output_filter |
$charset $output_filter |
@command_path %CMD $allow_compress $backicon $diricon $fileicon $graphicon |
@command_path %CMD $allow_compress $backicon $diricon $fileicon |
$fullname $cvstreedefault $logo $defaulttitle $address $binfileicon |
$fullname $cvstreedefault $logo $defaulttitle $address $binfileicon |
$long_intro $short_instruction $shortLogLen $show_author |
$long_intro $short_instruction $shortLogLen $show_author |
$tablepadding $hr_breakable $showfunc $hr_ignwhite $hr_ignkeysubst |
$tablepadding $hr_breakable $showfunc $hr_ignwhite $hr_ignkeysubst |
$inputTextSize $mime_types $allow_annotate $allow_markup $allow_mailtos |
$inputTextSize $mime_types $allow_annotate $allow_markup $allow_mailtos |
$allow_log_extra $allow_dir_extra $allow_source_extra |
$allow_log_extra $allow_dir_extra $allow_source_extra |
$allow_cvsgraph $cvsgraph_config $use_java_script $edit_option_form |
$edit_option_form |
$show_subdir_lastmod $show_log_in_markup $preformat_in_markup |
$show_subdir_lastmod $show_log_in_markup $preformat_in_markup |
$tabstop $state $annTable $sel @ForbiddenFiles |
$tabstop $state $annTable $sel @ForbiddenFiles |
$use_descriptions %descriptions @mytz $dwhere |
$use_descriptions %descriptions @mytz $dwhere |
|
|
$HTML_META = <<EOM; |
$HTML_META = <<EOM; |
<meta name="robots" content="nofollow" /> |
<meta name="robots" content="nofollow" /> |
<meta name="generator" content="CVSweb $VERSION" /> |
<meta name="generator" content="CVSweb $VERSION" /> |
<meta http-equiv="Content-Script-Type" content="text/javascript" /> |
|
<meta http-equiv="Content-Style-Type" content="text/css" /> |
<meta http-equiv="Content-Style-Type" content="text/css" /> |
EOM |
EOM |
|
|
|
|
|
|
# ----------------------------------------------------------------------------- |
# ----------------------------------------------------------------------------- |
|
|
sub printDiffSelect($); |
sub printDiffSelect(); |
sub printDiffSelectStickyVars(); |
sub printDiffSelectStickyVars(); |
sub getDiffLinks($$$); |
sub getDiffLinks($$$); |
sub printLogSortSelect($); |
sub printLogSortSelect(); |
sub findLastModifiedSubdirs(@); |
sub findLastModifiedSubdirs(@); |
sub htmlify_sub(&$); |
sub htmlify_sub(&$); |
sub htmlify($;$); |
sub htmlify($;$); |
Line 159 sub openOutputFilter(); |
|
Line 158 sub openOutputFilter(); |
|
sub doAnnotate($$); |
sub doAnnotate($$); |
sub doCheckout($$$); |
sub doCheckout($$$); |
sub doEnscript($$$;$); |
sub doEnscript($$$;$); |
sub doGraph(); |
|
sub doGraphView(); |
|
sub cvswebMarkup($$$$$$;$); |
sub cvswebMarkup($$$$$$;$); |
sub viewable($); |
sub viewable($); |
sub doDiff($$$$$$); |
sub doDiff($$$$$$); |
Line 181 sub download_url($$;$); |
|
Line 178 sub download_url($$;$); |
|
sub download_link($$$;$); |
sub download_link($$$;$); |
sub display_url($$;$); |
sub display_url($$;$); |
sub display_link($$;$$); |
sub display_link($$;$$); |
sub graph_link($;$); |
|
sub history_link($$;$); |
sub history_link($$;$); |
sub toggleQuery($;$); |
sub toggleQuery($;$); |
sub htmlquote($); |
sub htmlquote($); |
Line 212 $cvstreedefault = $logo = $defaulttitle = |
|
Line 208 $cvstreedefault = $logo = $defaulttitle = |
|
$address = $long_intro = $short_instruction = $shortLogLen = $show_author = |
$address = $long_intro = $short_instruction = $shortLogLen = $show_author = |
$tablepadding = $hr_breakable = $showfunc = $hr_ignwhite = |
$tablepadding = $hr_breakable = $showfunc = $hr_ignwhite = |
$hr_ignkeysubst = $inputTextSize = $mime_types = $allow_annotate = |
$hr_ignkeysubst = $inputTextSize = $mime_types = $allow_annotate = |
$allow_markup = $allow_compress = $use_java_script = $edit_option_form = |
$allow_markup = $allow_compress = $edit_option_form = |
$show_subdir_lastmod = $show_log_in_markup = $preformat_in_markup = |
$show_subdir_lastmod = $show_log_in_markup = $preformat_in_markup = |
$tabstop = $use_moddate = $gzip_open = $DEBUG = $allow_cvsgraph = |
$tabstop = $use_moddate = $gzip_open = $DEBUG = |
$cvsgraph_config = $cvshistory_url = $allow_tar = undef; |
$cvshistory_url = $allow_tar = undef; |
|
|
$allow_version_select = $allow_mailtos = $allow_log_extra = 1; |
$allow_version_select = $allow_mailtos = $allow_log_extra = 1; |
|
|
Line 374 if (defined($ENV{QUERY_STRING})) { |
|
Line 370 if (defined($ENV{QUERY_STRING})) { |
|
undef %input; |
undef %input; |
|
|
my $t; |
my $t; |
for my $p (qw(graph hideattic hidecvsroot hidenonreadable ignorecase ln copt |
for my $p (qw(hideattic hidecvsroot hidenonreadable ignorecase ln copt |
makeimage options tarball)) { |
options tarball)) { |
$t = $query{$p}; |
$t = $query{$p}; |
if (defined($t)) { |
if (defined($t)) { |
($input{$p}) = ($t =~ /^([01]|on)$/) |
($input{$p}) = ($t =~ /^([01]|on)$/) |
|
|
$filesfound++; |
$filesfound++; |
|
|
printf "<tr class=\"%s\">\n", ($dirrow % 2) ? 'even' : 'odd'; |
printf "<tr class=\"%s\">\n", ($dirrow % 2) ? 'even' : 'odd'; |
printf '<td class="file"%s>', $allow_cvsgraph ? '' : ' colspan="2"'; |
printf '<td class="file" colspan="2">'; |
|
|
my $icon = $isbinary ? $binfileicon : $fileicon; |
my $icon = $isbinary ? $binfileicon : $fileicon; |
print $nofilelinks ? $icon : &link($icon, $url); |
print $nofilelinks ? $icon : &link($icon, $url); |
print ' ', &link(htmlquote($file), $url), $attic; |
print ' ', &link(htmlquote($file), $url), $attic; |
print '</td><td class="graph">', graph_link($fileurl) if $allow_cvsgraph; |
|
print "</td>\n<td width=\"30\">", display_link($fileurl, $rev); |
print "</td>\n<td width=\"30\">", display_link($fileurl, $rev); |
my $ageclass = 'age'; |
my $ageclass = 'age'; |
my $age = ''; |
my $age = ''; |
|
|
|| $input{$var} ne $DEFAULTVALUE{$var}) |
|| $input{$var} ne $DEFAULTVALUE{$var}) |
&& $var ne 'only_with_tag'); |
&& $var ne 'only_with_tag'); |
} |
} |
printf(<<EOF, ($use_java_script ? ' onchange="this.form.submit()"' : '')); |
print <<EOF; |
<span class="nowrap"> |
<span class="nowrap"> |
<label for="only_with_tag" accesskey="T">Show only files with tag: |
<label for="only_with_tag" accesskey="T">Show only files with tag: |
<select id="only_with_tag" name="only_with_tag"%s> |
<select id="only_with_tag" name="only_with_tag"> |
<option value="">All tags / default branch</option> |
<option value="">All tags / default branch</option> |
EOF |
EOF |
foreach my $tag (reverse sort { lc $a cmp lc $b } keys %tags) { |
foreach my $tag (reverse sort { lc $a cmp lc $b } keys %tags) { |
|
|
</td> |
</td> |
<td class="opt-value"> |
<td class="opt-value"> |
EOF |
EOF |
printLogSortSelect(0); |
printLogSortSelect(); |
print <<EOF; |
print <<EOF; |
</td> |
</td> |
<td class="opt-label"> |
<td class="opt-label"> |
|
|
</td> |
</td> |
<td> |
<td> |
EOF |
EOF |
printDiffSelect(0); |
printDiffSelect(); |
print <<EOF; |
print <<EOF; |
</td> |
</td> |
<td colspan="2" class="opt-label"> |
<td colspan="2" class="opt-label"> |
Line 1286 elsif (-f $fullname . ',v') { |
|
Line 1281 elsif (-f $fullname . ',v') { |
|
exit; |
exit; |
} |
} |
|
|
if ($allow_cvsgraph && $input{graph}) { |
|
if ($input{makeimage}) { |
|
doGraph(); |
|
} else { |
|
doGraphView(); |
|
} |
|
gzipclose(); |
|
exit; |
|
} |
|
|
|
&doLog($fullname); |
&doLog($fullname); |
} |
} |
|
|
|
|
## End MAIN |
## End MAIN |
|
|
|
|
sub printDiffSelect($) |
sub printDiffSelect() |
{ |
{ |
my ($use_java_script) = @_; |
|
|
|
print '<select id="f" name="f"'; |
print '<select id="f" name="f"'; |
print ' onchange="this.form.submit()"' if $use_java_script; |
|
print ">\n"; |
print ">\n"; |
|
|
for my $difftype (@DIFFTYPES) { |
for my $difftype (@DIFFTYPES) { |
Line 1400 sub printDiffSelectStickyVars() |
|
Line 1382 sub printDiffSelectStickyVars() |
|
} |
} |
|
|
|
|
sub printLogSortSelect($) |
sub printLogSortSelect() |
{ |
{ |
my ($use_java_script) = @_; |
|
|
|
print '<select id="logsort" name="logsort"'; |
print '<select id="logsort" name="logsort"'; |
print ' onchange="this.form.submit()"' if $use_java_script; |
|
print ">\n"; |
print ">\n"; |
|
|
for my $sortkey (@LOGSORTKEYS) { |
for my $sortkey (@LOGSORTKEYS) { |
|
|
EOF |
EOF |
printDiffSelectStickyVars(); |
printDiffSelectStickyVars(); |
print 'Diff format: '; |
print 'Diff format: '; |
printDiffSelect($use_java_script); |
printDiffSelect(); |
print "<input type=\"submit\" value=\"Show\" />\n</form>\n"; |
print "<input type=\"submit\" value=\"Show\" />\n</form>\n"; |
html_footer(); |
html_footer(); |
gzipclose(); |
gzipclose(); |
Line 2919 sub printLog($$$;$$) |
|
Line 2898 sub printLog($$$;$$) |
|
$fileurl, $_, $barequery, $_)); |
$fileurl, $_, $barequery, $_)); |
} |
} |
} |
} |
print ' - ', graph_link('', 'revision graph') |
|
if (!$inlogview && $allow_cvsgraph); |
|
} |
} |
print "<br />\n"; |
print "<br />\n"; |
|
|
Line 3053 sub printLog($$$;$$) |
|
Line 3030 sub printLog($$$;$$) |
|
} |
} |
|
|
|
|
# |
|
# Generates the HTML view for CvsGraph. |
|
# |
|
sub doGraphView() |
|
{ |
|
(my $pathname = $where) =~ s|[^/]*$||; |
|
(my $filename = $where) =~ s|^.*/||; |
|
|
|
navigateHeader($scriptwhere, $pathname, $filename, undef, 'graph'); |
|
|
|
my $title = 'Revision graph of ' . htmlquote($pathname . $filename); |
|
my $mapname = 'CvsGraphMap'; |
|
|
|
printf(<<EOF, $title, $mapname, $cvstree, $title); |
|
<h3 style="text-align: center">%s</h3> |
|
<div style="text-align: center"><img border="0" usemap="#%s" src="?cvsroot=%s;graph=1;makeimage=1" alt="%s" /> |
|
EOF |
|
|
|
# Remove any pre-existing tag/branch names from branch links. |
|
(my $notag_query = $barequery) =~ s/;+only_with_tag=.*?(?=;|$)//g; |
|
|
|
my @graph_cmd = |
|
($CMD{cvsgraph}, |
|
'-r', $cvsroot, |
|
'-m', $pathname, |
|
'-i', |
|
'-M', $mapname, |
|
'-x', 'x', |
|
"-Omap_branch_href=\"href=\\\"./?only_with_tag=%(%t%)$notag_query\\\"\"", |
|
"-Omap_rev_href=\"href=\\\"?rev=%(%R%)$barequery\\\"\"", |
|
"-Omap_diff_href=\"href=\\\"%(%F%).diff" . |
|
"?r1=%(%P%);r2=%(%R%)$barequery\\\"\"", |
|
); |
|
push(@graph_cmd, '-c', $cvsgraph_config) if $cvsgraph_config; |
|
push(@graph_cmd, $filename . ',v'); |
|
|
|
local *CVSGRAPH_OUT; |
|
my ($h, $err) = |
|
startproc(\@graph_cmd, \"", '>pipe', \*CVSGRAPH_OUT); |
|
fatal('500 Internal Error', $err) unless $h; |
|
|
|
# Browser compatibility kludge: many browsers do not support client side |
|
# image maps where the <map> element contains only the id attribute. Let's |
|
# add the corresponding name attribute to it on the fly. |
|
while (<CVSGRAPH_OUT>) { |
|
s/(<map\s+id="([^"]+)")\s*>/$1 name="$2">/; |
|
print; |
|
} |
|
|
|
$h->finish(); |
|
print "</div>\n"; |
|
|
|
html_footer(); |
|
} |
|
|
|
|
|
# |
|
# Generates a graph using CvsGraph. |
|
# |
|
sub doGraph() |
|
{ |
|
(my $pathname = $where) =~ s|[^/]*$||; |
|
(my $filename = $where) =~ s|^.*/||; |
|
|
|
http_header('image/png'); |
|
|
|
my @graph_cmd = ($CMD{cvsgraph}, '-r', $cvsroot, '-m', $pathname); |
|
push(@graph_cmd, '-c', $cvsgraph_config) if $cvsgraph_config; |
|
push(@graph_cmd, $filename . ',v'); |
|
|
|
local *CVSGRAPH_OUT; |
|
my ($h, $err) = |
|
startproc(\@graph_cmd, \"", '>pipe', \*CVSGRAPH_OUT); |
|
fatal('500 Internal Error', $err) unless $h; |
|
{ |
|
local $/ = undef; |
|
binmode(\*STDOUT); |
|
print <CVSGRAPH_OUT>; |
|
} |
|
$h->finish(); |
|
} |
|
|
|
|
|
sub doLog($) |
sub doLog($) |
{ |
{ |
my ($fullname) = @_; |
my ($fullname) = @_; |
|
|
&clickablePath($upwhere, 1), "</b>\n</p>\n"; |
&clickablePath($upwhere, 1), "</b>\n</p>\n"; |
print "<p>\n "; |
print "<p>\n "; |
print &link('Request diff between arbitrary revisions', '#diff'); |
print &link('Request diff between arbitrary revisions', '#diff'); |
print ' - ', &graph_link('', 'Display revisions graphically') |
|
if $allow_cvsgraph; |
|
if ($cvshistory_url) { |
if ($cvshistory_url) { |
(my $d = $upwhere) =~ s|/+$||; |
(my $d = $upwhere) =~ s|/+$||; |
print ' - ', history_link($d, $filename); |
print ' - ', history_link($d, $filename); |
|
|
</td> |
</td> |
<td class="opt-value"> |
<td class="opt-value"> |
EOF |
EOF |
printDiffSelect($use_java_script); |
printDiffSelect(); |
print <<EOF; |
print <<EOF; |
</td> |
</td> |
<td></td> |
<td></td> |
|
|
|
|
if (@branchnames) { |
if (@branchnames) { |
|
|
printf(<<EOF, $use_java_script ? ' onchange="this.form.submit()"' : ''); |
print <<EOF; |
<tr> |
<tr> |
<td class="opt-label"> |
<td class="opt-label"> |
<label for="only_with_tag" accesskey="B">View only branch:</label> |
<label for="only_with_tag" accesskey="B">View only branch:</label> |
</td> |
</td> |
<td class="opt-value"> |
<td class="opt-value"> |
<a name="branch"> |
<a name="branch"> |
<select id="only_with_tag" name="only_with_tag"%s> |
<select id="only_with_tag" name="only_with_tag"> |
EOF |
EOF |
|
|
my @tmp = (); |
my @tmp = (); |
|
|
</td> |
</td> |
<td> |
<td> |
EOF |
EOF |
printLogSortSelect($use_java_script); |
printLogSortSelect(); |
print <<EOF; |
print <<EOF; |
</td> |
</td> |
<td><input type="submit" value="Set" accesskey="S" /></td> |
<td><input type="submit" value="Set" accesskey="S" /></td> |
|
|
<label for="f">Diff format:<br /> |
<label for="f">Diff format:<br /> |
EOF |
EOF |
printDiffSelectStickyVars(); |
printDiffSelectStickyVars(); |
printDiffSelect($use_java_script); |
printDiffSelect(); |
printf(<<EOF, $rev1, $rev2); |
printf(<<EOF, $rev1, $rev2); |
</label> |
</label> |
<input type="submit" value="Show" /> |
<input type="submit" value="Show" /> |
Line 3749 sub chooseCVSRoot() |
|
Line 3641 sub chooseCVSRoot() |
|
if ($input{$k} && $k ne 'cvsroot'); |
if ($input{$k} && $k ne 'cvsroot'); |
} |
} |
|
|
printf(<<EOF, $use_java_script ? ' onchange="this.form.submit()"' : ''); |
print <<EOF; |
<label for="cvsroot" accesskey="C">CVS Root: |
<label for="cvsroot" accesskey="C">CVS Root: |
<select id="cvsroot" name="cvsroot"%s> |
<select id="cvsroot" name="cvsroot"> |
EOF |
EOF |
|
|
foreach my $k (@CVSROOT) { |
foreach my $k (@CVSROOT) { |
Line 3926 sub display_link($$;$$) |
|
Line 3818 sub display_link($$;$$) |
|
return sprintf('<a href="%s" class="display-link">%s</a>', |
return sprintf('<a href="%s" class="display-link">%s</a>', |
display_url($url, $revision, $mtype) . $barequery, |
display_url($url, $revision, $mtype) . $barequery, |
htmlquote($textlink)); |
htmlquote($textlink)); |
} |
|
|
|
# |
|
# Expects the passed in URL to be URI escaped, and without a query string. |
|
# The passed in link text should be already HTML escaped as appropriate. |
|
# |
|
sub graph_link($;$) |
|
{ |
|
my ($url, $text) = @_; |
|
$text ||= $graphicon; |
|
return sprintf('<a href="%s?graph=1%s">%s</a>', $url, $barequery, $text); |
|
} |
} |
|
|
# |
# |