use standards-compliant tags php
[mdv_bs_web.git] / build.php
blob0730d34854a4195c7560f2dde482ccb3a3f363cf
1 <?
3 require_once 'common.inc.php';
4 require_once 'package.inc.php';
6 function filter_pkg($pkg)
8 global $requiredarchs, $sufficientarchs;
10 // Check if it's a queue package
11 if (!(count ($pkg->done) or count ($pkg->excluded)) and !count($pkg->builds)) {
12 return False;
14 // A failed one
15 if (count($pkg->failed)) {
16 return False;
18 // A built one
19 $pkgarch = array_merge (
20 array_keys ($pkg->done),
21 array_keys ($pkg->failed),
22 $pkg->excluded
24 foreach ($sufficientarchs as $arch) {
25 if (in_array ($arch, $pkgarch)) {
26 return False;
28 elseif (array_key_exists ($arch, $pkg->builds)) {
29 /* Building a sufficient arch */
30 return True;
33 $hit = 0;
34 foreach ($requiredarchs as $arch) {
35 if (in_array ($arch, $pkgarch)) {
36 $hit++;
39 if ($hit == count ($requiredarchs)) {
40 return False;
43 return True;
46 function parse_pkg($archs, $pkg)
48 $pkgentry = array();
49 $pkgentry[] = $pkg->pkgname;
50 $pkgentry[] = $pkg->version;
51 $pkgentry[] = $pkg->commit;
52 $pkgentry[] = $pkg->distro;
53 $pkgentry[] = $pkg->repository;
54 $pkgentry[] = $pkg->submitter;
55 $pkgentry[] = substr ($pkg->id, 0, 14);
56 $pkgentry[] = $pkg->id;
57 foreach ($archs as $arch) {
58 if (array_key_exists ($arch, $pkg->done)) {
59 $pkgentry[] = "<font color=\"green\">Done</font>";
61 elseif (array_key_exists ($arch, $pkg->failed)) {
62 $pkgentry[] = "<font color=\"red\">Failed</font>";
64 elseif (in_array ($arch, $pkg->excluded)) {
65 $pkgentry[] = "<font color=\"darkyellow\">Excluded</font>";
67 elseif (array_key_exists ($arch, $pkg->builds)) {
68 $pkgentry[] = "<font color=\"blue\">Building/".$pkg->builds[$arch][0]."</font>";
70 else {
71 $pkgentry[] = "Pending";
75 return $pkgentry;
78 function parse_build()
80 global $requiredarchs;
82 list ($idlist, $infolist) = list_info_files();
83 $idlist = array_reverse ($idlist);
85 $pkglist = array();
86 $archs = $requiredarchs;
87 foreach ($idlist as $id) {
88 $pkg = new Package($id, True, $infolist[$id]);
89 if (filter_pkg ($pkg)) {
90 $pkglist[] = $pkg;
91 $archs = array_merge (
92 $archs,
93 array_keys ($pkg->done),
94 array_keys ($pkg->failed),
95 array_keys ($pkg->builds)
99 $archs = array_unique ($archs);
100 natsort ($archs);
102 $table = array();
103 foreach ($pkglist as $pkg) {
104 $pkgentry = parse_pkg($archs, $pkg);
105 if (!$pkgentry) {
106 continue;
108 $table[] = $pkgentry;
111 return array ($archs, $table);
114 function make_build_table ($build, $archs)
116 $now = date('YmdHis');
118 $table = "<center>
119 <h3>Building</h3>
120 <table cellspacing=8>
121 <tr>
122 <th>&nbsp;</th>
123 <th>Package</th>
124 <th>Version</th>
125 <th>Commit</th>
126 <th>Distro</th>
127 <th>Repository</th>
128 <th>Submitter</th>
129 <th>Age</th>\n";
130 foreach ($archs as $arch) {
131 $table .= " <th>$arch</th>\n";
133 $table .= "</tr>\n";
134 $pos = 0;
135 foreach ($build as $line) {
136 $pos++;
137 $table .= " <tr ";
138 // if ($now - $pkg->id > 80000) {
139 // $table .= "style='background-color: darkred;'";
140 // }
141 if ($pos % 2 == 0) {
142 $table .= "class='even'";
144 else {
145 $table .= "class='odd'";
147 $table .= ">
148 <td>$pos.</td>
149 <td><a href=\"package.php?key=${line[7]}\">${line[0]}</a></td>
150 <td align='right'>${line[1]}</td>";
151 if ($line[2]) {
152 $table .= " <td><a href=\"http://svn.mandriva.com/cgi-bin/viewvc.cgi/packages?view=rev&revision=${line[2]}\">${line[2]}</a></td>";
154 else {
155 $table .= " <td>N/A</td>";
157 $table .= " <td>${line[3]}</td>
158 <td>${line[4]}</td>
159 <td>${line[5]}</td>
160 <td><nobr>".delta_time($line[6])."</nobr></td>\n";
161 array_shift ($line);
162 array_shift ($line);
163 array_shift ($line);
164 array_shift ($line);
165 array_shift ($line);
166 array_shift ($line);
167 array_shift ($line);
168 array_shift ($line);
169 foreach ($line as $cell) {
170 $table .= " <td>$cell</td>\n";
172 $table .= " </tr>";
174 $table .= "</table></center>";
175 return $table;
178 // Build the page
179 page_header("building");
180 list ($archs, $build) = parse_build();
181 $filtered = filter ($build);
182 $buildtable = make_build_table ($filtered, $archs);
183 echo $buildtable;
184 page_footer();