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:
cls%seawood.org 2007-12-19 20:00:54 +00:00
parent c129237fba
commit cfc1fe9192
14 changed files with 131 additions and 121 deletions

View File

@ -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

View File

@ -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";

View File

@ -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]);
}

View File

@ -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) {

View File

@ -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";

View File

@ -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";

View File

@ -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";
}

View File

@ -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++;

View File

@ -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);

View File

@ -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";

View File

@ -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);

View File

@ -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;

View File

@ -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";

View File

@ -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;