undo reorganization
authorAndrew Dunstan <andrew@dunslane.net>
Sat, 18 Dec 2010 22:12:46 +0000 (22:12 +0000)
committerAndrew Dunstan <andrew@dunslane.net>
Sat, 18 Dec 2010 22:12:46 +0000 (22:12 +0000)
26 files changed:
templates/bfwrapper.tt.ttc [new file with mode: 0644]
templates/dashboard.tt.ttc [new file with mode: 0644]
templates/dyn/history.tt [new file with mode: 0644]
templates/dyn/status.tt [new file with mode: 0644]
templates/history.tt [new file with mode: 0644]
templates/index.tt [new file with mode: 0644]
templates/log.tt [new file with mode: 0644]
templates/members.tt [new file with mode: 0644]
templates/page.tt [new file with mode: 0644]
templates/register-form.tt [new file with mode: 0644]
templates/register-incomplete.tt [new file with mode: 0644]
templates/register-ok.tt [new file with mode: 0644]
templates/status.tt [new file with mode: 0644]
trunk/templates/bfwrapper.tt.ttc [deleted file]
trunk/templates/dashboard.tt.ttc [deleted file]
trunk/templates/dyn/history.tt [deleted file]
trunk/templates/dyn/status.tt [deleted file]
trunk/templates/history.tt [deleted file]
trunk/templates/index.tt [deleted file]
trunk/templates/log.tt [deleted file]
trunk/templates/members.tt [deleted file]
trunk/templates/page.tt [deleted file]
trunk/templates/register-form.tt [deleted file]
trunk/templates/register-incomplete.tt [deleted file]
trunk/templates/register-ok.tt [deleted file]
trunk/templates/status.tt [deleted file]

diff --git a/templates/bfwrapper.tt.ttc b/templates/bfwrapper.tt.ttc
new file mode 100644 (file)
index 0000000..19faeb3
--- /dev/null
@@ -0,0 +1,32 @@
+#------------------------------------------------------------------------
+# Compiled template generated by the Template Toolkit version 2.14
+#------------------------------------------------------------------------
+
+Template::Document->new({
+    METADATA => {
+        'modtime' => '1107104454',
+        'name' => 'bfwrapper.tt',
+    },
+    BLOCK => sub {
+        my $context = shift || die "template sub called without context\n";
+        my $stash   = $context->stash;
+        my $output  = '';
+        my $error;
+        
+        eval { BLOCK: {
+    $output .=  "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n    <title>PostgreSQL BuildFarm Status</title>\n    <link rel=\"stylesheet\" rev=\"stylesheet\" href=\"/inc/pgbf.css\" charset=\"utf-8\"\n />\n    <style type=\"text/css\"><!--\n    li#status a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat \n100% -20px; } \n    li#status { background: url(/inc/b/l.png) no-repeat 0% -20px; }\n    --></style>\n</head>\n<body>\n<div id=\"wrapper\">\n<div id=\"banner\">\n<a href=\"/index.html\"><img src=\"/inc/pgbuildfarm-banner.png\" alt=\"PostgreSQL Bui\nldFarm\" width=\"800\" height=\"73\" /></a>\n<div id=\"nav\">\n<ul>\n    <li id=\"home\"><a href=\"/index.html\" title=\"PostgreSQL BuildFarm Home\">Home</\na></li>\n    <li id=\"status\"><a href=\"/cgi-bin/show_status.pl\" title=\"Current results\">St\natus</a></li>\n    <li id=\"members\"><a href=\"/cgi-bin/show_members.pl\" title=\"Platforms tested\"\n>Members</a></li>\n    <li id=\"register\"><a href=\"/register.html\" title=\"Join PostgreSQL BuildFarm\"\n>Register</a></li>\n    <li id=\"pgfoundry\"><a href=\"http://pgfoundry.org/projects/pgbuildfarm/\">PGFo\nundry</a></li>\n    <li id=\"postgresql.org\"><a href=\"http://www.postgresql.org\">PostgreSQL.org</\na></li>\n</ul>\n</div><!-- nav -->\n</div><!-- banner -->\n<div id=\"main\">\n";
+    #line 38 "/home/community/pgbuildfarm/templates/bfwrapper.tt"
+    $output .=  $stash->get('content');
+    $output .=  "\n</div><!-- main -->\n</div><!-- wrapper -->\n  </body>\n</html>\n";
+        } };
+        if ($@) {
+            $error = $context->catch($@, \$output);
+            die $error unless $error->type eq 'return';
+        }
+    
+        return $output;
+    },
+    DEFBLOCKS => {
+
+    },
+});
diff --git a/templates/dashboard.tt.ttc b/templates/dashboard.tt.ttc
new file mode 100644 (file)
index 0000000..91c772a
--- /dev/null
@@ -0,0 +1,312 @@
+#------------------------------------------------------------------------
+# Compiled template generated by the Template Toolkit version 2.14
+#------------------------------------------------------------------------
+
+Template::Document->new({
+    METADATA => {
+        'modtime' => '1127835909',
+        'name' => 'dashboard.tt',
+    },
+    BLOCK => sub {
+        my $context = shift || die "template sub called without context\n";
+        my $stash   = $context->stash;
+        my $output  = '';
+        my $error;
+        
+        eval { BLOCK: {
+    #line 1 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $stash->set('flag_imgs', { 'perl' => '/img/camel.png', 'python' => '/img/python.png', 'debug' => '/img/bug.png', 'pam' => '/img/pam.png', 'cassert' => '/img/cassert.png', 'openssl' => '/img/ssl_icon.gif', 'nls' => '/img/translateicon.gif', 'krb5' => '/img/krb.gif', 'tcl' => '/img/tcl.png', 'thread-safety' => '/img/threads.gif', 'integer-datetimes' => '/img/days.png'  });
+    
+    
+    $output .=  "\n<div id=\"main\">\n    <h1>PostgreSQL BuildFarm Status</h1>\n    <p>\n      Shown here is the latest status of each farm member \n      for each branch it has reported on in the last 30 days.\n    </p>\n    <p>\n       Use the farm member link for history of that member \n       on the relevant branch.\n    </p>\n<table><tr><th class=\"head\" rowspan=\"2\">Legend</th>\n";
+    #line 45 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    
+    # FOREACH 
+    do {
+        my ($value, $error, $oldloop);
+        my $list = $stash->get('flag_imgs');
+        
+        unless (UNIVERSAL::isa($list, 'Template::Iterator')) {
+            $list = Template::Config->iterator($list)
+                || die $Template::Config::ERROR, "\n"; 
+        }
+    
+        ($value, $error) = $list->get_first();
+        eval { $oldloop = $stash->get('loop') };
+        $stash->set('loop', $list);
+        eval {
+    LOOP:   while (! $error) {
+                $stash->{'flagset'} = $value;
+    $output .=  "\n<td><img src=\"";
+    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['flagset', 0, 'value', 0]);
+    $output .=  "\" title=\"";
+    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['flagset', 0, 'key', 0]);
+    $output .=  "\" alt=\"";
+    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['flagset', 0, 'key', 0]);
+    $output .=  "\" height=\"16\" width=\"16\" class=\"inline\"  align=\"center\"/> =  ";
+    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['flagset', 0, 'key', 0]);
+    $output .=  "</td>\n";
+    #line 44 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    if ($stash->get(['loop', 0, 'count', 0]) eq 5) {
+    $output .=  "</tr><tr>";
+    }
+    
+    $output .=  "\n";;
+                ($value, $error) = $list->get_next();
+            }
+        };
+        $stash->set('loop', $oldloop);
+        die $@ if $@;
+        $error = 0 if $error && $error eq Template::Constants::STATUS_DONE;
+        die $error if $error;
+    };
+    
+    $output .=  "\n</tr></table>\n<br />\n    <table cellspacing=\"0\">\n";
+    #line 49 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $stash->set('brch', '');
+    $output .=  "\n";
+    #line 81 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    
+    # FOREACH 
+    do {
+        my ($value, $error, $oldloop);
+        my $list = $stash->get('statrows');
+        
+        unless (UNIVERSAL::isa($list, 'Template::Iterator')) {
+            $list = Template::Config->iterator($list)
+                || die $Template::Config::ERROR, "\n"; 
+        }
+    
+        ($value, $error) = $list->get_first();
+        eval { $oldloop = $stash->get('loop') };
+        $stash->set('loop', $list);
+        eval {
+    LOOP:   while (! $error) {
+                $stash->{'row'} = $value;
+    $output .=  "\n";
+    #line 54 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    if ($stash->get(['row', 0, 'branch', 0]) ne $stash->get('brch')) {
+    #line 51 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $stash->set('brch', $stash->get(['row', 0, 'branch', 0]));
+    $output .=  "\n<tr><th class=\"head\" colspan=\"4\">Branch: ";
+    #line 52 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get('brch');
+    $output .=  "</th></tr>\n<tr><th>Alias</th><th>System</th><th>Status</th><th>Flags</th></tr>\n";
+    }
+    
+    $output .=  "\n<tr ";
+    #line 55 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $context->process('cl', { 'bgfor' => $stash->get(['row', 0, 'stage', 0]) });
+    $output .=  ">\n    <td><a \n    href=\"show_history.pl?nm=";
+    #line 57 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'sysname', 0]);
+    $output .=  "&amp;br=";
+    #line 57 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'branch', 0]);
+    $output .=  "\"\n    title=\"History\"\n    >";
+    #line 59 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'sysname', 0]);
+    $output .=  "</a></td>\n    <td><span class=\"opsys\">";
+    #line 60 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'operating_system', 0]);
+    $output .=  "\n            ";
+    #line 61 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'os_version', 0]);
+    $output .=  "</span> <span class=\"compiler\">";
+    #line 63 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'compiler', 0]);
+    $output .=  "\n            ";
+    #line 64 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'compiler_version', 0]);
+    $output .=  "</span> <span class=\"arch\">";
+    #line 66 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'architecture', 0]);
+    $output .=  "</span></td>\n    <td class=\"status\">";
+    #line 69 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    
+    # FILTER
+    $output .=  do {
+        my $output = '';
+        my $filter = $context->filter('replace', [ '\s', '&nbsp;' ])
+                  || $context->throw($context->error);
+    
+    $output .=  $stash->get(['row', 0, 'when_ago', 0]);
+        
+        &$filter($output);
+    };
+    
+    $output .=  "&nbsp;ago&nbsp;\n            ";
+    #line 70 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'stage', 0]);
+    $output .=  "            <a href=\"show_log.pl?nm=";
+    #line 73 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $stash->get(['row', 0, 'sysname', 0]);
+    $output .=  "&amp;dt=";
+    #line 75 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    
+    # FILTER
+    $output .=  do {
+        my $output = '';
+        my $filter = $context->filter('uri')
+                  || $context->throw($context->error);
+    
+    $output .=  $stash->get(['row', 0, 'snapshot', 0]);
+        
+        &$filter($output);
+    };
+    
+    $output .=  "\">";
+    #line 77 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    if ($stash->get(['row', 0, 'stage', 0]) ne 'OK') {
+    $output .=  "Details";
+    }
+    else {
+    $output .=  "Config";
+    }
+    
+    $output .=  "</a></td>\n\n    <td class=\"flags\">";
+    #line 79 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    
+    # FOREACH 
+    do {
+        my ($value, $error, $oldloop);
+        my $list = $stash->get(['row', 0, 'build_flags', 0, 'split', 0, 'sort', 0]);
+        
+        unless (UNIVERSAL::isa($list, 'Template::Iterator')) {
+            $list = Template::Config->iterator($list)
+                || die $Template::Config::ERROR, "\n"; 
+        }
+    
+        ($value, $error) = $list->get_first();
+        eval { $oldloop = $stash->get('loop') };
+        $stash->set('loop', $list);
+        eval {
+    LOOP:   while (! $error) {
+                $stash->{'flag'} = $value;
+    #line 79 "/home/community/pgbuildfarm/templates/dashboard.tt"
+    $output .=  $context->process('img');;
+                ($value, $error) = $list->get_next();
+            }
+        };
+        $stash->set('loop', $oldloop);
+        die $@ if $@;
+        $error = 0 if $error && $error eq Template::Constants::STATUS_DONE;
+        die $error if $error;
+    };
+    
+    $output .=  "</td>\n</tr>\n";;
+                ($value, $error) = $list->get_next();
+            }
+        };
+        $stash->set('loop', $oldloop);
+        die $@ if $@;
+        $error = 0 if $error && $error eq Template::Constants::STATUS_DONE;
+        die $error if $error;
+    };
+    
+    $output .=  "\n    </table>\n</div>\n\n";
+        } };
+        if ($@) {
+            $error = $context->catch($@, \$output);
+            die $error unless $error->type eq 'return';
+        }
+    
+        return $output;
+    },
+    DEFBLOCKS => {
+        'cl' => sub {
+            my $context = shift || die "template sub called without context\n";
+            my $stash   = $context->stash;
+            my $output  = '';
+            my $error;
+            
+            eval { BLOCK: {
+        $output .=  " class=\"";
+        #line 27 "/home/community/pgbuildfarm/templates/dashboard.tt"
+        
+        # SWITCH
+        do {
+            my $result = $stash->get('bgfor');
+            my $match;
+            SWITCH: {
+        $match = 'OK';
+        $match = [ $match ] unless ref $match eq 'ARRAY';
+        if (grep(/^$result$/, @$match)) {
+        $output .=  "pass";
+            last SWITCH;
+        }
+        $match = 'ContribCheck';
+        $match = [ $match ] unless ref $match eq 'ARRAY';
+        if (grep(/^$result$/, @$match)) {
+        $output .=  "warn";
+            last SWITCH;
+        }
+        $match = [ 'Check', 'InstallCheck' ];
+        $match = [ $match ] unless ref $match eq 'ARRAY';
+        if (grep(/^$result$/, @$match)) {
+        $output .=  "warnx";
+            last SWITCH;
+        }
+        $output .=  "fail";
+            }
+        };
+        
+        $output .=  "\"";
+            } };
+            if ($@) {
+                $error = $context->catch($@, \$output);
+                die $error unless $error->type eq 'return';
+            }
+        
+            return $output;
+        },
+        'img' => sub {
+            my $context = shift || die "template sub called without context\n";
+            my $stash   = $context->stash;
+            my $output  = '';
+            my $error;
+            
+            eval { BLOCK: {
+        #line 22 "/home/community/pgbuildfarm/templates/dashboard.tt"
+        if ($stash->get('flag') eq 'depend' || $stash->get('flag') eq 'gnu-ld') {
+        
+        }
+        elsif ($stash->get(['flag_imgs', 0, $stash->get('flag'), 0])) {
+        #line 22 "/home/community/pgbuildfarm/templates/dashboard.tt"
+        
+        # FILTER
+        $output .=  do {
+            my $output = '';
+            my $filter = $context->filter('collapse')
+                      || $context->throw($context->error);
+        
+        $output .=  "<img src=\"";
+        #line 19 "/home/community/pgbuildfarm/templates/dashboard.tt"
+        $output .=  $stash->get(['flag_imgs', 0, $stash->get('flag'), 0]);
+        $output .=  "\" \n                             title=\"";
+        #line 20 "/home/community/pgbuildfarm/templates/dashboard.tt"
+        $output .=  $stash->get('flag');
+        $output .=  "\" alt=\"";
+        #line 20 "/home/community/pgbuildfarm/templates/dashboard.tt"
+        $output .=  $stash->get('flag');
+        $output .=  "\" \n                             height=\"16\" width=\"16\" class=\"inline\" align=\"bottom\" />  \n     ";
+            
+            &$filter($output);
+        };
+        
+        }
+        
+            } };
+            if ($@) {
+                $error = $context->catch($@, \$output);
+                die $error unless $error->type eq 'return';
+            }
+        
+            return $output;
+        },
+    },
+});
diff --git a/templates/dyn/history.tt b/templates/dyn/history.tt
new file mode 100644 (file)
index 0000000..4713047
--- /dev/null
@@ -0,0 +1,69 @@
+[%- BLOCK cl %] class="[% SWITCH bgfor -%]
+  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
+[%- END -%]
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <title>PostgreSQL BuildFarm History</title>
+    <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
+       <style type="text/css"><!--
+       li#status a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; } 
+       li#status { background: url(/inc/b/l.png) no-repeat 0% -20px; }
+       --></style>
+</head>
+<body class="history">
+<div id="wrapper">
+<div id="banner">
+<a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
+<div id="nav">
+<ul>
+    <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
+    <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
+    <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
+</ul>
+</div><!-- nav -->
+</div><!-- banner -->
+<div id="main">
+<h1>PostgreSQL BuildFarm Status History</h1>
+<table cellspacing="0">
+    <tr><th class="head" colspan="3">System Detail</th></tr>
+    <tr class="member"><th>Farm member</th><td>[% member %]</td></tr>
+    <tr><th>OS</th><td>[% statrows.0.operating_system %] [% statrows.0.os_version %]</td></tr>
+<!--    <tr><th>OS Version</th><td>[% statrows.0.os_version %]</td></tr> -->
+    <tr><th>Compiler</th><td>[% statrows.0.compiler %] [% statrows.0.compiler_version %]</td></tr>
+<!--    <tr><th>Compiler Version</th><td>[% statrows.0.compiler_version %]</td></tr> -->
+    <tr><th>Architecture</th><td>[% statrows.0.architecture %]</td></tr>
+    </table>
+    <h3>Branch: [% branch %][% IF statrows.size >= 240 %] (last 240 entries shown)[% END %]</h3>
+[% BLOCK stdet %]
+<tr [% PROCESS cl bgfor=row.stage %]>
+    <td>[%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;</td>
+    <td class="status">[% row.stage -%]</td>
+    <td class="status"><a href="show_log.pl?nm=
+               [%- row.sysname %]&amp;dt=
+               [%- row.snapshot | uri %]">
+                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
+
+</tr>
+[% END %]
+<table border="0"> <tr>
+[% FOREACH offset IN [0,1,2] %][% low = offset * statrows.size / 3 ; high = -1 + (offset + 1) * statrows.size / 3 %] 
+[% TRY %][% PERL %] 
+  use POSIX qw(floor); 
+  $stash->set(low => floor($stash->get('low'))); 
+  $stash->set(high => floor($stash->get('high'))); 
+[% END %][% CATCH %]<!-- [% error.info %] --> [% END %]
+    <td><table cellspacing="0">
+<!--      <tr><th colspan=3>low = [% low %], high = [% high %]</th></tr> -->
+        [% FOREACH xrow IN statrows.slice(low,high) %][% PROCESS stdet row=xrow %][% END %]
+    </table></td>
+[% END %]
+</table>
+    </div><!-- main -->
+    </div><!-- wrapper -->
+  </body>
+</html>
diff --git a/templates/dyn/status.tt b/templates/dyn/status.tt
new file mode 100644 (file)
index 0000000..f17e415
--- /dev/null
@@ -0,0 +1,80 @@
+[%- BLOCK cl %] class=" [% SWITCH bgfor -%]
+  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
+[%- END -%]
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+       <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <title>PostgreSQL BuildFarm Status</title>
+    <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
+       <style type="text/css"><!--
+       li#status a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; } 
+       li#status { background: url(/inc/b/l.png) no-repeat 0% -20px; }
+       --></style>
+</head>
+<body>
+<div id="wrapper">
+<div id="banner">
+<a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
+<div id="nav">
+<ul>
+    <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
+    <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
+    <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
+    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
+    <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
+    <li id="postgresql.org"><a href="http://www.postgresql.org">PostgreSQL.org</a></li>
+</ul>
+</div><!-- nav -->
+</div><!-- banner -->
+<div id="main">
+    <h1>PostgreSQL BuildFarm Status</h1>
+    <p>
+      Shown here is the latest status of each farm member 
+      for each branch it has reported on in the last 30 days.
+    </p>
+    <p>
+       Use the farm member link for history of that member 
+       on the relevant branch.
+    </p>
+    <table cellspacing="0">
+[% brch = "" %]
+[% FOREACH row IN statrows %]
+[% IF row.branch != brch ; brch = row.branch %]
+<tr><th class="head" colspan="3">Branch: [% brch %]</th></tr>
+<tr><th>Alias</th><th>System</th><th>Status</th></tr>
+[% END %]
+<tr [% PROCESS cl bgfor=row.stage %]>
+    <td><a 
+    href="show_history.pl?nm=[% row.sysname %]&amp;br=[% row.branch %]"
+    title="History"
+    >[% row.sysname %]</a></td>
+    <td><span class="opsys">[% row.operating_system %]
+            [% row.os_version %]</span> <span class="compiler">
+            [%- row.compiler %]
+            [% row.compiler_version %]</span> <span class="arch">
+            [%- row.architecture %]</span></td>
+    <td class="status">
+            [%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;
+            [% row.stage -%]
+            <a href="show_log.pl?nm=
+               [%- row.sysname %]&amp;dt=
+               [%- row.snapshot | uri %]">
+                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
+
+</tr>
+[% END %]
+    </table>
+</div><!-- main -->
+</div><!-- wrapper -->
+  </body>
+</html>
+
+
+
+
+
+
+
+
diff --git a/templates/history.tt b/templates/history.tt
new file mode 100644 (file)
index 0000000..dd050ed
--- /dev/null
@@ -0,0 +1,56 @@
+[%- BLOCK cl %] class="[% SWITCH bgfor -%]
+  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
+[%- END -%]
+[% WRAPPER 'page.tt' 
+       title = 'PostgreSQL BuildFarm History'
+       bodyclass = 'history'
+       pagebutton = 'none'
+%]
+<h1>PostgreSQL BuildFarm Status History</h1>
+  <table cellspacing="0">
+    <tr><th class="head" colspan="3">System Detail</th></tr>
+    <tr class="member"><th>Farm member</th><td>[% member %]</td></tr>
+    <tr><th>OS</th><td>[% statrows.0.operating_system %] [% statrows.0.os_version %]</td></tr>
+    <tr><th>Compiler</th><td>[% statrows.0.compiler %] [% statrows.0.compiler_version %]</td></tr>
+    <tr><th>Architecture</th><td>[% statrows.0.architecture %]</td></tr>
+    <tr><th>Owner</th><td>[% statrows.0.owner_email %]</td></tr>
+  </table>
+[% IF statrows.0.sys_notes %]
+    <br />
+    <table>
+     <tr>
+       <th class="head" rowspan="2">System Notes</th>
+       <th>Date</th>
+       <th>Notes</th>
+     </tr>
+     <tr>
+      <td>[% statrows.0.sys_notes_date %]</td>
+      <td>[% statrows.0.sys_notes %]</td>
+     </tr>
+   </table>
+[% END %]
+  <h3>Branch: [% branch %][% IF statrows.size >= hm %] (last [% hm %] entries shown)[% END %]</h3>
+[% BLOCK stdet %]
+    <tr [% PROCESS cl bgfor=row.stage %]>
+      <td>[%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;</td>
+      <td class="status">[% row.stage -%]</td>
+      <td class="status"><a href="show_log.pl?nm=
+               [%- row.sysname %]&amp;dt=
+               [%- row.snapshot | uri %]">
+                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
+
+    </tr>
+[% END %]
+<table border="0"> <tr>
+  [% FOREACH offset IN [0,1,2] %][% low = offset * statrows.size / 3 ; high = -1 + (offset + 1) * statrows.size / 3 %] 
+    [% TRY %][% PERL %] 
+      use POSIX qw(floor); 
+      $stash->set(low => floor($stash->get('low'))); 
+      $stash->set(high => floor($stash->get('high'))); 
+    [% END %][% CATCH %]<!-- [% error.info %] --> [% END %]
+    <td><table cellspacing="0">
+        [% FOREACH xrow IN statrows.slice(low,high) %][% PROCESS stdet row=xrow %][% END %]
+    </table></td>
+  [% END %]
+</table>
+[% END %]
diff --git a/templates/index.tt b/templates/index.tt
new file mode 100644 (file)
index 0000000..ad99339
--- /dev/null
@@ -0,0 +1,38 @@
+[%#
+
+       Use this template to generate the index page, with something like:
+
+               tpage index.tt > ../htdocs/index.html
+
+-%]
+[% WRAPPER 'page.tt' 
+       title = 'PostgreSQL BuildFarm'
+       bodyclass = 'none'
+       pagebutton = 'home'
+%]
+<!-- html generated from index.tt -->
+<p>
+The PostgreSQL build farm is a distributed system for automatically testing
+changes in the source code for PostgreSQL as they occur, on a wide variety
+of platforms. This server is the central repository for the results of those
+tests.
+</p>
+<p>
+To see the current status of tests on various branches, check the
+<a href="/cgi-bin/show_status.pl" title="Status Page">Status Page</a>.
+</p>
+<p>
+If you are interested in running a member of the build farm, then please visit
+the <a href="/cgi-bin/register-form.pl" title="Register">Registration Page</a>.
+We are particularly interested in unusual platforms or combinations of
+architecture, operating system and compiler.
+</p>
+<p>To see what is involved in running a buildfarm member, please 
+read <a href="http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto">http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto</a>.
+The client code can be found at the
+<a href="http://pgfoundry.org/projects/pgbuildfarm/">project page</a> at 
+<a href="http://pgfoundry.org/">PGFoundry</a>.
+</p>
+<p>The build farm software should run on all platforms that can support PostgreSQL.
+</p>
+[% END %]
diff --git a/templates/log.tt b/templates/log.tt
new file mode 100644 (file)
index 0000000..da255f2
--- /dev/null
@@ -0,0 +1,103 @@
+[% PERL %]
+       use POSIX qw(ceil);
+        my $lrfactor = 6;
+       $stash->set(lrfactor => $lrfactor);
+        my $rows = $stash->get('log_file_names'); 
+       my $logrows = ceil(scalar(@$rows)/$lrfactor);
+       my $logcells = $lrfactor * $logrows;
+       $stash->set( logcells => $logcells);
+       $stash->set( logrows => $logrows ); 
+[% END -%]
+[% mytitle = BLOCK %]PostgreSQL BuildFarm | [% IF stage != 'OK' %]Log for system "[% system %]" failure on snapshot taken [% urldt ; ELSE %]Configuration summary for system "[% system %]" snapshot taken [% urldt ; END ; END -%]
+[%
+        cvsurl = 'http://anoncvs.postgresql.org/cvsweb.cgi';
+        giturl = scmurl || 'http://git.postgresql.org/gitweb?p=postgresql.git;a=commit;h=';
+-%]
+[% WRAPPER 'page.tt' 
+       title = mytitle
+       bodyclass = 'none'
+       pagebutton = 'none'
+%]
+<h1>PostgreSQL Build Farm Log</h1>
+<h2>Details for system "[% system %]"[% IF stage != 'OK' %] failure at stage [% stage ; ELSE %], status 'OK'[% END %], snapshot taken [% urldt %]</h2>
+<table cellspacing="0">
+    <tr>
+        <th class="head" rowspan="2">System Information</th>
+        <th>Farm member</th>
+        <th>Branch</th>
+        <th>OS</th>
+        <th>Compiler</th>
+        <th>Architecture</th>
+        <th>Owner</th>
+    </tr>
+    <tr>
+        <td>[% system %]</td>
+        <td><a href="/cgi-bin/show_history.pl?nm=[% system %]&amp;br=[% branch %]">[% branch %]</a></td>
+        <td>[% info_row.operating_system %] [% info_row.os_version %]</td>
+        <td>[% info_row.compiler %] [% info_row.compiler_version %]</td>
+        <td>[% info_row.architecture %]</td>
+        <td>[% info_row.owner_email %]</td>
+    </tr>
+  </table>
+[% IF info_row.sys_notes %]
+    <br />
+    <table>
+     <tr>
+       <th class="head" rowspan="2">System Notes</th>
+       <th>Date</th>
+       <th>Notes</th>
+     </tr>
+     <tr>
+      <td>[% info_row.sys_notes_date %]</td>
+      <td>[% info_row.sys_notes %]</td>
+     </tr>
+   </table>
+[% END %]
+[% cell = 0; FOREACH logstage  IN log_file_names ; striplog = logstage.replace('\.log$','') ; cell = loop.count %]
+  [% IF loop.first %] 
+    <br /> <table><tr><th class='head' rowspan='[% logrows %]'>Stage Logs</th>
+  [% END %]
+    [% IF loop.count > 1 and loop.count % lrfactor == 1 %]<tr>[% END %]
+    <td><a href='show_stage_log.pl?nm=[% system %]&amp;dt=[% urldt | uri %]&amp;stg=[% striplog %]'>[% striplog %]</a></td>
+    [% IF loop.count % lrfactor == 0 %]</tr>[% END %]
+[% END %]
+
+[% IF cell > 0 ; nrcell = cell + 1; ncells = [ nrcell .. logcells ] ; FOREACH rcell IN ncells %]
+       [% IF rcell > 1 and rcell % lrfactor == 1 %]<tr>[% END %]
+       <td>&nbsp;</td>
+       [% IF rcell % lrfactor == 0 %]</tr>[% END %]
+    [% END %]
+    </table>
+[% END %]
+
+<h3>Configuration summary</h3>
+<pre>
+[% conf | html %]
+</pre>
+<h3>Files changed this run</h3>
+<pre>
+[%- IF changed_this_run.0 -%]
+[%- FOREACH changed IN changed_this_run %]
+<a href="[% IF scm == 'git' ; giturl; changed.1; ELSE ; cvsurl ; changed.0; 'rev='; changed.1; END %]">[% changed.0 ; IF scm == 'cvs'; ' '; changed.1; END %]</a>
+[%- END -%]
+[%- ELSE %]
+not recorded
+[% END -%]
+</pre>
+[% IF stage != 'OK' %]
+<h3>Files changed since last success</h3>
+<pre>
+[%- IF changed_since_success.0 %]
+[%- FOREACH changed IN changed_since_success %]
+<a href="[% IF scm == 'git' ; giturl; changed.1; ELSE ; cvsurl ; changed.0; 'rev='; changed.1; END %]">[% changed.0 ; IF scm == 'cvs'; ' '; changed.1; END %]</a>
+[%- END -%]
+[%- ELSE %]
+not recorded
+[% END -%]
+</pre>
+[% END %]
+<h3>Log</h3>
+<pre>
+[% log | html %]
+</pre>
+[% END %]
diff --git a/templates/members.tt b/templates/members.tt
new file mode 100644 (file)
index 0000000..d55e7a5
--- /dev/null
@@ -0,0 +1,70 @@
+[% WRAPPER 'page.tt' 
+       title = 'PostgreSQL BuildFarm Members'
+       bodyclass = 'members'
+       pagebutton = 'members'
+%]
+<h1>PostgreSQL BuildFarm Members</h1>
+    <p>Click branch links to see build history. Click the heading links to resort the list. Select members by checkbox and hit the button at the bottom to create a status custom filter.</p>
+    <form name="filter" method="GET" action="/cgi-bin/show_status.pl">
+    <table cellspacing="0">
+    <tr>
+    <td>&nbsp;</td>
+    <th><a href="/cgi-bin/show_members.pl?sort_by=name">Name</a><br /><a href="/cgi-bin/show_members.pl?sort_by=owner">Owner</a></th>
+    <th><a href="/cgi-bin/show_members.pl?sort_by=os">OS / Version</a></th>
+    <th><a href="/cgi-bin/show_members.pl?sort_by=compiler">Compiler / Version</a></th>
+    <th><a href="/cgi-bin/show_members.pl?sort_by=arch">Arch</a></th>
+    <th>Branches reported on<br />(most recent report)</th>
+    </tr>
+[% alt = true %]
+[% FOREACH row IN statrows ;
+    have_recent = 0;
+    FOREACH branch_days IN row.branches.split(',') ;
+       branch_fields = branch_days.split(':');
+       branch_day = branch_fields.1;
+       IF branch_day < 365 ; have_recent = 1; END;
+    END;
+ IF have_recent ;
+%]    <tr [%- IF alt %]class="alt"[% END -%]>
+    [% alt = ! alt %]
+    <td><input type="checkbox" name="member" value="[% row.name %]" /></td>
+    <td>[% row.name %]<br />[% row.owner_email %]
+[% IF row.sys_notes %]
+    <br />
+      Notes: ([% row.sys_notes_date %]) [% row.sys_notes %]
+[% END %]
+    </td>
+    <td>[% row.operating_system %]<br />[% row.os_version %]
+       [% prev_osver = row.osversion; 
+           FOREACH personality IN row.personalities;
+          IF personality.os_version != prev_osver
+         %]
+        <br / > w.e.f. [% personality.effective_date %]: [% personality.os_version %]
+        [% prev_osver = personality.os_version; END; END %]
+    </td>
+    <td>[% row.compiler %]<br />[% row.compiler_version %]
+       [% prev_compver = row.compiler_version; 
+          FOREACH personality IN row.personalities;
+          IF personality.compiler_version != prev_compver
+        %]
+        <br / > w.e.f. [% personality.effective_date %]: [% personality.compiler_version %]
+        [% prev_compver = personality.compiler_version; END; END %]
+    </td>
+    <td>[% row.arch %]</td>
+    <td class="branch">[% IF ! row.branches ; '&nbsp;' ; END -%]
+    <ul>
+    [%- 
+       FOREACH branch_days IN row.branches.split(',') ;
+       branch_fields = branch_days.split(':');
+       branch = branch_fields.0;
+       branch_day = branch_fields.1;
+       IF branch_day < 365 ;
+    %]<li><a 
+    href="show_history.pl?nm=[% row.name %]&amp;br=[% branch %]"
+    title="History"
+    >[% branch %]</a>&nbsp;([% branch_day %]&nbsp;days&nbsp;ago)</li>[% END; END %]</ul></td>
+    </tr>
+[% END; END %]
+    </table>
+    <input type="submit" value="Make Filter" />
+    </form>
+[% END %]
diff --git a/templates/page.tt b/templates/page.tt
new file mode 100644 (file)
index 0000000..f00da9b
--- /dev/null
@@ -0,0 +1,39 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+  <head>
+    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+    <title>[% title %]</title>
+    <link rel="icon" type="image/png" href="/elephant-icon.png" />
+    <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
+    <style type="text/css"><!--
+       li#[% pagebutton %] a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; } 
+       li#[% pagebutton %] { background: url(/inc/b/l.png) no-repeat 0% -20px; }
+    --></style>
+  </head>
+  <body class="[% bodyclass %]">
+    <div id="wrapper">
+      <div id="banner">
+        <a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
+        <div id="nav">
+          <ul>
+           <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
+           <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
+           <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
+           <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
+           <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
+          </ul>
+        </div><!-- nav -->
+      </div><!-- banner -->
+      <div id="main">
+        [% content %]
+      </div><!-- main -->
+      <hr />
+      <p style="text-align: center;">
+       Hosting for the PostgreSQL Buildfarm is generously 
+       provided by: 
+       <a href="http://www.commandprompt.com">CommandPrompt, The PostgreSQL Company</a>
+      </p>
+    </div><!-- wrapper -->
+  </body>
+</html>
diff --git a/templates/register-form.tt b/templates/register-form.tt
new file mode 100644 (file)
index 0000000..0f4f82b
--- /dev/null
@@ -0,0 +1,72 @@
+[% WRAPPER 'page.tt' 
+       title = 'PostgreSQL BuildFarm Application'
+       bodyclass = 'application'
+       pagebutton = 'register'
+%]
+<h1>Application to join PostgreSQL BuildFarm</h1>
+
+<p>Here is a short description of what is required to join the buildfarm successfully. Please read it carefully
+before submitting this form.</p>
+
+<ul>
+<li> your machine will need to be able to contact <a href="http://www.pgbuildfarm.org">http://www.pgbuildfarm.org</a>
+     either directly or via proxy, and it will need access to a PostgreSQL CVS repository, 
+     either the one at postgresql.org or a mirror (you can set up your own mirror using CSVup on a Linux or FreeBSD machine - 
+     this is recommended).</li>
+<li> have a working Postgresql build environment for your platform 
+     (for Windows this means MSys/MinGW with the libz and libintl stuff,  and ideally native Python and Tcl).</li>
+<li> Windows only: you will need a native perl installed as well as the one in the MSys DTK. The one from ActiveState works fine.</li>
+<li> download and unpack the latest release of client code from 
+     <a href="http://pgfoundry.org/frs/?group_id=1000040">http://pgfoundry.org/frs/?group_id=1000040</a></li>
+<li> read instructions at 
+     <a href="http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto">http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto</a></li>
+<li> get the software running locally using flags --force --nostatus --nosend</li>
+<li> register your machine on this page</li>
+<li> when you receive credentials, put them in the config file, and schedule regular builds (without those flags) 
+     for the branches you want to support - which should be at least HEAD and the most recent stable branch.</li>
+</ul>
+<hr />
+
+<p>Please complete all items.</p>
+<p>For Linux, please specify the name and version of the <b>Distribution</b> for the Operating Systems items. 
+Do not use the name "Linux". For example, for my test machine the Operating 
+Systems is "Fedora Core" and the version is "4".</p>
+<form method="post" action="/cgi-bin/register.pl">
+<table cellspacing="0">
+<tr>
+  <th>Operating System</th>
+  <td><input type="text" name="os" value="" /></td>
+</tr>
+<tr>
+  <th>OS Version</th>
+  <td><input type="text" name="osv" value="" /></td>
+</tr>
+<tr>
+  <th>Compiler</th>
+  <td><input type="text" name="comp" value="" /></td>
+</tr>
+<tr>
+  <th>Compiler Version</th>
+  <td><input type="text" name="compv" value="" /></td>
+</tr>
+<tr>
+  <th>Architecture</th>
+  <td><input type="text" name="arch" value="" /></td>
+</tr>
+<tr>
+  <th>Your name</th>
+  <td><input type="text" name="owner" value="" /></td>
+</tr>
+<tr>
+  <th>Your email address</th>
+  <td><input type="text" name="email" value="" /></td>
+</tr>
+<tr>
+<th colspan="2">[% captcha %]</th>
+</tr>
+<tr>
+  <th class="submit" colspan="2"><input type="submit" /></th>
+</tr>
+</table>
+</form>
+[% END %]
diff --git a/templates/register-incomplete.tt b/templates/register-incomplete.tt
new file mode 100644 (file)
index 0000000..bc73f41
--- /dev/null
@@ -0,0 +1,9 @@
+[% WRAPPER 'page.tt' 
+    title = 'PostgreSQL BuildFarm Application'
+    bodyclass = 'application'
+    pagebutton = 'none'
+%]
+<p>You need to complete all the form items. 
+<a href="/cgi-bin/register-form.pl">Please click here to try again.</a>
+</p>
+[% END %]
diff --git a/templates/register-ok.tt b/templates/register-ok.tt
new file mode 100644 (file)
index 0000000..fdfea96
--- /dev/null
@@ -0,0 +1,8 @@
+[% WRAPPER 'page.tt' 
+    title = 'PostgreSQL BuildFarm Application'
+    bodyclass = 'application'
+    pagebutton = 'none'
+%]
+<h1>PostgreSQL BuildFarm Application received</h1>\
+<p>Thank you. You should hear from us shortly.</p>
+[% END %]
diff --git a/templates/status.tt b/templates/status.tt
new file mode 100644 (file)
index 0000000..875c988
--- /dev/null
@@ -0,0 +1,78 @@
+[%
+ flag_imgs = {
+     perl = '/img/camel.png',
+     python = '/img/python.png',
+     debug = '/img/bug.png',
+     pam => '/img/pam.png',
+     cassert => '/img/cassert.png',
+     openssl => '/img/ssl_icon.gif',
+     nls => '/img/translateicon.gif',
+     krb5 => '/img/krb.gif',
+     tcl => '/img/tcl.png',
+     vpath => '/img/vpath.png',
+     xml => '/img/xml.png',
+     'thread-safety' => '/img/threads.gif',
+     'integer-datetimes' = '/img/days.png',
+     git => '/img/git.png',
+     }
+-%]
+[%- BLOCK img ; IF flag == 'depend' or flag == 'gnu-ld' ; ; ELSIF flag_imgs.$flag %]<img src="[% flag_imgs.$flag %]" title="[% flag %]" alt="[% flag %]" height="16" width="16" class="inline" align="bottom" />  [% ELSE %][%#
+                                                                                                                                                                                                         flag ; ' '
+%][% END ; END -%]
+[%- BLOCK sysnotes ; IF row.sys_notes %]<img src="/img/notes.png" height="16" width="16" title="[% row.sys_notes_ts.replace(' .*','') | html %]: [% row.sys_notes | html %]" />
+[%- ELSE %]&nbsp;[% END ; END -%]
+[%- BLOCK cl %] class="[% SWITCH bgfor.replace('-.*','') -%]
+  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
+[%- END -%]
+[% WRAPPER 'page.tt' 
+       title = 'PostgreSQL BuildFarm Status'
+       bodyclass = 'none'
+       pagebutton = 'status'
+%]
+    <h1>PostgreSQL BuildFarm Status</h1>
+    <p>
+      Shown here is the latest status of each farm member 
+      for each branch it has reported on in the last 30 days.
+    </p>
+    <p>
+       Use the farm member link for history of that member 
+       on the relevant branch.
+    </p>
+<table><tr><th class="head" rowspan="2">Legend</th>
+[% FOREACH flagset IN flag_imgs %]
+<td><img src="[% flagset.value %]" title="[% flagset.key %]" alt="[% flagset.key %]" height="16" width="16" class="inline"  align="center"/> =  [% flagset.key %]</td>
+[% IF loop.count == 7 %]</tr><tr>[% END %]
+[% END %]
+</tr></table>
+<br />
+    <table cellspacing="0">
+[% brch = "" %]
+[% FOREACH row IN statrows %]
+[% IF row.branch != brch ; brch = row.branch %]
+<tr><th class="head" colspan="5">Branch: [% brch %]</th></tr>
+<tr><th colspan="2">Alias</th><th>System</th><th>Status</th><th>Flags</th></tr>
+[% END %]
+<tr [% PROCESS cl bgfor=row.stage %]>
+    <td><a 
+    href="show_history.pl?nm=[% row.sysname %]&amp;br=[% row.branch %]"
+    title="History"
+    >[% row.sysname %]</a></td>
+    <td>[% PROCESS sysnotes %]</td>
+    <td><span class="opsys">[% row.operating_system %]
+            [% row.os_version %]</span> <span class="compiler">
+            [%- row.compiler %]
+            [% row.compiler_version %]</span> <span class="arch">
+            [%- row.architecture %]</span></td>
+    <td class="status">
+            [%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;
+            [% row.stage -%]
+            <a href="show_log.pl?nm=
+               [%- row.sysname %]&amp;dt=
+               [%- row.snapshot | uri %]">
+                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
+
+    <td class="flags">[% FOREACH flag IN row.build_flags.split().sort() ; PROCESS img ; END %]</td>
+</tr>
+[% END %]
+    </table>
+[% END %]
diff --git a/trunk/templates/bfwrapper.tt.ttc b/trunk/templates/bfwrapper.tt.ttc
deleted file mode 100644 (file)
index 19faeb3..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-#------------------------------------------------------------------------
-# Compiled template generated by the Template Toolkit version 2.14
-#------------------------------------------------------------------------
-
-Template::Document->new({
-    METADATA => {
-        'modtime' => '1107104454',
-        'name' => 'bfwrapper.tt',
-    },
-    BLOCK => sub {
-        my $context = shift || die "template sub called without context\n";
-        my $stash   = $context->stash;
-        my $output  = '';
-        my $error;
-        
-        eval { BLOCK: {
-    $output .=  "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\"\n        \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en\" lang=\"en\">\n<head>\n    <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n    <title>PostgreSQL BuildFarm Status</title>\n    <link rel=\"stylesheet\" rev=\"stylesheet\" href=\"/inc/pgbf.css\" charset=\"utf-8\"\n />\n    <style type=\"text/css\"><!--\n    li#status a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat \n100% -20px; } \n    li#status { background: url(/inc/b/l.png) no-repeat 0% -20px; }\n    --></style>\n</head>\n<body>\n<div id=\"wrapper\">\n<div id=\"banner\">\n<a href=\"/index.html\"><img src=\"/inc/pgbuildfarm-banner.png\" alt=\"PostgreSQL Bui\nldFarm\" width=\"800\" height=\"73\" /></a>\n<div id=\"nav\">\n<ul>\n    <li id=\"home\"><a href=\"/index.html\" title=\"PostgreSQL BuildFarm Home\">Home</\na></li>\n    <li id=\"status\"><a href=\"/cgi-bin/show_status.pl\" title=\"Current results\">St\natus</a></li>\n    <li id=\"members\"><a href=\"/cgi-bin/show_members.pl\" title=\"Platforms tested\"\n>Members</a></li>\n    <li id=\"register\"><a href=\"/register.html\" title=\"Join PostgreSQL BuildFarm\"\n>Register</a></li>\n    <li id=\"pgfoundry\"><a href=\"http://pgfoundry.org/projects/pgbuildfarm/\">PGFo\nundry</a></li>\n    <li id=\"postgresql.org\"><a href=\"http://www.postgresql.org\">PostgreSQL.org</\na></li>\n</ul>\n</div><!-- nav -->\n</div><!-- banner -->\n<div id=\"main\">\n";
-    #line 38 "/home/community/pgbuildfarm/templates/bfwrapper.tt"
-    $output .=  $stash->get('content');
-    $output .=  "\n</div><!-- main -->\n</div><!-- wrapper -->\n  </body>\n</html>\n";
-        } };
-        if ($@) {
-            $error = $context->catch($@, \$output);
-            die $error unless $error->type eq 'return';
-        }
-    
-        return $output;
-    },
-    DEFBLOCKS => {
-
-    },
-});
diff --git a/trunk/templates/dashboard.tt.ttc b/trunk/templates/dashboard.tt.ttc
deleted file mode 100644 (file)
index 91c772a..0000000
+++ /dev/null
@@ -1,312 +0,0 @@
-#------------------------------------------------------------------------
-# Compiled template generated by the Template Toolkit version 2.14
-#------------------------------------------------------------------------
-
-Template::Document->new({
-    METADATA => {
-        'modtime' => '1127835909',
-        'name' => 'dashboard.tt',
-    },
-    BLOCK => sub {
-        my $context = shift || die "template sub called without context\n";
-        my $stash   = $context->stash;
-        my $output  = '';
-        my $error;
-        
-        eval { BLOCK: {
-    #line 1 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $stash->set('flag_imgs', { 'perl' => '/img/camel.png', 'python' => '/img/python.png', 'debug' => '/img/bug.png', 'pam' => '/img/pam.png', 'cassert' => '/img/cassert.png', 'openssl' => '/img/ssl_icon.gif', 'nls' => '/img/translateicon.gif', 'krb5' => '/img/krb.gif', 'tcl' => '/img/tcl.png', 'thread-safety' => '/img/threads.gif', 'integer-datetimes' => '/img/days.png'  });
-    
-    
-    $output .=  "\n<div id=\"main\">\n    <h1>PostgreSQL BuildFarm Status</h1>\n    <p>\n      Shown here is the latest status of each farm member \n      for each branch it has reported on in the last 30 days.\n    </p>\n    <p>\n       Use the farm member link for history of that member \n       on the relevant branch.\n    </p>\n<table><tr><th class=\"head\" rowspan=\"2\">Legend</th>\n";
-    #line 45 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    
-    # FOREACH 
-    do {
-        my ($value, $error, $oldloop);
-        my $list = $stash->get('flag_imgs');
-        
-        unless (UNIVERSAL::isa($list, 'Template::Iterator')) {
-            $list = Template::Config->iterator($list)
-                || die $Template::Config::ERROR, "\n"; 
-        }
-    
-        ($value, $error) = $list->get_first();
-        eval { $oldloop = $stash->get('loop') };
-        $stash->set('loop', $list);
-        eval {
-    LOOP:   while (! $error) {
-                $stash->{'flagset'} = $value;
-    $output .=  "\n<td><img src=\"";
-    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['flagset', 0, 'value', 0]);
-    $output .=  "\" title=\"";
-    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['flagset', 0, 'key', 0]);
-    $output .=  "\" alt=\"";
-    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['flagset', 0, 'key', 0]);
-    $output .=  "\" height=\"16\" width=\"16\" class=\"inline\"  align=\"center\"/> =  ";
-    #line 43 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['flagset', 0, 'key', 0]);
-    $output .=  "</td>\n";
-    #line 44 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    if ($stash->get(['loop', 0, 'count', 0]) eq 5) {
-    $output .=  "</tr><tr>";
-    }
-    
-    $output .=  "\n";;
-                ($value, $error) = $list->get_next();
-            }
-        };
-        $stash->set('loop', $oldloop);
-        die $@ if $@;
-        $error = 0 if $error && $error eq Template::Constants::STATUS_DONE;
-        die $error if $error;
-    };
-    
-    $output .=  "\n</tr></table>\n<br />\n    <table cellspacing=\"0\">\n";
-    #line 49 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $stash->set('brch', '');
-    $output .=  "\n";
-    #line 81 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    
-    # FOREACH 
-    do {
-        my ($value, $error, $oldloop);
-        my $list = $stash->get('statrows');
-        
-        unless (UNIVERSAL::isa($list, 'Template::Iterator')) {
-            $list = Template::Config->iterator($list)
-                || die $Template::Config::ERROR, "\n"; 
-        }
-    
-        ($value, $error) = $list->get_first();
-        eval { $oldloop = $stash->get('loop') };
-        $stash->set('loop', $list);
-        eval {
-    LOOP:   while (! $error) {
-                $stash->{'row'} = $value;
-    $output .=  "\n";
-    #line 54 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    if ($stash->get(['row', 0, 'branch', 0]) ne $stash->get('brch')) {
-    #line 51 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $stash->set('brch', $stash->get(['row', 0, 'branch', 0]));
-    $output .=  "\n<tr><th class=\"head\" colspan=\"4\">Branch: ";
-    #line 52 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get('brch');
-    $output .=  "</th></tr>\n<tr><th>Alias</th><th>System</th><th>Status</th><th>Flags</th></tr>\n";
-    }
-    
-    $output .=  "\n<tr ";
-    #line 55 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $context->process('cl', { 'bgfor' => $stash->get(['row', 0, 'stage', 0]) });
-    $output .=  ">\n    <td><a \n    href=\"show_history.pl?nm=";
-    #line 57 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'sysname', 0]);
-    $output .=  "&amp;br=";
-    #line 57 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'branch', 0]);
-    $output .=  "\"\n    title=\"History\"\n    >";
-    #line 59 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'sysname', 0]);
-    $output .=  "</a></td>\n    <td><span class=\"opsys\">";
-    #line 60 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'operating_system', 0]);
-    $output .=  "\n            ";
-    #line 61 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'os_version', 0]);
-    $output .=  "</span> <span class=\"compiler\">";
-    #line 63 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'compiler', 0]);
-    $output .=  "\n            ";
-    #line 64 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'compiler_version', 0]);
-    $output .=  "</span> <span class=\"arch\">";
-    #line 66 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'architecture', 0]);
-    $output .=  "</span></td>\n    <td class=\"status\">";
-    #line 69 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    
-    # FILTER
-    $output .=  do {
-        my $output = '';
-        my $filter = $context->filter('replace', [ '\s', '&nbsp;' ])
-                  || $context->throw($context->error);
-    
-    $output .=  $stash->get(['row', 0, 'when_ago', 0]);
-        
-        &$filter($output);
-    };
-    
-    $output .=  "&nbsp;ago&nbsp;\n            ";
-    #line 70 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'stage', 0]);
-    $output .=  "            <a href=\"show_log.pl?nm=";
-    #line 73 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $stash->get(['row', 0, 'sysname', 0]);
-    $output .=  "&amp;dt=";
-    #line 75 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    
-    # FILTER
-    $output .=  do {
-        my $output = '';
-        my $filter = $context->filter('uri')
-                  || $context->throw($context->error);
-    
-    $output .=  $stash->get(['row', 0, 'snapshot', 0]);
-        
-        &$filter($output);
-    };
-    
-    $output .=  "\">";
-    #line 77 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    if ($stash->get(['row', 0, 'stage', 0]) ne 'OK') {
-    $output .=  "Details";
-    }
-    else {
-    $output .=  "Config";
-    }
-    
-    $output .=  "</a></td>\n\n    <td class=\"flags\">";
-    #line 79 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    
-    # FOREACH 
-    do {
-        my ($value, $error, $oldloop);
-        my $list = $stash->get(['row', 0, 'build_flags', 0, 'split', 0, 'sort', 0]);
-        
-        unless (UNIVERSAL::isa($list, 'Template::Iterator')) {
-            $list = Template::Config->iterator($list)
-                || die $Template::Config::ERROR, "\n"; 
-        }
-    
-        ($value, $error) = $list->get_first();
-        eval { $oldloop = $stash->get('loop') };
-        $stash->set('loop', $list);
-        eval {
-    LOOP:   while (! $error) {
-                $stash->{'flag'} = $value;
-    #line 79 "/home/community/pgbuildfarm/templates/dashboard.tt"
-    $output .=  $context->process('img');;
-                ($value, $error) = $list->get_next();
-            }
-        };
-        $stash->set('loop', $oldloop);
-        die $@ if $@;
-        $error = 0 if $error && $error eq Template::Constants::STATUS_DONE;
-        die $error if $error;
-    };
-    
-    $output .=  "</td>\n</tr>\n";;
-                ($value, $error) = $list->get_next();
-            }
-        };
-        $stash->set('loop', $oldloop);
-        die $@ if $@;
-        $error = 0 if $error && $error eq Template::Constants::STATUS_DONE;
-        die $error if $error;
-    };
-    
-    $output .=  "\n    </table>\n</div>\n\n";
-        } };
-        if ($@) {
-            $error = $context->catch($@, \$output);
-            die $error unless $error->type eq 'return';
-        }
-    
-        return $output;
-    },
-    DEFBLOCKS => {
-        'cl' => sub {
-            my $context = shift || die "template sub called without context\n";
-            my $stash   = $context->stash;
-            my $output  = '';
-            my $error;
-            
-            eval { BLOCK: {
-        $output .=  " class=\"";
-        #line 27 "/home/community/pgbuildfarm/templates/dashboard.tt"
-        
-        # SWITCH
-        do {
-            my $result = $stash->get('bgfor');
-            my $match;
-            SWITCH: {
-        $match = 'OK';
-        $match = [ $match ] unless ref $match eq 'ARRAY';
-        if (grep(/^$result$/, @$match)) {
-        $output .=  "pass";
-            last SWITCH;
-        }
-        $match = 'ContribCheck';
-        $match = [ $match ] unless ref $match eq 'ARRAY';
-        if (grep(/^$result$/, @$match)) {
-        $output .=  "warn";
-            last SWITCH;
-        }
-        $match = [ 'Check', 'InstallCheck' ];
-        $match = [ $match ] unless ref $match eq 'ARRAY';
-        if (grep(/^$result$/, @$match)) {
-        $output .=  "warnx";
-            last SWITCH;
-        }
-        $output .=  "fail";
-            }
-        };
-        
-        $output .=  "\"";
-            } };
-            if ($@) {
-                $error = $context->catch($@, \$output);
-                die $error unless $error->type eq 'return';
-            }
-        
-            return $output;
-        },
-        'img' => sub {
-            my $context = shift || die "template sub called without context\n";
-            my $stash   = $context->stash;
-            my $output  = '';
-            my $error;
-            
-            eval { BLOCK: {
-        #line 22 "/home/community/pgbuildfarm/templates/dashboard.tt"
-        if ($stash->get('flag') eq 'depend' || $stash->get('flag') eq 'gnu-ld') {
-        
-        }
-        elsif ($stash->get(['flag_imgs', 0, $stash->get('flag'), 0])) {
-        #line 22 "/home/community/pgbuildfarm/templates/dashboard.tt"
-        
-        # FILTER
-        $output .=  do {
-            my $output = '';
-            my $filter = $context->filter('collapse')
-                      || $context->throw($context->error);
-        
-        $output .=  "<img src=\"";
-        #line 19 "/home/community/pgbuildfarm/templates/dashboard.tt"
-        $output .=  $stash->get(['flag_imgs', 0, $stash->get('flag'), 0]);
-        $output .=  "\" \n                             title=\"";
-        #line 20 "/home/community/pgbuildfarm/templates/dashboard.tt"
-        $output .=  $stash->get('flag');
-        $output .=  "\" alt=\"";
-        #line 20 "/home/community/pgbuildfarm/templates/dashboard.tt"
-        $output .=  $stash->get('flag');
-        $output .=  "\" \n                             height=\"16\" width=\"16\" class=\"inline\" align=\"bottom\" />  \n     ";
-            
-            &$filter($output);
-        };
-        
-        }
-        
-            } };
-            if ($@) {
-                $error = $context->catch($@, \$output);
-                die $error unless $error->type eq 'return';
-            }
-        
-            return $output;
-        },
-    },
-});
diff --git a/trunk/templates/dyn/history.tt b/trunk/templates/dyn/history.tt
deleted file mode 100644 (file)
index 4713047..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-[%- BLOCK cl %] class="[% SWITCH bgfor -%]
-  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
-[%- END -%]
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-       <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <title>PostgreSQL BuildFarm History</title>
-    <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
-       <style type="text/css"><!--
-       li#status a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; } 
-       li#status { background: url(/inc/b/l.png) no-repeat 0% -20px; }
-       --></style>
-</head>
-<body class="history">
-<div id="wrapper">
-<div id="banner">
-<a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
-<div id="nav">
-<ul>
-    <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
-    <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
-    <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
-    <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
-</ul>
-</div><!-- nav -->
-</div><!-- banner -->
-<div id="main">
-<h1>PostgreSQL BuildFarm Status History</h1>
-<table cellspacing="0">
-    <tr><th class="head" colspan="3">System Detail</th></tr>
-    <tr class="member"><th>Farm member</th><td>[% member %]</td></tr>
-    <tr><th>OS</th><td>[% statrows.0.operating_system %] [% statrows.0.os_version %]</td></tr>
-<!--    <tr><th>OS Version</th><td>[% statrows.0.os_version %]</td></tr> -->
-    <tr><th>Compiler</th><td>[% statrows.0.compiler %] [% statrows.0.compiler_version %]</td></tr>
-<!--    <tr><th>Compiler Version</th><td>[% statrows.0.compiler_version %]</td></tr> -->
-    <tr><th>Architecture</th><td>[% statrows.0.architecture %]</td></tr>
-    </table>
-    <h3>Branch: [% branch %][% IF statrows.size >= 240 %] (last 240 entries shown)[% END %]</h3>
-[% BLOCK stdet %]
-<tr [% PROCESS cl bgfor=row.stage %]>
-    <td>[%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;</td>
-    <td class="status">[% row.stage -%]</td>
-    <td class="status"><a href="show_log.pl?nm=
-               [%- row.sysname %]&amp;dt=
-               [%- row.snapshot | uri %]">
-                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
-
-</tr>
-[% END %]
-<table border="0"> <tr>
-[% FOREACH offset IN [0,1,2] %][% low = offset * statrows.size / 3 ; high = -1 + (offset + 1) * statrows.size / 3 %] 
-[% TRY %][% PERL %] 
-  use POSIX qw(floor); 
-  $stash->set(low => floor($stash->get('low'))); 
-  $stash->set(high => floor($stash->get('high'))); 
-[% END %][% CATCH %]<!-- [% error.info %] --> [% END %]
-    <td><table cellspacing="0">
-<!--      <tr><th colspan=3>low = [% low %], high = [% high %]</th></tr> -->
-        [% FOREACH xrow IN statrows.slice(low,high) %][% PROCESS stdet row=xrow %][% END %]
-    </table></td>
-[% END %]
-</table>
-    </div><!-- main -->
-    </div><!-- wrapper -->
-  </body>
-</html>
diff --git a/trunk/templates/dyn/status.tt b/trunk/templates/dyn/status.tt
deleted file mode 100644 (file)
index f17e415..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-[%- BLOCK cl %] class=" [% SWITCH bgfor -%]
-  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
-[%- END -%]
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-       <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <title>PostgreSQL BuildFarm Status</title>
-    <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
-       <style type="text/css"><!--
-       li#status a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; } 
-       li#status { background: url(/inc/b/l.png) no-repeat 0% -20px; }
-       --></style>
-</head>
-<body>
-<div id="wrapper">
-<div id="banner">
-<a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
-<div id="nav">
-<ul>
-    <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
-    <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
-    <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-    <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
-    <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
-    <li id="postgresql.org"><a href="http://www.postgresql.org">PostgreSQL.org</a></li>
-</ul>
-</div><!-- nav -->
-</div><!-- banner -->
-<div id="main">
-    <h1>PostgreSQL BuildFarm Status</h1>
-    <p>
-      Shown here is the latest status of each farm member 
-      for each branch it has reported on in the last 30 days.
-    </p>
-    <p>
-       Use the farm member link for history of that member 
-       on the relevant branch.
-    </p>
-    <table cellspacing="0">
-[% brch = "" %]
-[% FOREACH row IN statrows %]
-[% IF row.branch != brch ; brch = row.branch %]
-<tr><th class="head" colspan="3">Branch: [% brch %]</th></tr>
-<tr><th>Alias</th><th>System</th><th>Status</th></tr>
-[% END %]
-<tr [% PROCESS cl bgfor=row.stage %]>
-    <td><a 
-    href="show_history.pl?nm=[% row.sysname %]&amp;br=[% row.branch %]"
-    title="History"
-    >[% row.sysname %]</a></td>
-    <td><span class="opsys">[% row.operating_system %]
-            [% row.os_version %]</span> <span class="compiler">
-            [%- row.compiler %]
-            [% row.compiler_version %]</span> <span class="arch">
-            [%- row.architecture %]</span></td>
-    <td class="status">
-            [%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;
-            [% row.stage -%]
-            <a href="show_log.pl?nm=
-               [%- row.sysname %]&amp;dt=
-               [%- row.snapshot | uri %]">
-                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
-
-</tr>
-[% END %]
-    </table>
-</div><!-- main -->
-</div><!-- wrapper -->
-  </body>
-</html>
-
-
-
-
-
-
-
-
diff --git a/trunk/templates/history.tt b/trunk/templates/history.tt
deleted file mode 100644 (file)
index dd050ed..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-[%- BLOCK cl %] class="[% SWITCH bgfor -%]
-  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
-[%- END -%]
-[% WRAPPER 'page.tt' 
-       title = 'PostgreSQL BuildFarm History'
-       bodyclass = 'history'
-       pagebutton = 'none'
-%]
-<h1>PostgreSQL BuildFarm Status History</h1>
-  <table cellspacing="0">
-    <tr><th class="head" colspan="3">System Detail</th></tr>
-    <tr class="member"><th>Farm member</th><td>[% member %]</td></tr>
-    <tr><th>OS</th><td>[% statrows.0.operating_system %] [% statrows.0.os_version %]</td></tr>
-    <tr><th>Compiler</th><td>[% statrows.0.compiler %] [% statrows.0.compiler_version %]</td></tr>
-    <tr><th>Architecture</th><td>[% statrows.0.architecture %]</td></tr>
-    <tr><th>Owner</th><td>[% statrows.0.owner_email %]</td></tr>
-  </table>
-[% IF statrows.0.sys_notes %]
-    <br />
-    <table>
-     <tr>
-       <th class="head" rowspan="2">System Notes</th>
-       <th>Date</th>
-       <th>Notes</th>
-     </tr>
-     <tr>
-      <td>[% statrows.0.sys_notes_date %]</td>
-      <td>[% statrows.0.sys_notes %]</td>
-     </tr>
-   </table>
-[% END %]
-  <h3>Branch: [% branch %][% IF statrows.size >= hm %] (last [% hm %] entries shown)[% END %]</h3>
-[% BLOCK stdet %]
-    <tr [% PROCESS cl bgfor=row.stage %]>
-      <td>[%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;</td>
-      <td class="status">[% row.stage -%]</td>
-      <td class="status"><a href="show_log.pl?nm=
-               [%- row.sysname %]&amp;dt=
-               [%- row.snapshot | uri %]">
-                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
-
-    </tr>
-[% END %]
-<table border="0"> <tr>
-  [% FOREACH offset IN [0,1,2] %][% low = offset * statrows.size / 3 ; high = -1 + (offset + 1) * statrows.size / 3 %] 
-    [% TRY %][% PERL %] 
-      use POSIX qw(floor); 
-      $stash->set(low => floor($stash->get('low'))); 
-      $stash->set(high => floor($stash->get('high'))); 
-    [% END %][% CATCH %]<!-- [% error.info %] --> [% END %]
-    <td><table cellspacing="0">
-        [% FOREACH xrow IN statrows.slice(low,high) %][% PROCESS stdet row=xrow %][% END %]
-    </table></td>
-  [% END %]
-</table>
-[% END %]
diff --git a/trunk/templates/index.tt b/trunk/templates/index.tt
deleted file mode 100644 (file)
index ad99339..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-[%#
-
-       Use this template to generate the index page, with something like:
-
-               tpage index.tt > ../htdocs/index.html
-
--%]
-[% WRAPPER 'page.tt' 
-       title = 'PostgreSQL BuildFarm'
-       bodyclass = 'none'
-       pagebutton = 'home'
-%]
-<!-- html generated from index.tt -->
-<p>
-The PostgreSQL build farm is a distributed system for automatically testing
-changes in the source code for PostgreSQL as they occur, on a wide variety
-of platforms. This server is the central repository for the results of those
-tests.
-</p>
-<p>
-To see the current status of tests on various branches, check the
-<a href="/cgi-bin/show_status.pl" title="Status Page">Status Page</a>.
-</p>
-<p>
-If you are interested in running a member of the build farm, then please visit
-the <a href="/cgi-bin/register-form.pl" title="Register">Registration Page</a>.
-We are particularly interested in unusual platforms or combinations of
-architecture, operating system and compiler.
-</p>
-<p>To see what is involved in running a buildfarm member, please 
-read <a href="http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto">http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto</a>.
-The client code can be found at the
-<a href="http://pgfoundry.org/projects/pgbuildfarm/">project page</a> at 
-<a href="http://pgfoundry.org/">PGFoundry</a>.
-</p>
-<p>The build farm software should run on all platforms that can support PostgreSQL.
-</p>
-[% END %]
diff --git a/trunk/templates/log.tt b/trunk/templates/log.tt
deleted file mode 100644 (file)
index da255f2..0000000
+++ /dev/null
@@ -1,103 +0,0 @@
-[% PERL %]
-       use POSIX qw(ceil);
-        my $lrfactor = 6;
-       $stash->set(lrfactor => $lrfactor);
-        my $rows = $stash->get('log_file_names'); 
-       my $logrows = ceil(scalar(@$rows)/$lrfactor);
-       my $logcells = $lrfactor * $logrows;
-       $stash->set( logcells => $logcells);
-       $stash->set( logrows => $logrows ); 
-[% END -%]
-[% mytitle = BLOCK %]PostgreSQL BuildFarm | [% IF stage != 'OK' %]Log for system "[% system %]" failure on snapshot taken [% urldt ; ELSE %]Configuration summary for system "[% system %]" snapshot taken [% urldt ; END ; END -%]
-[%
-        cvsurl = 'http://anoncvs.postgresql.org/cvsweb.cgi';
-        giturl = scmurl || 'http://git.postgresql.org/gitweb?p=postgresql.git;a=commit;h=';
--%]
-[% WRAPPER 'page.tt' 
-       title = mytitle
-       bodyclass = 'none'
-       pagebutton = 'none'
-%]
-<h1>PostgreSQL Build Farm Log</h1>
-<h2>Details for system "[% system %]"[% IF stage != 'OK' %] failure at stage [% stage ; ELSE %], status 'OK'[% END %], snapshot taken [% urldt %]</h2>
-<table cellspacing="0">
-    <tr>
-        <th class="head" rowspan="2">System Information</th>
-        <th>Farm member</th>
-        <th>Branch</th>
-        <th>OS</th>
-        <th>Compiler</th>
-        <th>Architecture</th>
-        <th>Owner</th>
-    </tr>
-    <tr>
-        <td>[% system %]</td>
-        <td><a href="/cgi-bin/show_history.pl?nm=[% system %]&amp;br=[% branch %]">[% branch %]</a></td>
-        <td>[% info_row.operating_system %] [% info_row.os_version %]</td>
-        <td>[% info_row.compiler %] [% info_row.compiler_version %]</td>
-        <td>[% info_row.architecture %]</td>
-        <td>[% info_row.owner_email %]</td>
-    </tr>
-  </table>
-[% IF info_row.sys_notes %]
-    <br />
-    <table>
-     <tr>
-       <th class="head" rowspan="2">System Notes</th>
-       <th>Date</th>
-       <th>Notes</th>
-     </tr>
-     <tr>
-      <td>[% info_row.sys_notes_date %]</td>
-      <td>[% info_row.sys_notes %]</td>
-     </tr>
-   </table>
-[% END %]
-[% cell = 0; FOREACH logstage  IN log_file_names ; striplog = logstage.replace('\.log$','') ; cell = loop.count %]
-  [% IF loop.first %] 
-    <br /> <table><tr><th class='head' rowspan='[% logrows %]'>Stage Logs</th>
-  [% END %]
-    [% IF loop.count > 1 and loop.count % lrfactor == 1 %]<tr>[% END %]
-    <td><a href='show_stage_log.pl?nm=[% system %]&amp;dt=[% urldt | uri %]&amp;stg=[% striplog %]'>[% striplog %]</a></td>
-    [% IF loop.count % lrfactor == 0 %]</tr>[% END %]
-[% END %]
-
-[% IF cell > 0 ; nrcell = cell + 1; ncells = [ nrcell .. logcells ] ; FOREACH rcell IN ncells %]
-       [% IF rcell > 1 and rcell % lrfactor == 1 %]<tr>[% END %]
-       <td>&nbsp;</td>
-       [% IF rcell % lrfactor == 0 %]</tr>[% END %]
-    [% END %]
-    </table>
-[% END %]
-
-<h3>Configuration summary</h3>
-<pre>
-[% conf | html %]
-</pre>
-<h3>Files changed this run</h3>
-<pre>
-[%- IF changed_this_run.0 -%]
-[%- FOREACH changed IN changed_this_run %]
-<a href="[% IF scm == 'git' ; giturl; changed.1; ELSE ; cvsurl ; changed.0; 'rev='; changed.1; END %]">[% changed.0 ; IF scm == 'cvs'; ' '; changed.1; END %]</a>
-[%- END -%]
-[%- ELSE %]
-not recorded
-[% END -%]
-</pre>
-[% IF stage != 'OK' %]
-<h3>Files changed since last success</h3>
-<pre>
-[%- IF changed_since_success.0 %]
-[%- FOREACH changed IN changed_since_success %]
-<a href="[% IF scm == 'git' ; giturl; changed.1; ELSE ; cvsurl ; changed.0; 'rev='; changed.1; END %]">[% changed.0 ; IF scm == 'cvs'; ' '; changed.1; END %]</a>
-[%- END -%]
-[%- ELSE %]
-not recorded
-[% END -%]
-</pre>
-[% END %]
-<h3>Log</h3>
-<pre>
-[% log | html %]
-</pre>
-[% END %]
diff --git a/trunk/templates/members.tt b/trunk/templates/members.tt
deleted file mode 100644 (file)
index d55e7a5..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-[% WRAPPER 'page.tt' 
-       title = 'PostgreSQL BuildFarm Members'
-       bodyclass = 'members'
-       pagebutton = 'members'
-%]
-<h1>PostgreSQL BuildFarm Members</h1>
-    <p>Click branch links to see build history. Click the heading links to resort the list. Select members by checkbox and hit the button at the bottom to create a status custom filter.</p>
-    <form name="filter" method="GET" action="/cgi-bin/show_status.pl">
-    <table cellspacing="0">
-    <tr>
-    <td>&nbsp;</td>
-    <th><a href="/cgi-bin/show_members.pl?sort_by=name">Name</a><br /><a href="/cgi-bin/show_members.pl?sort_by=owner">Owner</a></th>
-    <th><a href="/cgi-bin/show_members.pl?sort_by=os">OS / Version</a></th>
-    <th><a href="/cgi-bin/show_members.pl?sort_by=compiler">Compiler / Version</a></th>
-    <th><a href="/cgi-bin/show_members.pl?sort_by=arch">Arch</a></th>
-    <th>Branches reported on<br />(most recent report)</th>
-    </tr>
-[% alt = true %]
-[% FOREACH row IN statrows ;
-    have_recent = 0;
-    FOREACH branch_days IN row.branches.split(',') ;
-       branch_fields = branch_days.split(':');
-       branch_day = branch_fields.1;
-       IF branch_day < 365 ; have_recent = 1; END;
-    END;
- IF have_recent ;
-%]    <tr [%- IF alt %]class="alt"[% END -%]>
-    [% alt = ! alt %]
-    <td><input type="checkbox" name="member" value="[% row.name %]" /></td>
-    <td>[% row.name %]<br />[% row.owner_email %]
-[% IF row.sys_notes %]
-    <br />
-      Notes: ([% row.sys_notes_date %]) [% row.sys_notes %]
-[% END %]
-    </td>
-    <td>[% row.operating_system %]<br />[% row.os_version %]
-       [% prev_osver = row.osversion; 
-           FOREACH personality IN row.personalities;
-          IF personality.os_version != prev_osver
-         %]
-        <br / > w.e.f. [% personality.effective_date %]: [% personality.os_version %]
-        [% prev_osver = personality.os_version; END; END %]
-    </td>
-    <td>[% row.compiler %]<br />[% row.compiler_version %]
-       [% prev_compver = row.compiler_version; 
-          FOREACH personality IN row.personalities;
-          IF personality.compiler_version != prev_compver
-        %]
-        <br / > w.e.f. [% personality.effective_date %]: [% personality.compiler_version %]
-        [% prev_compver = personality.compiler_version; END; END %]
-    </td>
-    <td>[% row.arch %]</td>
-    <td class="branch">[% IF ! row.branches ; '&nbsp;' ; END -%]
-    <ul>
-    [%- 
-       FOREACH branch_days IN row.branches.split(',') ;
-       branch_fields = branch_days.split(':');
-       branch = branch_fields.0;
-       branch_day = branch_fields.1;
-       IF branch_day < 365 ;
-    %]<li><a 
-    href="show_history.pl?nm=[% row.name %]&amp;br=[% branch %]"
-    title="History"
-    >[% branch %]</a>&nbsp;([% branch_day %]&nbsp;days&nbsp;ago)</li>[% END; END %]</ul></td>
-    </tr>
-[% END; END %]
-    </table>
-    <input type="submit" value="Make Filter" />
-    </form>
-[% END %]
diff --git a/trunk/templates/page.tt b/trunk/templates/page.tt
deleted file mode 100644 (file)
index f00da9b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
-        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-  <head>
-    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
-    <title>[% title %]</title>
-    <link rel="icon" type="image/png" href="/elephant-icon.png" />
-    <link rel="stylesheet" rev="stylesheet" href="/inc/pgbf.css" charset="utf-8" />
-    <style type="text/css"><!--
-       li#[% pagebutton %] a { color:rgb(17,45,137); background: url(/inc/b/r.png) no-repeat 100% -20px; } 
-       li#[% pagebutton %] { background: url(/inc/b/l.png) no-repeat 0% -20px; }
-    --></style>
-  </head>
-  <body class="[% bodyclass %]">
-    <div id="wrapper">
-      <div id="banner">
-        <a href="/index.html"><img src="/inc/pgbuildfarm-banner.png" alt="PostgreSQL BuildFarm" width="800" height="73" /></a>
-        <div id="nav">
-          <ul>
-           <li id="home"><a href="/index.html" title="PostgreSQL BuildFarm Home">Home</a></li>
-           <li id="status"><a href="/cgi-bin/show_status.pl" title="Current results">Status</a></li>
-           <li id="members"><a href="/cgi-bin/show_members.pl" title="Platforms tested">Members</a></li>
-           <li id="register"><a href="/cgi-bin/register-form.pl" title="Join PostgreSQL BuildFarm">Register</a></li>
-           <li id="pgfoundry"><a href="http://pgfoundry.org/projects/pgbuildfarm/">PGFoundry</a></li>
-          </ul>
-        </div><!-- nav -->
-      </div><!-- banner -->
-      <div id="main">
-        [% content %]
-      </div><!-- main -->
-      <hr />
-      <p style="text-align: center;">
-       Hosting for the PostgreSQL Buildfarm is generously 
-       provided by: 
-       <a href="http://www.commandprompt.com">CommandPrompt, The PostgreSQL Company</a>
-      </p>
-    </div><!-- wrapper -->
-  </body>
-</html>
diff --git a/trunk/templates/register-form.tt b/trunk/templates/register-form.tt
deleted file mode 100644 (file)
index 0f4f82b..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-[% WRAPPER 'page.tt' 
-       title = 'PostgreSQL BuildFarm Application'
-       bodyclass = 'application'
-       pagebutton = 'register'
-%]
-<h1>Application to join PostgreSQL BuildFarm</h1>
-
-<p>Here is a short description of what is required to join the buildfarm successfully. Please read it carefully
-before submitting this form.</p>
-
-<ul>
-<li> your machine will need to be able to contact <a href="http://www.pgbuildfarm.org">http://www.pgbuildfarm.org</a>
-     either directly or via proxy, and it will need access to a PostgreSQL CVS repository, 
-     either the one at postgresql.org or a mirror (you can set up your own mirror using CSVup on a Linux or FreeBSD machine - 
-     this is recommended).</li>
-<li> have a working Postgresql build environment for your platform 
-     (for Windows this means MSys/MinGW with the libz and libintl stuff,  and ideally native Python and Tcl).</li>
-<li> Windows only: you will need a native perl installed as well as the one in the MSys DTK. The one from ActiveState works fine.</li>
-<li> download and unpack the latest release of client code from 
-     <a href="http://pgfoundry.org/frs/?group_id=1000040">http://pgfoundry.org/frs/?group_id=1000040</a></li>
-<li> read instructions at 
-     <a href="http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto">http://wiki.postgresql.org/wiki/PostgreSQL_Buildfarm_Howto</a></li>
-<li> get the software running locally using flags --force --nostatus --nosend</li>
-<li> register your machine on this page</li>
-<li> when you receive credentials, put them in the config file, and schedule regular builds (without those flags) 
-     for the branches you want to support - which should be at least HEAD and the most recent stable branch.</li>
-</ul>
-<hr />
-
-<p>Please complete all items.</p>
-<p>For Linux, please specify the name and version of the <b>Distribution</b> for the Operating Systems items. 
-Do not use the name "Linux". For example, for my test machine the Operating 
-Systems is "Fedora Core" and the version is "4".</p>
-<form method="post" action="/cgi-bin/register.pl">
-<table cellspacing="0">
-<tr>
-  <th>Operating System</th>
-  <td><input type="text" name="os" value="" /></td>
-</tr>
-<tr>
-  <th>OS Version</th>
-  <td><input type="text" name="osv" value="" /></td>
-</tr>
-<tr>
-  <th>Compiler</th>
-  <td><input type="text" name="comp" value="" /></td>
-</tr>
-<tr>
-  <th>Compiler Version</th>
-  <td><input type="text" name="compv" value="" /></td>
-</tr>
-<tr>
-  <th>Architecture</th>
-  <td><input type="text" name="arch" value="" /></td>
-</tr>
-<tr>
-  <th>Your name</th>
-  <td><input type="text" name="owner" value="" /></td>
-</tr>
-<tr>
-  <th>Your email address</th>
-  <td><input type="text" name="email" value="" /></td>
-</tr>
-<tr>
-<th colspan="2">[% captcha %]</th>
-</tr>
-<tr>
-  <th class="submit" colspan="2"><input type="submit" /></th>
-</tr>
-</table>
-</form>
-[% END %]
diff --git a/trunk/templates/register-incomplete.tt b/trunk/templates/register-incomplete.tt
deleted file mode 100644 (file)
index bc73f41..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-[% WRAPPER 'page.tt' 
-    title = 'PostgreSQL BuildFarm Application'
-    bodyclass = 'application'
-    pagebutton = 'none'
-%]
-<p>You need to complete all the form items. 
-<a href="/cgi-bin/register-form.pl">Please click here to try again.</a>
-</p>
-[% END %]
diff --git a/trunk/templates/register-ok.tt b/trunk/templates/register-ok.tt
deleted file mode 100644 (file)
index fdfea96..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-[% WRAPPER 'page.tt' 
-    title = 'PostgreSQL BuildFarm Application'
-    bodyclass = 'application'
-    pagebutton = 'none'
-%]
-<h1>PostgreSQL BuildFarm Application received</h1>\
-<p>Thank you. You should hear from us shortly.</p>
-[% END %]
diff --git a/trunk/templates/status.tt b/trunk/templates/status.tt
deleted file mode 100644 (file)
index 875c988..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-[%
- flag_imgs = {
-     perl = '/img/camel.png',
-     python = '/img/python.png',
-     debug = '/img/bug.png',
-     pam => '/img/pam.png',
-     cassert => '/img/cassert.png',
-     openssl => '/img/ssl_icon.gif',
-     nls => '/img/translateicon.gif',
-     krb5 => '/img/krb.gif',
-     tcl => '/img/tcl.png',
-     vpath => '/img/vpath.png',
-     xml => '/img/xml.png',
-     'thread-safety' => '/img/threads.gif',
-     'integer-datetimes' = '/img/days.png',
-     git => '/img/git.png',
-     }
--%]
-[%- BLOCK img ; IF flag == 'depend' or flag == 'gnu-ld' ; ; ELSIF flag_imgs.$flag %]<img src="[% flag_imgs.$flag %]" title="[% flag %]" alt="[% flag %]" height="16" width="16" class="inline" align="bottom" />  [% ELSE %][%#
-                                                                                                                                                                                                         flag ; ' '
-%][% END ; END -%]
-[%- BLOCK sysnotes ; IF row.sys_notes %]<img src="/img/notes.png" height="16" width="16" title="[% row.sys_notes_ts.replace(' .*','') | html %]: [% row.sys_notes | html %]" />
-[%- ELSE %]&nbsp;[% END ; END -%]
-[%- BLOCK cl %] class="[% SWITCH bgfor.replace('-.*','') -%]
-  [%- CASE 'OK' %]pass[% CASE 'ContribCheck' %]warn[% CASE [ 'Check' 'InstallCheck' ] %]warnx[% CASE %]fail[% END %]"
-[%- END -%]
-[% WRAPPER 'page.tt' 
-       title = 'PostgreSQL BuildFarm Status'
-       bodyclass = 'none'
-       pagebutton = 'status'
-%]
-    <h1>PostgreSQL BuildFarm Status</h1>
-    <p>
-      Shown here is the latest status of each farm member 
-      for each branch it has reported on in the last 30 days.
-    </p>
-    <p>
-       Use the farm member link for history of that member 
-       on the relevant branch.
-    </p>
-<table><tr><th class="head" rowspan="2">Legend</th>
-[% FOREACH flagset IN flag_imgs %]
-<td><img src="[% flagset.value %]" title="[% flagset.key %]" alt="[% flagset.key %]" height="16" width="16" class="inline"  align="center"/> =  [% flagset.key %]</td>
-[% IF loop.count == 7 %]</tr><tr>[% END %]
-[% END %]
-</tr></table>
-<br />
-    <table cellspacing="0">
-[% brch = "" %]
-[% FOREACH row IN statrows %]
-[% IF row.branch != brch ; brch = row.branch %]
-<tr><th class="head" colspan="5">Branch: [% brch %]</th></tr>
-<tr><th colspan="2">Alias</th><th>System</th><th>Status</th><th>Flags</th></tr>
-[% END %]
-<tr [% PROCESS cl bgfor=row.stage %]>
-    <td><a 
-    href="show_history.pl?nm=[% row.sysname %]&amp;br=[% row.branch %]"
-    title="History"
-    >[% row.sysname %]</a></td>
-    <td>[% PROCESS sysnotes %]</td>
-    <td><span class="opsys">[% row.operating_system %]
-            [% row.os_version %]</span> <span class="compiler">
-            [%- row.compiler %]
-            [% row.compiler_version %]</span> <span class="arch">
-            [%- row.architecture %]</span></td>
-    <td class="status">
-            [%- row.when_ago | replace('\s','&nbsp;') %]&nbsp;ago&nbsp;
-            [% row.stage -%]
-            <a href="show_log.pl?nm=
-               [%- row.sysname %]&amp;dt=
-               [%- row.snapshot | uri %]">
-                [%- IF row.stage != 'OK' %]Details[% ELSE %]Config[% END -%]</a></td>
-
-    <td class="flags">[% FOREACH flag IN row.build_flags.split().sort() ; PROCESS img ; END %]</td>
-</tr>
-[% END %]
-    </table>
-[% END %]