blob: ccefbc2438bbedc3662a816b822e7e979dcb94a6 [file] [log] [blame]
<?php
ini_set("display_errors", true);
error_reporting (E_ALL);
echo 'Preparing Final Page';
$serverName = $_SERVER["SERVER_NAME"];
if ("download.eclipse.org" === $serverName) {
include "dlconfigOnDownloads.php";
} else {
include "dlconfig.php";
}
$ipouterrors= array();
//include $relativePath."/commonFiles/orbitUtilities.php";
// previous page is for "bread crumbs"
# get path to use when resolving relative children repositories
if (isset($_GET['repoPath'])) {
$rPath = $_GET['repoPath'];
$repoPath = 'http://download.eclipse.org/' . $rPath;
$buildlabel = substr($rPath, strrpos($rPath, '/') + 1);
} else {
echo 'Missing repoPath.';
exit;
}
$pageTitle="Orbit Build $buildlabel";
// curPageURL returns URL segments
// http://build.eclipse.org/orbit/projects/ ==> http://build.eclipse.org/orbit/projects/
// http://build.eclipse.org/orbit/projects/index.php ==> http://build.eclipse.org/orbit/projects/
// http://build.eclipse.org/orbit/projects/index.php?value=name ==> http://build.eclipse.org/orbit/projects/
// echo "current base URL: " . curPageURL();
//$ipoutfilename=__DIR__."/commonFiles/iplogFileErrors.txt";
//chmod($ipoutfilename, 0666);
//file_put_contents ($ipoutfilename,"");
function curPageURL() {
$isHTTPS = (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on");
$port = (isset($_SERVER["SERVER_PORT"]) && ((!$isHTTPS && $_SERVER["SERVER_PORT"] != "80") || ($isHTTPS && $_SERVER["SERVER_PORT"] != "443")));
$port = ($port) ? ':'.$_SERVER["SERVER_PORT"] : '';
$url = ($isHTTPS ? 'https://' : 'http://').$_SERVER["SERVER_NAME"].$port.$_SERVER["REQUEST_URI"];
$pattern = "!(^.*/)" . "index\.php(\?.*)*$!";
$matched = preg_match($pattern, $url, $matches);
if ($matched)
{
$url=$matches[1];
}
return $url;
}
// test of curPageURL
// http://build.eclipse.org/orbit/projects/ ==> http://build.eclipse.org/orbit/projects/
// http://build.eclipse.org/orbit/projects/index.php ==> http://build.eclipse.org/orbit/projects/
// http://build.eclipse.org/orbit/projects/index.php?value=name ==> http://build.eclipse.org/orbit/projects/
// echo "current base URL: " . curPageURL();
require $relativePath."/commonFiles/DL.header.php.html";
include "$relativePath"."/commonFiles/tinyReminder.php";
?>
<?php
// detect if on Eclipse download machine and use Eclipse mirror URLs
$pos = strpos(getcwd(),'/tools/orbit/committers/drops/');
if($pos === false) {
$downloadUrlPrefix = '';
$downloadWithRedirectUrlPrefix = '';
}
else {
$downloadUrlPrefix = 'http://www.eclipse.org/downloads/download.php?file=/tools/orbit/committers/drops/' . $buildlabel . '/';
$downloadWithRedirectUrlPrefix = 'http://www.eclipse.org/downloads/download.php?r=1&file=/tools/orbit/committers/drops/' . $buildlabel . '/';
}
# get repo content
if ( $_SERVER['REQUEST_METHOD'] === 'POST' ) {
if ( $_SERVER['CONTENT_LENGTH'] > 1000) {
echo 'Input repository is too large. The input repository should ' .
'be a composite metadata repository.';
exit;
}
$repoXml = trim(file_get_contents('php://input'));
}
# read composite content
$xmlDoc = new DOMDocument();
if ( isset($repoXml) ) {
$xmlDoc->loadXML( $repoXml );
} else {
if(!headers_sent())
header($_SERVER['SERVER_PROTOCOL'].' 400 Missing Repo Data', true, 400);
else
die('Need repo data!');
exit;
}
$xslContent = file_get_contents( 'repo-index.xsl' );
$xslDoc = new DOMDocument();
$xslDoc->loadXML( $xslContent );
# transform to HTML
$proc = new XSLTProcessor();
$proc->importStylesheet( $xslDoc );
echo "<h1>Orbit Build: $buildlabel</h1>";
echo "<p><b>This page is a work in progress.</b></p>";
echo "<p>The repository offered by this build is a composite of the content seen here and the last 'old' R (Recommended) build. The metadata from that build is not yet fully displayed below so to view it please go to <a href=\"http://download.eclipse.org/tools/orbit/downloads/drops/R20160520211859/\">R20160520211859</a>.<p>";
echo "<h2>Useful Information</h2>";
echo "<p>In addition to the bundles themselves, the following maps, project sets, and test results are useful for committers and consumers:</p>";
// If a build fails, especially early, many of the following files won't exist.
// So, we don't produce "link" to them. But, we still leave a descriptive line, in case they
// disappear (are not produced) for some other reason, then we'd notice.
// Subsequently decided to put in "marker" file for when build "fails early", so
// for now will skip these files we know won't exist, if we fail early, but
// basic logic (of checking for existence) is still sound.
// Note: the above "directory.txt" file should always exist, as it is
// "raw" map file, retrieved first, and used during the build, so might be
// required to help debugging a failure.
$failedEarlyfile="buildFailedEarly.txt";
if (!file_exists($failedEarlyfile)) {
$fname="iplog-$buildlabel.html";
if (file_exists($fname)) {
echo "<a href=\"$fname\">Bundle IP Log Information</a><br />";
} else {
echo "Bundle IP Log Information does not exist. <br />";
}
// Caution this "antBuilderOutput" is here twice, once, here, for
// normal case, and later in "failed early" else case.
// TODO: there's gotta be a better way.
$fname="antBuilderOutput.log";
if (file_exists($fname)) {
echo "<a href=\"$fname\">Ant Build Output</a><br />";
} else {
echo "Ant Build Output does not exist. <br />";
}
$fname="comparator.log";
if (file_exists($fname)) {
echo "<a href=\"$fname\">P2 Mirror Comparator Output</a><br />";
} else {
echo "P2 Mirror Comparator Output does not exist. <br />";
}
// the referenceRepoExists (and Not) file is an indicator file whose contents is the name of the
// reference repo we tried to use in the build. Elsewhere, we test for mere existence of the repository,
// and use "fail" icon if it did not exist,
// but even if it exists, that does not necessarily mean it is the right repository to be using, so we display
// the name of the repository directory for easy manual inspection (though, is a little redundent with
// comparator log).
// note to self: use file_get_contents to reading contents into a string.
if (file_exists("referenceRepoExists")) {
echo "<img class=\"cs\" alt=\"Repo exists\" src=\"".$relativePath."/commonFiles/Checkmark.gif\" /> Repo used for comparison during mirroring: ";
readfile("referenceRepoExists");
echo "<br />";
}
elseif (file_exists("referenceRepoExistsNot")) {
echo "<img class=\"cs\" alt=\"Repo not found\" src=\"".$relativePath."/commonFiles/Fail.gif\" /> Bad build. Repo to use while mirroring was not found:<br />\n";
readfile("referenceRepoExistsNot");
echo "<br />\n";
}
else {
echo "<img class=\"cs\" alt=\"Repo indicator file not found\" src=\"".$relativePath."/commonFiles/Fail.gif\" /><br />\n";
echo "Repository indicator file not found. Probably a bad build or build script error? Check Ant Build Output.";
echo "<br />\n";
}
$fname="results-$buildlabel.xml";
if (file_exists($fname)) {
echo "<a href=\"results-$buildlabel.xml\">\n";
// the testsFailed.txt file is an intentional indicator (only) file
if (file_exists("testsFailed.txt")) {
echo "<img class=\"cs\" alt=\"Tests Failed\" src=\"".$relativePath."/commonFiles/Fail.gif\" />\n";
}
elseif (file_exists("testsOk.txt")) {
echo "<img class=\"cs\" alt=\"Tests Passed\" src=\"".$relativePath."/commonFiles/Checkmark.gif\" />\n";
}
echo "Test Results</a><br />\n";
} else {
echo "Test Results do not exist. <br />\n";
}
// We get the list "early" so we have results of IP Log checks at right point in page.
// $bundleList = getBundleList("./repository/plugins");
$sizeofiperrors=count($ipouterrors);
//echo "count: $sizeofiperrors <br />";
//echo "contents: <br />";
//dump($ipouterrors);
if ($sizeofiperrors > 0) {
// this likely won't have "permission" to write files on web server.
// we execute the index.php file during "build" to get this file written.
$filenameerr="testsFailedIPLog.txt";
$dataerr="";
foreach ($ipouterrors as $iperrs) {
$dataerr = $dataerr.$iperrs."<br />\n";
}
file_put_contents ($filenameerr, $dataerr);
//
echo "<img class=\"cs\" alt=\"Checks Failed\" src=\"".$relativePath."/commonFiles/Fail.gif\" />" . "IP Log XML File Checks: Errors Found: <br />\n";
foreach ($ipouterrors as $iperrs) {
echo "<li>".$iperrs."</li>\n";
}
} else {
echo "<img class=\"cs\" alt=\"Checks Ok\" src=\"".$relativePath."/commonFiles/Checkmark.gif\" />" ."IP Log XML File Checks: Ok <br />\n";
}
echo "</p>\n";
$currentPageURLSegments = curPageURL();
echo "<h2>Orbit Build Repository</h2>\n";
echo "<p>For HTTP access, a p2 repository for this specific build can be found by adding 'repository' to the end of this download site URL, namely:<br />";
echo "<a href=\"${currentPageURLSegments}repository/\">${currentPageURLSegments}repository/</a></p>";
if (file_exists("repository/index.xml.gz")) {
echo "<p>For use with tools such as <a href=\"http://bndtools.org/\">bndtools</a>, an <a href=\"http://www.osgi.org/Main/HomePage\">OSGi</a> repository index file for this specific build can be found by adding 'repository/index.xml.gz' to the end of this download site URL, namely:<br />";
echo "<a href=\"${currentPageURLSegments}repository/index.xml.gz\">${currentPageURLSegments}repository/index.xml.gz</a></p>";
}
$displayablezipfilesize=fileSizeForDisplay("orbit-buildrepo-$buildlabel.zip");
echo "<h2>Zipped Orbit Build Repository</h2>";
echo "<p>The following zip file is a compressed-archive version of the above repository, for those that need or desire to have a copy of the whole repository on their local machine:<br />";
echo "<a href=\"{$downloadUrlPrefix}orbit-buildrepo-$buildlabel.zip\">orbit-buildrepo-$buildlabel.zip</a> (<a href=\"checksum/orbit-buildrepo-$buildlabel.zip.md5\">md5</a>) (<a href=\"checksum/orbit-buildrepo-$buildlabel.zip.sha1\">sha1</a>) $displayablezipfilesize</p>";
} else {
echo "Build failed early. Check <a href=\"$failedEarlyfile\">short summary</a> or full Ant Build Output.<br />";
// Caution this "antBuilderOutput" is here twice, once, here, for
// "failed early" case, and above, for normal case. TODO: there's gotta be a better way.
$fname="antBuilderOutput.log";
if (file_exists($fname)) {
echo "<a href=\"$fname\">Ant Build Output</a><br />";
} else {
echo "Ant Build Output does not exist. <br />";
}
}
$childRepoXmlList = array();
$children = $xmlDoc->getElementsByTagName('child');
foreach ($children as $c) {
$childLoc = $c->getAttribute('location');
$proc->setParameter(null, 'repoPath', $repoPath . '/' . $childLoc);
$childContent = file_get_contents($repoPath . '/' . $childLoc . '/' . 'content.jar');
if (! $childContent) {
echo 'Could not find ' . $childLoc . '/' . 'content.jar' . ' on server.';
exit;
}
$childRepoFile = tmpfile();
$ret = fwrite($childRepoFile, $childContent);
if (! $ret) {
echo 'Failed to read ' . $childLoc . '/' . 'content.jar';
exit;
}
$childRepoFileData = stream_get_meta_data($childRepoFile);
$childRepoFileName = $childRepoFileData['uri'];
$zip = zip_open($childRepoFileName);
while ($zip_entry = zip_read($zip)) {
if (zip_entry_name($zip_entry) == 'content.xml' &&
zip_entry_open($zip, $zip_entry, "r")) {
$fstream = zip_entry_read($zip_entry, zip_entry_filesize($zip_entry));
zip_entry_close($zip_entry);
}
}
zip_close($zip);
fclose($childRepoFile);
$childRepoXml = trim($fstream);
array_push($childRepoXmlList, $childRepoXml);
}
$nBundles = 0;
$nDistinctBundles = 0;
$nTotalBundles = 0;
$nDistinctCQs = 0;
$listOfCQs = "";
foreach ($childRepoXmlList as $childRepoXml) {
$childXmlDoc = new DOMDocument();
$childXmlDoc->loadXML($childRepoXml);
$xpath = new DOMXpath($childXmlDoc);
$nBundles += $xpath->evaluate("count(/repository/units/unit[provides/provided/@namespace='org.eclipse.equinox.p2.eclipse.type' and provides/provided/@name='bundle']/@id)");
$nDistinctBundles += $xpath->evaluate("count(/repository/units/unit[provides/provided/@namespace='org.eclipse.equinox.p2.eclipse.type' and provides/provided/@name='bundle' and not(preceding::unit/@id=../../@id)]/@id)");
$nTotalBundles += $xpath->evaluate("count(/repository/units/unit[provides/provided/@name='bundle' or provides/provided/@name='source']/@id)");
$nDistinctCQs += $xpath->evaluate("count(/repository/units/unit/properties/property[@name='iplog.bug_id' and not(preceding::property/@value=@value)])");
$cqNodeList = $xpath->evaluate("/repository/units/unit/properties/property[@name='iplog.bug_id' and not(preceding::property/@value=@value)]/@value");
foreach ($cqNodeList as $node) {
$listOfCQs .= "," . $node->nodeValue;
}
}
$ipzillaURL = "https://dev.eclipse.org/ipzilla/buglist.cgi?bug_id=" . $listOfCQs;
echo "<h2>Individual Bundles</h2>";
echo "<h3>Statistics</h3>";
echo "<p>Number of distinct third party packages: $nDistinctBundles.<br />";
echo "Number of bundles (including different versions): $nBundles. <br />";
echo "Total number of bundles (including source): $nTotalBundles.";
echo "<h3>CQ Bookkeeping</h3>";
echo "Total number of distinct CQs: $nDistinctCQs. <br />";
echo "IPZilla <a href=\"$ipzillaURL\">list of all CQs</a></p>";
echo "<p>Note: IPZilla is a database for tracking CQs (Contribution Questionnaires) and is only accessible by committers, ";
echo "since in theory they might contain some non-public information. But, don't worry ... if you are not a committer you are not";
echo " missing anything ... they are pretty dry! These (and the links provided here) are just some aides for committers to double check our book-keeping.</p>";
echo "<h3>Table of Bundles</h3>";
echo "<table class=\"table table-striped table-condensed\">";
echo "<tr>";
echo "<th align=\"left\">Bundle</th>";
echo "<th>Source</th>";
echo "<th>Version</th>";
echo "<th>Orbit CQ</th>";
echo "<th>Orbit Contact</th>";
echo "</tr>";
foreach ($childRepoXmlList as $childRepoXml) {
$childXmlDoc = new DOMDocument();
$childXmlDoc->loadXML($childRepoXml);
$html = $proc->transformToXML( $childXmlDoc );
echo "$html";
}
echo "</table>";
echo "<p>Note: entries marked with 'unzip' are intented to be unzipped in a normal IDE environment, to work as intended (even though the file to download is a jar file).</p>";
include $relativePath."/commonFiles/footerSUA.html";
include $relativePath."/commonFiles/footerWebmaster.html";
require $relativePath."/commonFiles/DL.footer.php.html";
?>