| <?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"; |
| |
| ?> |