Another instance of virtual bug that would strip plus from branch names.
[buildfarm-server.git] / cgi-bin / show_members.pl
index 2b6e0be40d7cac8e04c305d7a3f6e0c16e9f4544..f35c66acae2656232828a17f9a6241b35e055bc8 100755 (executable)
@@ -1,17 +1,22 @@
 #!/usr/bin/perl
 
+=comment
+
+Copyright (c) 2003-2010, Andrew Dunstan
+
+See accompanying License file for license details
+
+=cut 
+
 use strict;
 use CGI;
 use DBI;
 use Template;
 
-
-
 use vars qw($dbhost $dbname $dbuser $dbpass $dbport $template_dir $sort_by);
 
-
-require "$ENV{BFConfDir}/BuildFarmWeb.pl";
-#require "BuildFarmWeb.pl";
+use FindBin qw($RealBin);
+require "$RealBin/../BuildFarmWeb.pl";
 
 my $query = new CGI;
 my %sort_ok = ('name' => 'lower(name)' , 
@@ -26,27 +31,32 @@ my $dsn="dbi:Pg:dbname=$dbname";
 $dsn .= ";host=$dbhost" if $dbhost;
 $dsn .= ";port=$dbport" if $dbport;
 
-my $db = DBI->connect($dsn,$dbuser,$dbpass);
+my $db = DBI->connect($dsn,$dbuser,$dbpass,{pg_expand_array => 0});
 
 # there is possibly some redundancy in this query, but it makes
 # a lot of the processing simpler.
 
-my $statement = <<EOS;
+my $statement = q{
 
   select name, operating_system, os_version, compiler, compiler_version, owner_email, 
+    sys_notes_ts::date AS sys_notes_date, sys_notes,
     architecture as arch, ARRAY(
-                               select branch || ':' || 
-                                      extract(days from now() - latest_snapshot)
-                               from build_status_latest l 
+                               select branch || E':' || 
+                                      extract(days from now() - l.snapshot)
+                               from latest_snapshot l 
                                where l.sysname = s.name
                                order by branch <> 'HEAD', branch desc 
-                               ) as branches 
+                               ) as branches, 
+                         ARRAY(select compiler_version || E'\t' ||  os_version || E'\t' || effective_date
+                               from personality p
+                               where p.name = s.name 
+                               order by effective_date
+                               ) as personalities
   from buildsystems s
   where status = 'approved'
-  order by $sort_by
+};
 
-EOS
-;
+$statement .= "order by $sort_by";
 
 my $statrows=[];
 my $sth=$db->prepare($statement);
@@ -54,6 +64,21 @@ $sth->execute;
 while (my $row = $sth->fetchrow_hashref)
 {
     $row->{branches} =~ s/^\{(.*)\}$/$1/;
+    my $personalities = $row->{personalities};
+    $personalities =~ s/^\{(.*)\}$/$1/;
+    my @personalities = split(',',$personalities);
+    $row->{personalities} = [];
+    foreach my $personality (@personalities)
+    {
+       $personality =~ s/^"(.*)"$/$1/;
+       $personality =~ s/\\(.)/$1/g;
+       
+       my ($compiler_version, $os_version, $effective_date) = split(/\t/,$personality);
+       $effective_date =~ s/ .*//;
+       push(@{$row->{personalities}}, {compiler_version => $compiler_version, 
+                                       os_version => $os_version, 
+                                       effective_date => $effective_date });
+    }
     $row->{owner_email} =~ s/\@/ [ a t ] /;
     push(@$statrows,$row);
 }
@@ -74,4 +99,3 @@ $template->process('members.tt',
                {statrows=>$statrows});
 
 exit;
-