| <?php |
| |
| ini_set("display_errors", true); |
| error_reporting (E_ALL); |
| $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'])) { |
| $targetServer = 'http://download.eclipse.org'; |
| $rPath = $_GET['repoPath']; |
| $repoPath = $targetServer . '/' . $rPath; |
| |
| // ... /N20161019150530/repository |
| $start = strrpos($rPath, '/', -12); |
| $buildlabel = substr($rPath, $start + 1, 15); |
| } else { |
| echo 'Missing repoPath.'; |
| exit; |
| } |
| |
| $buildURL = ""; |
| if (isset($_GET['buildURL'])) { |
| $buildURL = $_GET['buildURL']; |
| } |
| |
| $displayablezipfilesize="(0M)"; |
| if (isset($_GET['zipFileSize'])) { |
| $displayablezipfilesize = $_GET['zipFileSize']; |
| } |
| |
| $pageTitle="Orbit Build $buildlabel"; |
| |
| require $relativePath."/commonFiles/DL.header.php.html"; |
| |
| ?> |
| |
| <?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 "<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=$buildURL; |
| if ($fname != "") { |
| echo "<a href=\"$fname\">Maven Build Output</a><br />"; |
| } else { |
| echo "Maven 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=\"".$imagePath."/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=\"".$imagePath."/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=\"".$imagePath."/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=\"".$imagePath."/commonFiles/Fail.gif\" />\n"; |
| } |
| elseif (file_exists("testsOk.txt")) { |
| echo "<img class=\"cs\" alt=\"Tests Passed\" src=\"".$imagePath."/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=\"".$imagePath."/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=\"".$imagePath."/commonFiles/Checkmark.gif\" />" ."IP Log XML File Checks: Ok <br />\n"; |
| } |
| |
| echo "<a href=\"reporeports/\">CBI Repository Analysis Reports</a><br />\n"; |
| |
| echo "</p>\n"; |
| |
| $currentPageURLSegments = $repoPath; |
| 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}\">${currentPageURLSegments}</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>"; |
| } |
| |
| |
| 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'); |
| |
| $bug506001Loc = 'tools/orbit/bug506001'; |
| |
| foreach ($children as $c) { |
| $childLoc = $c->getAttribute('location'); |
| // ... /N20161019150530/repository |
| $start = strrpos($childLoc, '/', -12); |
| $childBuildLabel = substr($childLoc, $start + 1, 15); |
| |
| $childContent = file_get_contents($targetServer . '/' . $bug506001Loc . '/' . $childBuildLabel . '/' . 'content.xml'); |
| if (! $childContent) { |
| echo 'Could not find ' . $bug506001Loc . '/' . $childBuildLabel . '/' . 'content.xml' . ' on server.'; |
| exit; |
| } |
| |
| $childRepoXml = trim($childContent); |
| $childRepoXmlList[$childLoc] = $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>"; |
| |
| $outHTML = ''; |
| foreach ($childRepoXmlList as $childLoc => $childRepoXml) { |
| $proc->setParameter(null, 'repoPath', $repoPath . '/' . $childLoc); |
| $childXmlDoc = new DOMDocument(); |
| $childXmlDoc->loadXML($childRepoXml); |
| $html = $proc->transformToXML( $childXmlDoc ); |
| $outHTML = $outHTML . $html; |
| } |
| |
| // Sort the content all together |
| $sortXslContent = file_get_contents('sort.xsl'); |
| $sortXslDoc = new DOMDocument(); |
| $sortXslDoc->loadXML($sortXslContent); |
| |
| $outXmlDoc = new DOMDocument(); |
| $outXmlDoc->loadHTML($outHTML); |
| |
| $sproc = new XSLTProcessor(); |
| $sproc->importStylesheet($sortXslDoc); |
| $finalHTML = $sproc->transformToXML ($outXmlDoc); |
| echo "$finalHTML"; |
| |
| 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"; |
| |
| ?> |