Use $::tree_dir to allow tree data to be decoupled from tinderbox server directory.
Bug #409052 r=bear git-svn-id: svn://10.0.0.236/trunk@241783 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
parent
c129237fba
commit
cfc1fe9192
@ -191,6 +191,7 @@ store of data between executions of the same program and they pass the
|
||||
data between cooperating program. This data is often databases with
|
||||
rows separated by "\n" and columns by '|'.
|
||||
|
||||
The tree-specific datafiles are stored under $::tree_dir which defaults to 'trees';
|
||||
|
||||
$tree/${logfile}
|
||||
$tree/${logfile}.brief.html
|
||||
|
||||
@ -83,7 +83,7 @@ if ($form{note}) {
|
||||
# Save comment to the notes.txt file.
|
||||
#
|
||||
my $err = 0;
|
||||
open NOTES, ">>", "$tree/notes.txt" or $err++;
|
||||
open NOTES, ">>", "$::tree_dir/$tree/notes.txt" or $err++;
|
||||
if ($err) {
|
||||
print "<title>Error</title>\n";
|
||||
print "<h1>Could not open $tree/notes.txt for writing.</h1>\n";
|
||||
|
||||
@ -117,8 +117,8 @@ if (defined($treedata)) {
|
||||
#
|
||||
|
||||
# Determine the collective size & age of the build logs
|
||||
opendir(TRIM_DIR, &shell_escape($tree)) || die "opendir($safe_tree): $!";
|
||||
my @trim_files = grep { /\.(?:gz|brief\.html)$/ && -f "$tree/$_" } readdir(TRIM_DIR);
|
||||
opendir(TRIM_DIR, &shell_escape("$::tree_dir/$tree")) || die "opendir($safe_tree): $!";
|
||||
my @trim_files = grep { /\.(?:gz|brief\.html)$/ && -f "$::tree_dir/$tree/$_" } readdir(TRIM_DIR);
|
||||
close(TRIM_DIR);
|
||||
my $trim_bytes = 0;
|
||||
my $trim_size;
|
||||
@ -128,7 +128,7 @@ if (defined($treedata)) {
|
||||
my $size_M = 1048576;
|
||||
my $size_G = 1073741824;
|
||||
for my $file (@trim_files) {
|
||||
my @file_stat = stat("$tree/$file");
|
||||
my @file_stat = stat("$::tree_dir/$tree/$file");
|
||||
$trim_bytes += $file_stat[7];
|
||||
$trim_oldest = $file_stat[9] if ($trim_oldest > $file_stat[9]);
|
||||
}
|
||||
|
||||
@ -64,7 +64,7 @@ exit 0 if (!$use_bonsai && !$use_viewvc);
|
||||
|
||||
# Only allow one process at a time to re-write "who.dat".
|
||||
#
|
||||
my $lockfile = "$tree/buildwho.sem";
|
||||
my $lockfile = "$::tree_dir/$tree/buildwho.sem";
|
||||
my $lock = lock_datafile($lockfile);
|
||||
|
||||
if ($use_bonsai) {
|
||||
@ -107,7 +107,7 @@ sub build_who {
|
||||
|
||||
my $last_who='';
|
||||
my $last_date=0;
|
||||
my $who_file = "$tree/who.dat";
|
||||
my $who_file = "$::tree_dir/$tree/who.dat";
|
||||
my $temp_who_file = "$who_file.$$";
|
||||
open(WHOLOG, ">", "$temp_who_file");
|
||||
for my $ci (@$result) {
|
||||
|
||||
@ -56,7 +56,7 @@ if (defined $tree && defined $start && defined $end) {
|
||||
my $first = str2timeAndCheck($start);
|
||||
my $last = str2timeAndCheck($end);
|
||||
if ($first > 0 && $last > 0) {
|
||||
if (open(IN, "<", "$tree/build.dat")) {
|
||||
if (open(IN, "<", "$::tree_dir/$tree/build.dat")) {
|
||||
print "<hr><center><h1>Bustage stats for $tree</H1><H3>from " .
|
||||
time2str($TIMEFORMAT, $first) . " to " .
|
||||
time2str($TIMEFORMAT, $last) . "</H3></center>\n";
|
||||
|
||||
@ -39,7 +39,7 @@ sub validate_treedata() {
|
||||
tie my %treedata => 'Tie::IxHash';
|
||||
print "Trees: @treelist\n";
|
||||
for my $treedir (@treelist) {
|
||||
my $file = "$treedir/treedata.pl";
|
||||
my $file = "$::tree_dir/$treedir/treedata.pl";
|
||||
my $changedvalues = 0;
|
||||
print "Tree: $treedir\n" if ($verbose);
|
||||
open(CONFIG, "$file") or die ("$file: $!\n");
|
||||
@ -82,7 +82,7 @@ sub validate_treedata() {
|
||||
}
|
||||
# Write new data file if any changes were found
|
||||
if ($changedvalues) {
|
||||
my $newfile ="$treedir/treedata.pl";
|
||||
my $newfile ="$::tree_dir/$treedir/treedata.pl";
|
||||
$newfile .= ".new" if (!$write_changes);
|
||||
print "Values changed for $treedir\n" if ($verbose);
|
||||
print "Updating $newfile\n";
|
||||
|
||||
@ -132,26 +132,22 @@ sub create_tree {
|
||||
else {
|
||||
mkdir( $treename, oct($dir_perm)) || die "<h1> Cannot mkdir $treename</h1>";
|
||||
}
|
||||
&write_treedata("$treename/treedata.pl", \%treedata);
|
||||
&write_treedata("$::tree_dir/$treename/treedata.pl", \%treedata);
|
||||
|
||||
open( F, ">", "$treename/build.dat" );
|
||||
close( F );
|
||||
|
||||
open( F, ">", "$treename/who.dat" );
|
||||
close( F );
|
||||
foreach my $file ( "build.dat", "who.dat", "notes.txt" ) {
|
||||
open( F, ">", "$::tree_dir/$treename/$file" );
|
||||
close( F );
|
||||
chmod (oct($perm), "$::tree_dir/$treename/$file");
|
||||
}
|
||||
|
||||
open( F, ">", "$treename/notes.txt" );
|
||||
close( F );
|
||||
|
||||
open( F, ">", "$treename/index.html");
|
||||
open( F, ">", "$::tree_dir/$treename/index.html");
|
||||
print F "<HTML>\n";
|
||||
print F "<HEAD><META HTTP-EQUIV=\"refresh\" content=\"0,url=../showbuilds.cgi?tree=$treename\"></HEAD>\n";
|
||||
print F "<HEAD><META HTTP-EQUIV=\"refresh\" content=\"0,url=${::static_rel_path}showbuilds.cgi?tree=$treename\"></HEAD>\n";
|
||||
print F "<BODY></BODY>\n";
|
||||
print F "</HTML>\n";
|
||||
close( F );
|
||||
|
||||
chmod oct($perm), "$treename/build.dat", "$treename/who.dat", "$treename/notes.txt",
|
||||
"$treename/treedata.pl", "$treename/index.html";
|
||||
chmod (oct($perm), "$::tree_dir/$treename/index.html");
|
||||
|
||||
print "<h2><a href=\"showbuilds.cgi?tree=$treename\">Tree created or modified</a></h2>\n";
|
||||
}
|
||||
@ -161,7 +157,7 @@ sub admin_builds {
|
||||
my ($i,%active_buildnames, %scrape_buildnames, %warning_buildnames);
|
||||
|
||||
# Read build.dat
|
||||
open(BD, "<", "$tree/build.dat");
|
||||
open(BD, "<", "$::tree_dir/$tree/build.dat");
|
||||
while(<BD>){
|
||||
my ($endtime,$buildtime,$bname) = split( /\|/ );
|
||||
$active_buildnames{$bname} = 0;
|
||||
@ -183,7 +179,7 @@ sub admin_builds {
|
||||
}
|
||||
}
|
||||
|
||||
open(IGNORE, ">", "$tree/ignorebuilds.pl");
|
||||
open(IGNORE, ">", "$::tree_dir/$tree/ignorebuilds.pl");
|
||||
print IGNORE '$ignore_builds = {' . "\n";
|
||||
for $i (sort keys %active_buildnames){
|
||||
if ($active_buildnames{$i} == 0){
|
||||
@ -193,7 +189,7 @@ sub admin_builds {
|
||||
print IGNORE "\t};\n";
|
||||
close IGNORE;
|
||||
|
||||
open(SCRAPE, ">", "$tree/scrapebuilds.pl");
|
||||
open(SCRAPE, ">", "$::tree_dir/$tree/scrapebuilds.pl");
|
||||
print SCRAPE '$scrape_builds = {' . "\n";
|
||||
for $i (sort keys %scrape_buildnames){
|
||||
if ($scrape_buildnames{$i} == 1){
|
||||
@ -203,7 +199,7 @@ sub admin_builds {
|
||||
print SCRAPE "\t};\n";
|
||||
close SCRAPE;
|
||||
|
||||
open(WARNING, ">", "$tree/warningbuilds.pl");
|
||||
open(WARNING, ">", "$::tree_dir/$tree/warningbuilds.pl");
|
||||
print WARNING '$warning_builds = {' . "\n";
|
||||
for $i (sort keys %warning_buildnames){
|
||||
if ($warning_buildnames{$i} == 1){
|
||||
@ -213,17 +209,18 @@ sub admin_builds {
|
||||
print WARNING "\t};\n";
|
||||
close WARNING;
|
||||
|
||||
chmod( oct($perm), "$tree/ignorebuilds.pl", "$tree/scrapebuilds.pl",
|
||||
"$tree/warningbuilds.pl");
|
||||
chmod( oct($perm), "$::tree_dir/$tree/ignorebuilds.pl",
|
||||
"$::tree_dir/$tree/scrapebuilds.pl",
|
||||
"$::tree_dir/$tree/warningbuilds.pl");
|
||||
print "<h2><a href=showbuilds.cgi?tree=$tree>Build state Changed</a></h2>\n";
|
||||
}
|
||||
sub set_sheriff {
|
||||
my $m = $form{'sheriff'};
|
||||
$m =~ s/\'/\\\'/g;
|
||||
open(SHERIFF, ">", "$tree/sheriff.pl");
|
||||
open(SHERIFF, ">", "$::tree_dir/$tree/sheriff.pl");
|
||||
print SHERIFF "\$current_sheriff = '$m';\n1;";
|
||||
close(SHERIFF);
|
||||
chmod( oct($perm), "$tree/sheriff.pl");
|
||||
chmod( oct($perm), "$::tree_dir/$tree/sheriff.pl");
|
||||
print "<h2><a href=showbuilds.cgi?tree=$tree>
|
||||
Sheriff Changed.</a><br></h2>\n";
|
||||
}
|
||||
@ -231,10 +228,10 @@ sub set_sheriff {
|
||||
sub set_status_message {
|
||||
my $m = $form{'status'};
|
||||
$m =~ s/\'/\\\'/g;
|
||||
open(TREESTATUS, ">", "$tree/status.pl");
|
||||
open(TREESTATUS, ">", "$::tree_dir/$tree/status.pl");
|
||||
print TREESTATUS "\$status_message = \'$m\'\;\n1;";
|
||||
close(TREESTATUS);
|
||||
chmod( oct($perm), "$tree/status.pl");
|
||||
chmod( oct($perm), "$::tree_dir/$tree/status.pl");
|
||||
print "<h2><a href=showbuilds.cgi?tree=$tree>
|
||||
Status message changed.</a><br></h2>\n";
|
||||
}
|
||||
@ -242,10 +239,10 @@ sub set_status_message {
|
||||
sub set_rules_message {
|
||||
my $m = $form{'rules'};
|
||||
$m =~ s/\'/\\\'/g;
|
||||
open(RULES, ">", "$tree/rules.pl");
|
||||
open(RULES, ">", "$::tree_dir/$tree/rules.pl");
|
||||
print RULES "\$rules_message = \'$m\';\n1;";
|
||||
close(RULES);
|
||||
chmod( oct($perm), "$tree/rules.pl");
|
||||
chmod( oct($perm), "$::tree_dir/$tree/rules.pl");
|
||||
print "<h2><a href=showbuilds.cgi?tree=$tree>
|
||||
Rule message changed.</a><br></h2>\n";
|
||||
}
|
||||
|
||||
@ -27,7 +27,6 @@ use Time::Local;
|
||||
use File::Copy;
|
||||
use File::Basename;
|
||||
use lib "@TINDERBOX_DIR@";
|
||||
require 'tbglobals.pl'; # for $gzip
|
||||
use strict;
|
||||
|
||||
umask 002;
|
||||
@ -42,9 +41,12 @@ my @changed_trees=();
|
||||
my %scraped_trees;
|
||||
my $debug = 0;
|
||||
my $err = 0;
|
||||
my $rejected_mail_dir = "$::data_dir/bad";
|
||||
|
||||
chdir $tinderboxdir or die "Couldn't chdir to $tinderboxdir";
|
||||
# Include tbglobals.pl after chdir so that $::tree_dir is set correctly
|
||||
require 'tbglobals.pl';
|
||||
|
||||
my $rejected_mail_dir = "$::data_dir/bad";
|
||||
|
||||
# parse args
|
||||
GetOptions("check-mail" => \$only_check_mail) or die ("Error parsing args.");
|
||||
@ -160,19 +162,19 @@ sub process_mailfile($) {
|
||||
|
||||
# Warnings
|
||||
# Look for build name in warningbuilds.pl
|
||||
print "Warnings($tinderbox{tree}/$tinderbox{logfile})\n" if ($debug);
|
||||
print "Warnings($tinderbox{tree}, $tinderbox{logfile})\n" if ($debug);
|
||||
undef %TreeConfig::warning_builds;
|
||||
package TreeConfig;
|
||||
do "$tinderbox{tree}/warningbuilds.pl"
|
||||
if -r "$tinderbox{tree}/warningbuilds.pl";
|
||||
do "$::tree_dir/$tinderbox{tree}/warningbuilds.pl"
|
||||
if -r "$::tree_dir/$tinderbox{tree}/warningbuilds.pl";
|
||||
package main;
|
||||
|
||||
if (defined $TreeConfig::warning_builds
|
||||
and defined($TreeConfig::warning_builds->{$tinderbox{build}})
|
||||
and $tinderbox{status} ne 'building'
|
||||
and $tinderbox{status} ne 'failed') {
|
||||
$err = system("./warnings.pl", "$tinderbox{tree}/$tinderbox{logfile}");
|
||||
warn "warnings.pl($tinderbox{tree}/$tinderbox{logfile} returned an error\n" if ($err);
|
||||
$err = system("./warnings.pl", $tinderbox{tree}, $tinderbox{logfile});
|
||||
warn "warnings.pl($tinderbox{tree}, $tinderbox{logfile}) returned an error\n" if ($err);
|
||||
}
|
||||
|
||||
# Scrape data
|
||||
@ -180,8 +182,8 @@ sub process_mailfile($) {
|
||||
print "Scrape($tinderbox{tree},$tinderbox{logfile})\n" if ($debug);
|
||||
undef %TreeConfig::scrape_builds;
|
||||
package TreeConfig;
|
||||
do "$tinderbox{tree}/scrapebuilds.pl"
|
||||
if -r "$tinderbox{tree}/scrapebuilds.pl";
|
||||
do "$::tree_dir/$tinderbox{tree}/scrapebuilds.pl"
|
||||
if -r "$::tree_dir/$tinderbox{tree}/scrapebuilds.pl";
|
||||
package main;
|
||||
|
||||
if (defined $TreeConfig::scrape_builds
|
||||
@ -237,8 +239,8 @@ sub check_required_variables {
|
||||
if ($tbx->{tree} eq '') {
|
||||
$err_string .= "Variable 'tinderbox:tree' not set.\n";
|
||||
}
|
||||
elsif (not -r $tbx->{tree}) {
|
||||
$err_string .= "Variable 'tinderbox:tree' not set to a valid tree.\n";
|
||||
elsif (! -d "$::tree_dir/$tbx->{tree}") {
|
||||
$err_string .= "Variable 'tinderbox:tree' ($::tree_dir/$tbx->{tree}) not set to a valid tree.\n";
|
||||
}
|
||||
elsif (($mail_header->{'to'} =~ /external/i or
|
||||
$mail_header->{'cc'} =~ /external/i) and
|
||||
@ -320,10 +322,10 @@ sub check_required_variables {
|
||||
|
||||
sub write_build_data {
|
||||
my $tbx = $_[0];
|
||||
my $lockfile = "$tbx->{tree}/builddat.sem";
|
||||
my $lockfile = "$::tree_dir/$tbx->{tree}/builddat.sem";
|
||||
my $lock = &lock_datafile($lockfile);
|
||||
unless (open(BUILDDATA, ">>", "$tbx->{tree}/build.dat")) {
|
||||
warn "can't open $tbx->{tree}/build.dat for writing: $!";
|
||||
unless (open(BUILDDATA, ">>", "$::tree_dir/$tbx->{tree}/build.dat")) {
|
||||
warn "can't open $::tree_dir/$tbx->{tree}/build.dat for writing: $!";
|
||||
&unlock_datafile($lock);
|
||||
return;
|
||||
}
|
||||
@ -351,7 +353,7 @@ sub compress_log_file {
|
||||
last if /^$/;
|
||||
}
|
||||
|
||||
my $logfile = "$tbx->{tree}/$tbx->{logfile}";
|
||||
my $logfile = "$::tree_dir/$tbx->{tree}/$tbx->{logfile}";
|
||||
my $gz = gzopen($logfile,"wb") or $err++;
|
||||
if ($err) {
|
||||
warn "gzopen($logfile): $!\n";
|
||||
@ -371,7 +373,7 @@ sub compress_log_file {
|
||||
|
||||
# Decode the log using the logencoding variable to determine
|
||||
# the type of encoding.
|
||||
my $decoded = "$tbx->{tree}/$tbx->{logfile}.uncomp";
|
||||
my $decoded = "$::tree_dir/$tbx->{tree}/$tbx->{logfile}.uncomp";
|
||||
if ($tbx->{logencoding} eq 'base64') {
|
||||
eval "use MIME::Base64 ();";
|
||||
open(DECODED, ">", $decoded) or $err++;
|
||||
|
||||
@ -51,13 +51,13 @@ print "scrape.pl($tree, $logfile)\n" if ($debug);
|
||||
$tree = &trick_taint($tree);
|
||||
$logfile = &trick_taint($logfile);
|
||||
|
||||
die "Error: No tree named $tree" unless -r "$tree/treedata.pl";
|
||||
require "$tree/treedata.pl";
|
||||
die "Error: No tree named $tree" unless -r "$::tree_dir/$tree/treedata.pl";
|
||||
require "$::tree_dir/$tree/treedata.pl";
|
||||
|
||||
# Search the build log for the scrape data
|
||||
#
|
||||
my $gz = gzopen("$tree/$logfile", "rb")
|
||||
or die "gzopen($tree/$logfile): $!\n";
|
||||
my $gz = gzopen("$::tree_dir/$tree/$logfile", "rb")
|
||||
or die "gzopen($::tree_dir/$tree/$logfile): $!\n";
|
||||
my @scrape_data = find_scrape_data($gz);
|
||||
$gz->gzclose();
|
||||
|
||||
@ -68,9 +68,9 @@ if (!defined(@scrape_data)) {
|
||||
|
||||
# Save the scrape data to 'scrape.dat'
|
||||
#
|
||||
my $lockfile = "$tree/scrape.sem";
|
||||
my $lockfile = "$::tree_dir/$tree/scrape.sem";
|
||||
my $lock = &lock_datafile($lockfile);
|
||||
open(SCRAPE, ">>", "$tree/scrape.dat") or die "Unable to open $tree/scrape.dat";
|
||||
open(SCRAPE, ">>", "$::tree_dir/$tree/scrape.dat") or die "Unable to open $::tree_dir/$tree/scrape.dat";
|
||||
print SCRAPE "$logfile|".join('|', @scrape_data)."\n";
|
||||
close SCRAPE;
|
||||
&unlock_datafile($lock);
|
||||
|
||||
@ -58,8 +58,8 @@ my @who_check_list;
|
||||
|
||||
|
||||
# $rel_path is the relative path to webtools/tinderbox used for links.
|
||||
# It changes to "../" if the page is generated statically, because then
|
||||
# it is placed in tinderbox/$tree.
|
||||
# It changes to "$::static_rel_path../" if the page is generated statically,
|
||||
# because then it is placed in tinderbox/$::tree_dir/$tree.
|
||||
my $rel_path = '';
|
||||
|
||||
|
||||
@ -86,7 +86,7 @@ sub do_static($) {
|
||||
['status.vxml', 'do_vxml'] );
|
||||
|
||||
my ($key, $value);
|
||||
$rel_path = '../';
|
||||
$rel_path = $::static_rel_path;
|
||||
foreach $key (keys %images) {
|
||||
$value = $images{$key};
|
||||
$images{$key} = "$rel_path$value";
|
||||
@ -96,7 +96,7 @@ sub do_static($) {
|
||||
|
||||
foreach my $pair (@pages) {
|
||||
my ($page, $call) = @{$pair};
|
||||
my $outfile = "$tree/$page";
|
||||
my $outfile = "$::tree_dir/$tree/$page";
|
||||
|
||||
open(OUT, ">", "$outfile.$$");
|
||||
select OUT;
|
||||
@ -341,7 +341,7 @@ BEGIN {
|
||||
my $logfile = $br->{logfile};
|
||||
my $buildtree = $br->{td}->{name};
|
||||
|
||||
my $logfileexists = ( -f "$buildtree/$logfile" ? 1 : 0 );
|
||||
my $logfileexists = ( -f "$::tree_dir/$buildtree/$logfile" ? 1 : 0 );
|
||||
|
||||
print "<tt>\n";
|
||||
|
||||
|
||||
@ -81,8 +81,8 @@ my $time_str = print_time($buildtime);
|
||||
|
||||
$|=1;
|
||||
|
||||
my @stat_logfile = stat("$tree/$logfile");
|
||||
my @stat_notes = stat("$tree/notes.txt");
|
||||
my @stat_logfile = stat("$::tree_dir/$tree/$logfile");
|
||||
my @stat_notes = stat("$::tree_dir/$tree/notes.txt");
|
||||
if ($stat_logfile[9] > $stat_notes[9]) {
|
||||
$last_modified_time = $stat_logfile[9];
|
||||
} else {
|
||||
@ -113,14 +113,14 @@ else
|
||||
{
|
||||
$brief_filename = $logfile;
|
||||
$brief_filename =~ s/.gz$/.brief.html/;
|
||||
if (-T "$tree/$brief_filename" and -M _ > -M $tree/$logfile)
|
||||
if (-T "$::tree_dir/$tree/$brief_filename" and -M _ > -M "$::tree_dir/$tree/$logfile")
|
||||
{
|
||||
open(BRIEFFILE, "<", "$tree/$brief_filename");
|
||||
open(BRIEFFILE, "<", "$::tree_dir/$tree/$brief_filename");
|
||||
print while (<BRIEFFILE>)
|
||||
}
|
||||
else
|
||||
{
|
||||
open(BRIEFFILE, ">", "$tree/$brief_filename");
|
||||
open(BRIEFFILE, ">", "$::tree_dir/$tree/$brief_filename");
|
||||
|
||||
my $errors = print_summary();
|
||||
print_log($errors);
|
||||
@ -144,8 +144,8 @@ sub print_fragment {
|
||||
|
||||
print "<a href='showlog.cgi?tree=$tree&errorparser=$errorparser&logfile=$logfile&buildtime=$buildtime&buildname=$enc_buildname&fulltext=1'>Show Full Build Log</a>";
|
||||
|
||||
my $gz = gzopen("$tree/$logfile","rb") or
|
||||
warn "gzopen($tree/$logfile): $!\n";
|
||||
my $gz = gzopen("$::tree_dir/$tree/$logfile","rb") or
|
||||
warn "gzopen($::tree_dir/$tree/$logfile): $!\n";
|
||||
|
||||
my $first_line = $linenum - ($numlines/2);
|
||||
my $last_line = $linenum + ($numlines/2);
|
||||
@ -204,7 +204,7 @@ sub print_notes {
|
||||
# Print notes
|
||||
#
|
||||
my $found_note = 0;
|
||||
open(NOTES,"<", "$tree/notes.txt")
|
||||
open(NOTES,"<", "$::tree_dir/$tree/notes.txt")
|
||||
or print "<h2>warning: Couldn't open $tree/notes.txt </h2>\n";
|
||||
print "$buildtime, $buildname<br>\n";
|
||||
while (<NOTES>) {
|
||||
@ -234,8 +234,8 @@ sub print_summary {
|
||||
|
||||
my $line_num = 0;
|
||||
my $error_num = 0;
|
||||
my $gz = gzopen("$tree/$logfile","rb") or
|
||||
warn "gzopen($tree/$logfile): $!\n";
|
||||
my $gz = gzopen("$::tree_dir/$tree/$logfile","rb") or
|
||||
warn "gzopen($::tree_dir/$tree/$logfile): $!\n";
|
||||
my ($bytesread, $line);
|
||||
while (defined($gz) && (($bytesread = $gz->gzreadline($line)) > 0)) {
|
||||
my $line_has_error = output_summary_line($line, $error_num);
|
||||
@ -292,8 +292,8 @@ sub print_log {
|
||||
logprint('<H2>Build Error Log</H2><pre>');
|
||||
|
||||
my $line_num = 0;
|
||||
my $gz = gzopen("$tree/$logfile", "rb") or
|
||||
warn "gzopen($tree/$logfile): $!\n";
|
||||
my $gz = gzopen("$::tree_dir/$tree/$logfile", "rb") or
|
||||
warn "gzopen($::tree_dir/$tree/$logfile): $!\n";
|
||||
my ($bytesread, $line);
|
||||
while (defined($gz) && (($bytesread = $gz->gzreadline($line)) > 0)) {
|
||||
output_log_line($line, $line_num, $errors);
|
||||
|
||||
@ -56,6 +56,12 @@ $::CI_LOG=11;
|
||||
# Variables set from Makefile
|
||||
$::default_cvsroot = "@CVSROOT@";
|
||||
$::data_dir='data';
|
||||
$::tree_dir = 'trees';
|
||||
$::static_rel_path = '../../';
|
||||
if ( ! -d "$::tree_dir/." ) {
|
||||
$::tree_dir = ".";
|
||||
$::static_rel_path = "../";
|
||||
}
|
||||
|
||||
@::global_tree_list = ();
|
||||
undef @::global_tree_list;
|
||||
@ -123,9 +129,10 @@ sub trick_taint{
|
||||
|
||||
sub make_tree_list {
|
||||
return @::global_tree_list if defined(@::global_tree_list);
|
||||
while(<*>) {
|
||||
if( -d $_ && $_ ne "$::data_dir" && $_ ne 'CVS' && -f "$_/treedata.pl") {
|
||||
push @::global_tree_list, $_;
|
||||
foreach my $t (<$::tree_dir/*>) {
|
||||
$t =~ s@^$::tree_dir/@@;
|
||||
if (-d "$::tree_dir/$t" && $t ne "$::data_dir" && $t ne 'CVS' && -f "$::tree_dir/$t/treedata.pl") {
|
||||
push @::global_tree_list, $t;
|
||||
}
|
||||
}
|
||||
return @::global_tree_list;
|
||||
@ -452,7 +459,8 @@ sub tb_load_treedata($) {
|
||||
${$TreeConfig::{$key}} = undef;
|
||||
}
|
||||
package TreeConfig;
|
||||
do "$tree/treedata.pl" if -r "$tree/treedata.pl";
|
||||
do "$::tree_dir/$tree/treedata.pl"
|
||||
if -r "$::tree_dir/$tree/treedata.pl";
|
||||
package main;
|
||||
for my $key (keys %::default_treedata) {
|
||||
if (defined(${$TreeConfig::{$key}})) {
|
||||
@ -473,7 +481,8 @@ sub tb_load_ignorebuilds($) {
|
||||
|
||||
undef $TreeConfig::ignore_builds;
|
||||
package TreeConfig;
|
||||
do "$tree/ignorebuilds.pl" if -r "$tree/ignorebuilds.pl";
|
||||
do "$::tree_dir/$tree/ignorebuilds.pl"
|
||||
if -r "$::tree_dir/$tree/ignorebuilds.pl";
|
||||
package main;
|
||||
$ignore_builds = $TreeConfig::ignore_builds
|
||||
if (defined($TreeConfig::ignore_builds));
|
||||
@ -487,7 +496,8 @@ sub tb_load_scrapebuilds($) {
|
||||
|
||||
undef $TreeConfig::scrape_builds;
|
||||
package TreeConfig;
|
||||
do "$tree/scrapebuilds.pl" if -r "$tree/scrapebuilds.pl";
|
||||
do "$::tree_dir/$tree/scrapebuilds.pl"
|
||||
if -r "$::tree_dir/$tree/scrapebuilds.pl";
|
||||
package main;
|
||||
$scrape_builds = $TreeConfig::scrape_builds
|
||||
if (defined($TreeConfig::scrape_builds));
|
||||
@ -502,7 +512,8 @@ sub tb_load_warningbuilds($) {
|
||||
|
||||
undef $TreeConfig::warning_builds;
|
||||
package TreeConfig;
|
||||
do "$tree/warningbuilds.pl" if -r "$tree/warningbuilds.pl";
|
||||
do "$::tree_dir/$tree/warningbuilds.pl"
|
||||
if -r "$::tree_dir/$tree/warningbuilds.pl";
|
||||
package main;
|
||||
$warning_builds = $TreeConfig::warning_builds
|
||||
if (defined($TreeConfig::warning_builds));
|
||||
@ -516,7 +527,8 @@ sub tb_load_rules($) {
|
||||
|
||||
undef $TreeConfig::rules_message;
|
||||
package TreeConfig;
|
||||
do "$tree/rules.pl" if -r "$tree/rules.pl";
|
||||
do "$::tree_dir/$tree/rules.pl"
|
||||
if -r "$::tree_dir/$tree/rules.pl";
|
||||
package main;
|
||||
$rules = $TreeConfig::rules_message
|
||||
if (defined($TreeConfig::rules_message));
|
||||
@ -530,7 +542,8 @@ sub tb_load_sheriff($) {
|
||||
|
||||
undef $TreeConfig::current_sheriff;
|
||||
package TreeConfig;
|
||||
do "$tree/sheriff.pl" if -r "$tree/sheriff.pl";
|
||||
do "$::tree_dir/$tree/sheriff.pl"
|
||||
if -r "$::tree_dir/$tree/sheriff.pl";
|
||||
package main;
|
||||
$sheriff = $TreeConfig::current_sheriff
|
||||
if (defined($TreeConfig::current_sheriff));
|
||||
@ -544,7 +557,8 @@ sub tb_load_status($) {
|
||||
|
||||
undef $TreeConfig::status_message;
|
||||
package TreeConfig;
|
||||
do "$tree/status.pl" if -r "$tree/status.pl";
|
||||
do "$::tree_dir/$tree/status.pl"
|
||||
if -r "$::tree_dir/$tree/status.pl";
|
||||
package main;
|
||||
$status = $TreeConfig::status_message
|
||||
if (defined($TreeConfig::status_message));
|
||||
@ -604,11 +618,11 @@ sub tb_loadquickparseinfo {
|
||||
local $_;
|
||||
my $maxdate = $::nowdate if !defined($maxdate);
|
||||
|
||||
return if (! -d "$tree" || ! -r "$tree/build.dat");
|
||||
return if (! -d "$::tree_dir/$tree" || ! -r "$::tree_dir/$tree/build.dat");
|
||||
|
||||
my $ignore_builds = &tb_load_ignorebuilds($tree);
|
||||
|
||||
my $bw = Backwards->new("$tree/build.dat") or die;
|
||||
my $bw = Backwards->new("$::tree_dir/$tree/build.dat") or die;
|
||||
|
||||
my $latest_time = 0;
|
||||
my $tooearly = 0;
|
||||
@ -728,7 +742,7 @@ sub tb_find_build_record {
|
||||
local $_;
|
||||
|
||||
my $log_entry = '';
|
||||
my ($bw) = Backwards->new("$tree/build.dat") or die;
|
||||
my ($bw) = Backwards->new("$::tree_dir/$tree/build.dat") or die;
|
||||
while( $_ = $bw->readline ) {
|
||||
$log_entry = $_ if /$logfile/;
|
||||
}
|
||||
@ -783,7 +797,7 @@ sub tb_trim_logs($$$$) {
|
||||
#
|
||||
my $i = 0;
|
||||
my $tblocks;
|
||||
opendir( D, &shell_escape($tree) );
|
||||
opendir( D, &shell_escape("$::tree_dir/$tree") );
|
||||
while( my $fn = readdir( D ) ){
|
||||
if( $fn =~ /\.(?:gz|brief\.html)$/ ||
|
||||
$fn =~ m/^warn.*?\.html$/){
|
||||
@ -792,7 +806,7 @@ sub tb_trim_logs($$$$) {
|
||||
if( $mtime && ($mtime < $min_date) ){
|
||||
print "$fn\n" if ($verbose > 1);
|
||||
$tblocks += $blocks;
|
||||
unlink( "$tree/$fn" );
|
||||
unlink( "$::tree_dir/$tree/$fn" );
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
@ -810,8 +824,8 @@ sub tb_trim_logs($$$$) {
|
||||
# Trim build.dat
|
||||
#
|
||||
my $builds_removed = 0;
|
||||
open(BD, "<", "$tree/build.dat");
|
||||
open(NBD, ">", "$tree/build.dat.new");
|
||||
open(BD, "<", "$::tree_dir/$tree/build.dat");
|
||||
open(NBD, ">", "$::tree_dir/$tree/build.dat.new");
|
||||
while( <BD> ){
|
||||
my ($endtime,$buildtime,$buildname) = split( /\|/ );
|
||||
if( $buildtime >= $min_date ){
|
||||
@ -824,16 +838,16 @@ sub tb_trim_logs($$$$) {
|
||||
close( BD );
|
||||
close( NBD );
|
||||
|
||||
unlink( "$tree/build.dat.old" );
|
||||
rename( "$tree/build.dat", "$tree/build.dat.old" );
|
||||
rename( "$tree/build.dat.new", "$tree/build.dat" );
|
||||
unlink( "$::tree_dir/$tree/build.dat.old" );
|
||||
rename( "$::tree_dir/$tree/build.dat", "$::tree_dir/$tree/build.dat.old" );
|
||||
rename( "$::tree_dir/$tree/build.dat.new", "$::tree_dir/$tree/build.dat" );
|
||||
|
||||
#
|
||||
# Trim scrape.dat & warnings.dat
|
||||
#
|
||||
for my $file ("scrape.dat", "warnings.dat") {
|
||||
open(BD, "<", "$tree/$file");
|
||||
open(NBD, ">", "$tree/$file.new");
|
||||
open(BD, "<", "$::tree_dir/$tree/$file");
|
||||
open(NBD, ">", "$::tree_dir/$tree/$file.new");
|
||||
while (<BD>) {
|
||||
my ($logfile, $junk) = split (/\|/);
|
||||
my ($buildtime, $processtime, $pid) = split (/\./, $logfile);
|
||||
@ -843,9 +857,9 @@ sub tb_trim_logs($$$$) {
|
||||
}
|
||||
close(BD);
|
||||
close(NBD);
|
||||
unlink("$tree/$file.old");
|
||||
rename("$tree/$file", "$tree/$file.old");
|
||||
rename("$tree/$file.new", "$tree/$file");
|
||||
unlink("$::tree_dir/$tree/$file.old");
|
||||
rename("$::tree_dir/$tree/$file", "$::tree_dir/$tree/$file.old");
|
||||
rename("$::tree_dir/$tree/$file.new", "$::tree_dir/$tree/$file");
|
||||
}
|
||||
|
||||
return $builds_removed;
|
||||
@ -862,7 +876,7 @@ sub load_buildlog($$) {
|
||||
local $_;
|
||||
my $build_list = [];
|
||||
|
||||
my ($bw) = Backwards->new("$treedata->{name}/build.dat") or die;
|
||||
my ($bw) = Backwards->new("$::tree_dir/$treedata->{name}/build.dat") or die;
|
||||
|
||||
my $tooearly = 0;
|
||||
my $internal_build_list;
|
||||
@ -923,7 +937,7 @@ sub load_who {
|
||||
|
||||
my $who_list = [];
|
||||
|
||||
open(WHOLOG, "<", "${$td_ref}->{name}/who.dat");
|
||||
open(WHOLOG, "<", "$::tree_dir/${$td_ref}->{name}/who.dat");
|
||||
while (<WHOLOG>) {
|
||||
chomp;
|
||||
my ($checkin_time, $email) = split /\|/;
|
||||
@ -961,7 +975,7 @@ sub load_scrape {
|
||||
|
||||
my $scrape = {};
|
||||
|
||||
open(SCRAPELOG, "<", "$treedata->{name}/scrape.dat");
|
||||
open(SCRAPELOG, "<", "$::tree_dir/$treedata->{name}/scrape.dat");
|
||||
while (<SCRAPELOG>) {
|
||||
chomp;
|
||||
my @list = split /\|/;
|
||||
@ -987,7 +1001,7 @@ sub load_warnings {
|
||||
|
||||
my $warnings = {};
|
||||
|
||||
open(WARNINGLOG, "<", "$treedata->{name}/warnings.dat");
|
||||
open(WARNINGLOG, "<", "$::tree_dir/$treedata->{name}/warnings.dat");
|
||||
while (<WARNINGLOG>) {
|
||||
chomp;
|
||||
my ($logfile, $warning_count) = split /\|/;
|
||||
@ -1163,7 +1177,7 @@ sub load_notes(\$\$) {
|
||||
my ($td_ref, $bt_ref) = (@_);
|
||||
my @note_array = ();
|
||||
|
||||
open(NOTES, "<", "${$td_ref}->{name}/notes.txt")
|
||||
open(NOTES, "<", "$::tree_dir/${$td_ref}->{name}/notes.txt")
|
||||
or print "<h2>warning: Couldn't open ${$td_ref}->{name}/notes.txt </h2>\n";
|
||||
while (<NOTES>) {
|
||||
chomp;
|
||||
|
||||
@ -55,7 +55,7 @@ if ($form{terse}) {
|
||||
my $first = str2timeAndCheck($start);
|
||||
my $last = str2timeAndCheck($end);
|
||||
if ($first > 0 && $last > 0) {
|
||||
if (open(IN, "<", "$tree/notes.txt")) {
|
||||
if (open(IN, "<", "$::tree_dir/$tree/notes.txt")) {
|
||||
my %stats;
|
||||
while (<IN>) {
|
||||
chop;
|
||||
@ -87,7 +87,7 @@ my $header = "<PRE>\nBuild Time\t\tBuild Name\t\t\tWho\t\t\tNote Time\t\t\tNote\
|
||||
my $first = str2timeAndCheck($start);
|
||||
my $last = str2timeAndCheck($end);
|
||||
if ($first > 0 && $last > 0) {
|
||||
if (open(IN, "<", "$tree/notes.txt")) {
|
||||
if (open(IN, "<", "$::tree_dir/$tree/notes.txt")) {
|
||||
print "<PRE>Notes for $tree\n\nfrom " .
|
||||
time2str($TIMEFORMAT, $first) . " to " .
|
||||
time2str($TIMEFORMAT, $last) . "\n</PRE>";
|
||||
@ -125,7 +125,7 @@ my $header = "<table border=1><th>Build time</th><th>Build name</th><th>Who</th>
|
||||
my $first = str2timeAndCheck($start);
|
||||
my $last = str2timeAndCheck($end);
|
||||
if ($first > 0 && $last > 0) {
|
||||
if (open(IN, "<", "$tree/notes.txt")) {
|
||||
if (open(IN, "<", "$::tree_dir/$tree/notes.txt")) {
|
||||
print "<hr><center><h1>Notes for $tree</H1><H3>from " .
|
||||
time2str($TIMEFORMAT, $first) . " to " .
|
||||
time2str($TIMEFORMAT, $last) . "</H3></center>\n";
|
||||
|
||||
@ -80,7 +80,7 @@ require 'tbglobals.pl';
|
||||
# )
|
||||
|
||||
sub usage {
|
||||
warn "usage: warnings.pl <tree/logfile>\n";
|
||||
warn "Usage: $0 [--debug] tree logfile\n";
|
||||
}
|
||||
|
||||
$ENV{PATH} = "@SETUID_PATH@";
|
||||
@ -88,19 +88,15 @@ $ENV{PATH} = "@SETUID_PATH@";
|
||||
my $debug = 0;
|
||||
$debug = 1, shift @ARGV if $ARGV[0] eq '--debug';
|
||||
|
||||
&usage, die "Error: Not enough arguments\n" if $#ARGV == -1;
|
||||
my $tree = shift @ARGV;
|
||||
my $log_file = shift @ARGV;
|
||||
|
||||
&usage, die "Error: Not enough arguments\n" if (!defined($tree) || !defined($log_file));
|
||||
&usage, die "Logfile does not exist, $log_file\n" unless -e $log_file;
|
||||
|
||||
# Load tinderbox build data.
|
||||
# (So we can find the last successful build for the tree of intestest.)
|
||||
my $log_file = shift @ARGV;
|
||||
# tinderbox/tbglobals.pl uses many shameful globals
|
||||
|
||||
&usage, die "Logfile does not exist, $log_file\n" unless -e $log_file;
|
||||
|
||||
my $tree;
|
||||
($tree, $log_file) = split '/', $log_file;
|
||||
my %form;
|
||||
|
||||
$tree = &require_only_one_tree($tree);
|
||||
$form{tree} = $tree;
|
||||
&tb_load_treedata($tree);
|
||||
@ -174,8 +170,8 @@ my $total_ignored_count = 0;
|
||||
#
|
||||
warn "Parsing $br->{buildname}, $log_file\n" if ($debug);
|
||||
|
||||
my $gz = gzopen("$tree/$log_file", "rb") or
|
||||
die "gzopen($tree/$log_file): $!\n";
|
||||
my $gz = gzopen("$::tree_dir/$tree/$log_file", "rb") or
|
||||
die "gzopen($::tree_dir/$tree/$log_file): $!\n";
|
||||
if ($br->{errorparser} eq 'unix') {
|
||||
gcc_parser($gz, $cvs_root, $tree, $log_file, $file_bases, $file_fullpaths);
|
||||
} elsif ($br->{errorparser} eq 'mac') {
|
||||
@ -189,7 +185,7 @@ my $total_ignored_count = 0;
|
||||
|
||||
# Come up with the temporary filenames for the output
|
||||
#
|
||||
my $warn_file = "$tree/warn$log_file";
|
||||
my $warn_file = "$::tree_dir/$tree/warn$log_file";
|
||||
$warn_file =~ s/\.gz$/.html/;
|
||||
my $warn_file_by_file = $warn_file;
|
||||
$warn_file_by_file =~ s/\.html$/-by-file.html/;
|
||||
@ -213,9 +209,9 @@ my $total_unignored_warnings = $total_warnings_count - $total_ignored_count;
|
||||
if ($total_unignored_warnings > 0) {
|
||||
# Add an entry to the warning log
|
||||
#
|
||||
my $lockfile = "$tree/warnings.sem";
|
||||
my $lockfile = "$::tree_dir/$tree/warnings.sem";
|
||||
my $lock = &lock_datafile($lockfile);
|
||||
my $warn_log = "$tree/warnings.dat";
|
||||
my $warn_log = "$::tree_dir/$tree/warnings.dat";
|
||||
$fh->open($warn_log, ">>") or die "Unable to open $warn_log: $!\n";
|
||||
print $fh "$log_file|$total_unignored_warnings\n";
|
||||
$fh->close;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user