X-Git-Url: https://git.exim.org/buildfarm-server.git/blobdiff_plain/cf1348db8bac78b578b1b7780978d56f688105b4..9bfbcd9c7aba93517b3d848bc2378d20378d3b0a:/cgi-bin/show_log.pl diff --git a/cgi-bin/show_log.pl b/cgi-bin/show_log.pl index 637599a..ab3d3cd 100755 --- a/cgi-bin/show_log.pl +++ b/cgi-bin/show_log.pl @@ -16,7 +16,8 @@ use CGI; 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); @@ -38,6 +39,7 @@ my $conf = ""; 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); @@ -57,28 +59,33 @@ if ($system && $logdate) }; 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; + $branch = $row->[5]; + $git_head_ref = $row->[9]; $sth->finish; - $git_head_ref = $row>[9]; 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; @@ -88,7 +95,7 @@ if ($system && $logdate) { $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; } @@ -97,11 +104,13 @@ if ($system && $logdate) $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; @@ -111,7 +120,7 @@ if ($system && $logdate) 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' @@ -135,6 +144,21 @@ if ($system && $logdate) $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; } @@ -157,6 +181,8 @@ $template->process('log.tt', system => $system, branch => $branch, stage => $stage, + stage_times => $stage_times, + run_time => $run_time, urldt => $logdate, log_file_names => \@log_file_names, conf => $conf, @@ -166,6 +192,9 @@ $template->process('log.tt', changed_this_run_logs => $changed_this_run_logs, changed_since_success_logs => $changed_since_success_logs, info_row => $info_row, + git_head_ref => $git_head_ref, + last_build_git_ref => $last_build_git_ref, + last_success_git_ref => $last_success_git_ref, }); @@ -184,7 +213,7 @@ sub process_changed 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)/!); @@ -193,21 +222,18 @@ sub process_changed } 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 $gitlog = `$gitcmd --pretty="$format" $git_from..$git_to 2>&1`; + 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 { - my $format = - 'epoch: %at%ncommit %H%nAuthor: %cN <%ce>%nDate: %cd UTC%n%n' . - '%w(80,4,4)%s%n%n%b%n'; + # normally we expect to have the git refs. this is just a fallback. + my $format = 'epoch: %at%ncommit %h %cd UTC%w(160,2,2)%s'; foreach my $commit ( keys %commits ) { my $commitlog = - `$gitcmd -n 1--pretty="$format" $commit 2>&1`; + `$gitcmd -n 1 --pretty=format:"$format" $commit 2>&1`; push(@commit_logs,$commitlog); } @commit_logs = reverse (sort @commit_logs); @@ -215,4 +241,3 @@ sub process_changed } return (\@changed_rows,\@commit_logs); } -