X-Git-Url: https://git.exim.org/buildfarm-server.git/blobdiff_plain/44cd7640f90ae811fb03220cee9008a1de698af1..742cf5c5ec34273cb6bb5414f330851bf65d6a22:/trunk/cgi-bin/pgstatus.pl diff --git a/trunk/cgi-bin/pgstatus.pl b/trunk/cgi-bin/pgstatus.pl index d78aad0..a416f27 100755 --- a/trunk/cgi-bin/pgstatus.pl +++ b/trunk/cgi-bin/pgstatus.pl @@ -21,6 +21,7 @@ use Data::Dumper; use Mail::Send; use Safe; use Time::ParseDate; +use Storable qw(thaw); require "$ENV{BFConfDir}/BuildFarmWeb.pl"; my $buildlogs = "$ENV{BFConfDir}/buildlogs"; @@ -47,6 +48,7 @@ my $branch = $query->param('branch'); my $changed_since_success = $query->param('changed_since_success'); my $changed_this_run = $query->param('changed_files'); my $log_archive = $query->param('logtar'); +my $frozen_sconf = $query->param('frozen_sconf') || ''; my $content = "branch=$branch&res=$res&stage=$stage&animal=$animal&". @@ -101,6 +103,7 @@ if ($ENV{BF_DEBUG} || ($ts > time) || ($ts + 86400 < time ) || (! $secret) ) "tsdiff:$tsdiff\n", "changed_this_run:\n$changed_this_run\n", "changed_since_success:\n$changed_since_success\n", + "frozen_sconf:$frozen_sconf\n", "log:\n",$log; # $query->save(\*TX); close(TX); @@ -151,8 +154,7 @@ if ($calc_sig ne $sig && $calc_sig2 ne $sig) # undo escape-proofing of base64 data and decode it map {tr/$@/+=/; $_ = decode_base64($_); } - ($log, $conf,$changed_this_run,$changed_since_success,$log_archive); - + ($log, $conf,$changed_this_run,$changed_since_success,$log_archive, $frozen_sconf); if ($log =~/Last file mtime in snapshot: (.*)/) { @@ -175,6 +177,8 @@ my $log_file_names; my @log_file_names; my $dirname = "$buildlogs/tmp.$$.unpacklogs"; +my $githeadref; + if ($log_archive) { my $log_handle; @@ -186,26 +190,43 @@ if ($log_archive) mkdir $dirname; @log_file_names = `tar -z -C $dirname -xvf $archname 2>/dev/null`; map {s/\s+//g; } @log_file_names; - my @qnames = @log_file_names; + my @qnames = grep { $_ ne 'githead.log' } @log_file_names; map { $_ = qq("$_"); } @qnames; $log_file_names = '{' . join(',',@qnames) . '}'; + if (-e "$dirname/githead.log" ) + { + open(my $githead,"$dirname/githead.log"); + $githeadref = <$githead>; + chomp $githeadref; + close $githead; + } # unlink $archname; } my $config_flags; -my $container = new Safe; -my $sconf = $conf; -unless ($sconf =~ s/.*(\$Script_Config)/$1/ms ) +my $client_conf; +if ($frozen_sconf) { - $sconf = '$Script_Config={};'; + $client_conf = thaw $frozen_sconf; +} +else +{ + my $container = new Safe; + my $sconf = $conf; + unless ($sconf =~ s/.*(\$Script_Config)/$1/ms ) + { + $sconf = '$Script_Config={};'; + } + $client_conf = $container->reval("$sconf;"); } -my $client_conf = $container->reval("$sconf;"); if ($min_script_version) { $client_conf->{script_version} ||= '0.0'; + my $cli_ver = $client_conf->{script_version} ; + $cli_ver =~ s/^REL_//; my ($minmajor,$minminor) = split(/\./,$min_script_version); - my ($smajor,$sminor) = split(/\./,$client_conf->{script_version}); + my ($smajor,$sminor) = split(/\./,$cli_ver); if ($minmajor > $smajor || ($minmajor == $smajor && $minminor > $sminor)) { print "Status: 460 script version too low\nContent-Type: text/plain\n\n"; @@ -221,8 +242,10 @@ if ($min_script_version) if ($min_web_script_version) { $client_conf->{web_script_version} ||= '0.0'; + my $cli_ver = $client_conf->{web_script_version} ; + $cli_ver =~ s/^REL_//; my ($minmajor,$minminor) = split(/\./,$min_script_version); - my ($smajor,$sminor) = split(/\./,$client_conf->{script_version}); + my ($smajor,$sminor) = split(/\./,$cli_ver); if ($minmajor > $smajor || ($minmajor == $smajor && $minminor > $sminor)) { print "Status: 461 web script version too low\nContent-Type: text/plain\n\n"; @@ -266,8 +289,9 @@ my $logst = <prepare($logst); @@ -287,6 +311,8 @@ $sth->bind_param(11,undef,{ pg_type => DBD::Pg::PG_BYTEA }); $sth->bind_param(12,$config_flags); $sth->bind_param(13,$scm); $sth->bind_param(14,$scmurl); +$sth->bind_param(15,$githeadref); +$sth->bind_param(16,$frozen_sconf,{ pg_type => DBD::Pg::PG_BYTEA }); $sth->execute; $sth->finish; @@ -308,16 +334,17 @@ my $stage_start = $ts; foreach my $log_file( @log_file_names ) { - my $handle; - open($handle,"$dirname/$log_file"); - my $mtime = (stat $handle)[9]; - my $stage_interval = $mtime - $stage_start; - $stage_start = $mtime; - my $ltext = <$handle>; - close($handle); - $ltext =~ s/\x00/\\0/g; - $sth->execute($animal,$dbdate,$branch,$log_file,$ltext, - "$stage_interval seconds"); + next if $log_file =~ /^githead/; + my $handle; + open($handle,"$dirname/$log_file"); + my $mtime = (stat $handle)[9]; + my $stage_interval = $mtime - $stage_start; + $stage_start = $mtime; + my $ltext = <$handle>; + close($handle); + $ltext =~ s/\x00/\\0/g; + $sth->execute($animal,$dbdate,$branch,$log_file,$ltext, + "$stage_interval seconds"); }