blob: 2f54c581753a1c254507c6cfffa83e3e494c065a [file] [log] [blame]
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); $App = new App(); $Nav = new Nav(); $Menu = new Menu(); include($App->getProjectCommon());
if (is_array($projects))
{
$projectArray = getProjectArray($projects, $extraprojects, $nodownloads, $PR);
$tmp = array_keys($projectArray);
$proj = "/" . (isset($_GET["project"]) && preg_match("/^(?:" . join("|", $projects) . ")$/", $_GET["project"]) ? $_GET["project"] :
(sizeof($tmp) > 0 && isset($projectArray[$tmp[0]]) ? $projectArray[$tmp[0]] : ""));
}
else
{
$proj = "";
}
$projct = preg_replace("#^/#", "", $proj);
$projectName = explode("/",$PR); $projectName = strtoupper($projectName[sizeof($projectName)-1]);
$PWD = getPWD("downloads/drops"); // see scripts.php
$isTools = isset($_GET["tools"]);
$isTech = isset($_GET["tech"]);
if (preg_match("#/(tools|technology)/#", $PWD, $m))
{
$isTools = $m[1] == "tools";
$isTech = $m[1] == "technology";
}
#if ($debug > 10) print "PR=$PR, proj=$proj, projct=$projct, isTools=$isTools, isTech=$isTech<br/>";
$projectDownloadsPagePath = "/" . $PR_www . "/downloads";
$buildName = isset($_GET["ID"]) && preg_match("#\d+\.\d+\.\d+/[NIMSR]\d{12}#",$_GET["ID"]) ? $_GET["ID"] : "";
$buildDir = ($isTools ? "/tools/$PR" : ($isTech ? "/technology/$PR" : "/$PR$proj")) . "/downloads/drops/";
$buildID = preg_replace("/.+\/(.+)/", "$1", $buildName);
$subprojName = array_flip($projects); $subprojName = isset($subprojName[$projct]) ? $subprojName[$projct] : "";
$pageTitle = $projectName . /*($subprojName && $projectName != $subprojName ? ' ' . $subprojName : '') .*/ " Build " . $buildName . " - Test Results";
$linkPre = $isBuildServer ? "" : getDownloadScript();
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php");
require_once ($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php");
$App = new App();
$Nav = new Nav();
$Menu = new Menu();
if (is_file($App->getProjectCommon()))
{
include ($App->getProjectCommon());
}
ob_start();
print '<div id="midcolumn">
<div class="homeitem3col">
<h3>'. $pageTitle . '</h3>
<p>For more information on this build, please go to <a href="http://' . ($isBuildServer ? $_SERVER["SERVER_NAME"] : "www.eclipse.org") . $projectDownloadsPagePath . '/?project=' . $projct . '&amp;showAll=1&amp;hlbuild=' . $buildID . '#' . $buildID . '">this project\'s download page</a>.</p>
<ul class="releases">
';
$catgs =
array (
array (
"Console Logs",
"/$buildName/testresults/consolelogs/",
".txt"
),
array (
"JUnit Test Results",
"/$buildName/testresults/xml/",
".xml",
"Errors &amp; Failures"
),
array (
"Compilation Errors",
"/$buildName/compilelogs/plugins/",
".log",
"Errors &amp; Warnings"
)
);
foreach ($catgs as $num => $dirBits)
{
if ($debug > 9) {
print "[$PWD, $dirBits[1], $dirBits[2]]<br/>\n";
print "[$linkPre, $buildDir, $dirBits[1]]<br/>\n";
}
if ($num === 0)
{
$files = loadDir($PWD . $dirBits[1], $dirBits[2]);
$out = "";
if (sizeof($files) > 0)
{
sort($files); reset($files);
foreach ($files as $file)
{
$out .= '<li><a href="' . $linkPre . $buildDir . $dirBits[1] . $file . '">' .
preg_replace("#_consolelog\.txt|\.AllSuites|\.metadata\.log\.txt#", "", $file) .
'</a> (' . pretty_size(filesize($PWD . $dirBits[1] . $file)). ')</li>' . "\n";
}
} else
{
$out .= '<li><i><a href="' . $linkPre . $buildDir . $dirBits[1] . '">No console logs found</a></i>.</li>' . "\n";
}
print '<li><a href="javascript:toggle(\'e' . $num . '\')">' . $dirBits[0] . '</a>';
print '<ul id="e' . $num . '"' . ($_GET["hl"]>0 ? ' style="display: none"' : '') . '>' . "\n";
print $out;
print '</ul>' . "\n";
} else
if ($num === 1)
{
$files = loadDirChildren($PWD . $dirBits[1], $dirBits[2]);
$out = "";
$noProblems = true;
if (sizeof($files) > 0)
{
sort($files); reset($files);
foreach ($files as $file)
{
$results = getTestResults($PWD . $dirBits[1] . $file);
$noProblems = $noProblems && !$results;
$out .= '<li><div>' . $results . '</div><a href="' . $linkPre . $buildDir. $dirBits[1] . $file . '">' .
preg_replace("/\.xml$/", "", $file) . '</a> (' . pretty_size(filesize($PWD . $dirBits[1] . $file)). ')</li>' . "\n";
}
}
print '<li><div><b style="color:' . ($noProblems ? "green" : "red") . '">' . ($noProblems ? "0 " : "") . $dirBits[3] . '</b></div>' .
'<a href="javascript:toggle(\'e' . $num . '\')">' . $dirBits[0] . '</a>';
print '<ul id="e' . $num . '"' . (!$noProblems || $_GET["hl"]==$num ? '' : ' style="display: none"') . '>' . "\n";
print $out;
print '</ul>' . "\n";
} else
if ($num === 2)
{
$files = loadDirChildren($PWD . $dirBits[1], $dirBits[2]);
$out = "";
$summary = getCompileResultsSummary($PWD . $dirBits[1] . "../summary.txt");
$noProblems = !$summary;
if (sizeof($files) > 0)
{
sort($files); reset($files);
foreach ($files as $file)
{
$results = getCompileResults($PWD . $dirBits[1] . $file);
$noProblems = $noProblems && !$results;
$out .= '<li><div>' . $results . '</div><a href="' . $linkPre . $buildDir . $dirBits[1] . $file . '">' .
preg_replace("/((\/@dot|\/doc|.jar).bin.log|_\d+\.\d+\.\d+\.(v\d+|HEAD))/", "", $file) . '</a> (' . pretty_size(filesize($PWD . $dirBits[1] . $file)). ')</li>' . "\n";
}
}
print '<li><div><b style="color:' . ($noProblems ? "green" : "red") . '">' . ($noProblems ? "0 " : "") . ($summary? $summary : $dirBits[3]) . '</b></div>' .
'<a href="javascript:toggle(\'e' . $num . '\')">' . $dirBits[0] . '</a>';
print '<ul id="e' . $num . '"' . (!$noProblems || $_GET["hl"]==$num ? '' : ' style="display: none"') . '>' . "\n";
print $out;
print '</ul>' . "\n";
}
}
print "</ul></div></div>\n";
$html = ob_get_contents();
ob_end_clean();
$pageKeywords = "";
$pageAuthor = "Nick Boldt";
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="http://' . ($isBuildServer ? $_SERVER["SERVER_NAME"] : "www.eclipse.org") . '/modeling/includes/downloads.css"/>' . "\n");
$App->AddExtraHtmlHeader('<script src="http://' . ($isBuildServer ? $_SERVER["SERVER_NAME"] : "www.eclipse.org") . '/modeling/includes/downloads.js" type="text/javascript"></script>' . "\n"); //ie doesn't understand self closing script tags, and won't even try to render the page if you use one
$App->generatePage(isset ($theme) ? $theme : "", $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
function getCompileResultsSummary($file)
{
if (is_file($file))
{
$results = file($file);
$results = join($results, "");
$patterns_str = array (
", 0W",
", 0E",
", 0F"
);
$patterns = array (
"/(\d+)P, /" => " Problems (",
"/(\d+)W/" => " Warnings",
"/(\d+)E/" => " Errors",
"/(\d+)F/" => " Failures",
"/(\d+)P/" => " Problems (?",
);
foreach ($patterns_str as $find)
{
$results = str_replace($find, "", $results);
}
foreach ($patterns as $find => $replace)
{
$results = preg_replace($find, "$1" . $replace, $results);
}
$results = trim($results);
return $results ? $results . ")" : null;
}
return null;
}
function getCompileResults($file)
{
$results = "";
if (is_file($file))
{
$results = exec("tail -1 $file");
if (!$results)
{
$results = file("$file"); $results = $results[sizeof($results)-1];
}
}
if (preg_match("/problem|error|warning/", $results))
{
return $results;
} else
{
return "";
}
}
function getTestResults($file)
{
$results = "";
$data = file($file);
foreach ($data as $line)
{
// <testsuite errors="0" failures="0" ...>
preg_match("/<testsuite errors=\"(\d+)\" failures=\"(\d+).+\"/", $line, $matches);
if (isset ($matches) && is_array($matches) && sizeof($matches) >= 3)
{
$results = $matches[1] === "0" && $matches[2] === "0" ? "" : $matches[1] . "E, " . $matches[2] . "F";
return $results;
}
preg_match("/<testsuite.+failures=\"(\d+)\" errors=\"(\d+)\".+/", $line, $matches);
if (isset ($matches) && is_array($matches) && sizeof($matches) >= 3)
{
$results = $matches[2] === "0" && $matches[1] === "0" ? "" : $matches[2] . "E, " . $matches[1] . "F";
return $results;
}
if (false!==strpos($line,"<testsuites/>") || false!==strpos($line,"<testsuites />") || false!==strpos($line,"<testsuites></testsuites>") || false!==strpos($line,"Failed to invoke suite")) // no tests run!
{
return "<b style='color:red'>D N R</b>";
}
}
return $results;
}
function loadDir($dir, $ext)
{
$stuff = array ();
if (is_dir($dir) && is_readable($dir))
{
$handle = opendir($dir);
while (($file = readdir($handle)) !== false)
{
if (preg_match("/$ext$/", $file) && !preg_match("/^\.{1,2}$/", $file) && is_file("$dir/$file"))
{
$stuff[] = $file;
}
}
closedir($handle);
}
return $stuff;
}
function loadDirChildren($dir, $ext)
{
$stuff = array ();
if (is_dir($dir) && is_readable($dir))
{
$handle = opendir($dir);
while (($file = readdir($handle)) !== false)
{
if (preg_match("/$ext$/", $file) && !preg_match("/^\.{1,2}$/", $file) && is_file("$dir/$file"))
{
$stuff[] = $file;
} else
if (!preg_match("/^\.{1,2}$/", $file) && is_dir("$dir/$file"))
{
$children = loadDirChildren("$dir/$file", $ext);
foreach ($children as $child)
{
$stuff[] = $file . "/" . $child;
}
}
}
closedir($handle);
}
return $stuff;
}
?>