use vars qw($dbhost $dbname $dbuser $dbpass $dbport
$template_dir @log_file_names $local_git_clone);
-require "$ENV{BFConfDir}/BuildFarmWeb.pl";
+use FindBin qw($RealBin);
+require "$RealBin/../BuildFarmWeb.pl";
my $template_opts = { INCLUDE_PATH => $template_dir, EVAL_PERL => 1};
my $template = new Template($template_opts);
my ($stage,$changed_this_run,$changed_since_success,$sysinfo,$branch,$scmurl);
my $scm;
my ($git_head_ref, $last_build_git_ref, $last_success_git_ref);
+my ($stage_times, $run_time);
use vars qw($info_row);
};
my $last_build_statement = q{
- select distinct on (sysname) sysname, snapshot, stage, git_head_ref
- from build_status
- where sysname = ? and snapshot < ?
- order by sysname, snapshot desc limit 1
+ select git_head_ref
+ from build_status
+ where sysname = ? and branch = ? and snapshot =
+ (select max(snapshot)
+ from build_status
+ where sysname = ? and branch = ? and snapshot < ?)
};
my $last_success_statement = q{
- select distinct on (sysname) sysname, snapshot, git_head_ref
- from build_status
- where sysname = ? and snapshot < ? and stage = 'OK'
- order by sysname, snapshot desc limit 1
+ select git_head_ref
+ from build_status
+ where sysname = ? and branch = ? and snapshot =
+ (select max(snapshot)
+ from build_status
+ where sysname = ? and branch = ? and snapshot < ? and stage = 'OK')
};
my $sth=$db->prepare($statement);
$sth->execute($system,$logdate);
my $row=$sth->fetchrow_arrayref;
- $sth->finish;
+ $branch = $row->[5];
$git_head_ref = $row->[9];
+ $sth->finish;
my $last_build_row;
if ($git_head_ref)
{
$last_build_row =
$db->selectrow_hashref($last_build_statement,undef,
- $system,$logdate);
+ $system, $branch,$system,$branch,$logdate);
$last_build_git_ref = $last_build_row->{git_head_ref}
if $last_build_row;
{
$last_success_row =
$db->selectrow_hashref($last_success_statement,undef,
- $system,$logdate);
+ $system,$branch,$system,$branch,$logdate);
$last_success_git_ref = $last_success_row->{git_head_ref}
if $last_success_row;
}
$stage=$row->[2] || "unknown";
$changed_this_run = $row->[3];
$changed_since_success = $row->[4];
- $branch = $row->[5];
my $log_file_names = $row->[6];
$scm = $row->[7];
$scm ||= 'cvs'; # legacy scripts
$scmurl = $row->[8];
+ $scmurl = undef unless $scmurl =~ /^http/; # slight sanity check
+ $scmurl = 'http://git.postgresql.org/gitweb?p=postgresql.git;a=commit;h='
+ if ($scmurl eq 'http://git.postgresql.org/git/postgresql.git');
$log_file_names =~ s/^\{(.*)\}$/$1/;
@log_file_names=split(',',$log_file_names)
if $log_file_names;
select operating_system, os_version,
compiler, compiler_version,
architecture,
- replace(owner_email,'\@',' [ a t ] ') as owner_email,
+ replace(owner_email,E'\@',' [ a t ] ') as owner_email,
sys_notes_ts::date AS sys_notes_date, sys_notes
from buildsystems
where status = 'approved'
$info_row->{compiler_version} = $latest_personality->[1];
}
$sth->finish;
+ my $stage_times_query = q{
+ select log_stage, stage_duration
+ from build_status_log
+ where sysname = ? and snapshot = ?
+ };
+ $stage_times =
+ $db->selectall_hashref($stage_times_query,'log_stage',undef,
+ $system,$logdate);
+ $stage_times_query = q{
+ select sum(stage_duration)
+ from build_status_log
+ where sysname = ? and snapshot = ?
+ };
+ ($run_time) = $db->selectrow_array($stage_times_query,undef,
+ $system,$logdate);
$db->disconnect;
}
system => $system,
branch => $branch,
stage => $stage,
+ stage_times => $stage_times,
+ run_time => $run_time,
urldt => $logdate,
log_file_names => \@log_file_names,
conf => $conf,
my @changed_rows;
my %commits;
my @commit_logs;
- my $gitcmd = "TZ=UTC GIT_DIR=$local_git_clone git log --stat --date=local";
+ my $gitcmd = "TZ=UTC GIT_DIR=$local_git_clone git log --date=local";
foreach (@lines)
{
next if ($scm eq 'cvs' and ! m!^(pgsql|master|REL\d_\d_STABLE)/!);
}
if ($git_from && $git_to)
{
- my $format =
- 'commit %H%nAuthor: %cN <%ce>%nDate: %cd UTC%n%n%w(80,4,4)%s%n%n%b%n';
+ my $format = 'commit %h %cd UTC%w(160,2,2)%s';
my $gitlog = `$gitcmd --pretty=format:"$format" $git_from..$git_to 2>&1`;
@commit_logs = split(/(?=^commit)/m,$gitlog)
}
else
{
# normally we expect to have the git refs. this is just a fallback.
- my $format =
- 'epoch: %at%ncommit %H%nAuthor: %cN <%ce>%nDate: %cd UTC%n%n' .
- '%w(80,4,4)%s%n%n%b%n';
+ my $format = 'epoch: %at%ncommit %h %cd UTC%w(160,2,2)%s';
foreach my $commit ( keys %commits )
{
my $commitlog =
}
return (\@changed_rows,\@commit_logs);
}
-