blob: dd2efa31ee4049ab77b1d0413ca80abfa92e5c7b [file] [log] [blame]
<?php
echo "This page is disabled by request of <a href='https://bugs.eclipse.org/bugs/show_bug.cgi?id=250820'>bug 250820</a>. We apologize for the inconvenience.";
exit;
########################################################################
require_once ("../includes/buildServer-common.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());
require_once($_SERVER['DOCUMENT_ROOT'] . "/modeling/includes/scripts.php");
$isEMFserver = (preg_match("/^emf(?:\.torolab\.ibm\.com)$/", $_SERVER["SERVER_NAME"]));
$isBuildServer = (preg_match("/^(emft|modeling|build)\.eclipse\.org$/", $_SERVER["SERVER_NAME"])) || $isEMFserver;
internalUseOnly();
# use this script to kick parsecvs.sh for a given set of project folders
# should be usable as web and commandline api
$previewOnly = (isset($_GET["previewOnly"]) && $_GET["previewOnly"] ? 1 : 0);
ob_start();
print <<<HTML
<script language="javascript">
function toggleDetails(id)
{
toggle=document.getElementById("divToggle_" + id);
detail=document.getElementById("divDetail_" + id);
if (toggle.innerHTML=="[+]")
{
toggle.innerHTML="[-]";
detail.style.display="";
}
else
{
toggle.innerHTML="[+]";
detail.style.display="none";
}
}
</script>
HTML;
print "<div id=\"midcolumn\">\n";
if (isset($_GET["log"]))
{
print "<h1>Update Search CVS - Latest Updates</h1>\n";
print '<div class="homeitem3col"><h3>Logged events</h3><blockquote>' . "\n";
exec("cat /tmp/parsecvs_web.log.txt", $logtail);
for ($i=sizeof($logtail)-50; $i<sizeof($logtail); $i++) {
if (isset($logtail[$i]) && $logtail[$i]) print $logtail[$i]."<br/>\n";
}
print "</blockquote></div>\n";
}
else
{
if (!isset($_GET["projects"]) || !$_GET["projects"] || !is_array($_GET["projects"]) || sizeof($_GET["projects"]) == 0)
{
print "<h1>Update Search CVS - API Reference</h1>\n";
print '<div class="homeitem3col">' . "\n";
$regs = null;
preg_match("@/([^/]+)$@", $_SERVER["SCRIPT_NAME"], $regs);
$script = $regs[1];
print "<h3>INPUT</h3>\n<ul><li>$script?projects[]=<i style=\"color:blue\">{cvs src folder 1}</i>&amp;projects[]=<i style=\"color:blue\">{cvs src folder 2}</i>&amp;...</li></ul><br/>\n";
print "<h3>EXAMPLE</h3>\n<ul><li>$script?projects[]=cvssrc/emf-org.eclipse.emf&amp;projects[]=cvssrc_branches/mdt-org.eclipse.xsd-R2_1_maintenance</li></ul><br/>\n";
print '<h3>OUTPUT</h3>' . "\n" . '<ul><li>starts a headless process; can run <a href="http://www.eclipse.org/modeling/mdt/news/checkReleaseExists.php">checkReleaseExists.php</a> task to see if done</li></ul><br/>' . "\n";
print "</div>\n";
}
print "<h1>Update Search CVS - Web UI</h1>\n";
# given $_GET["projects"], pass to parsecvs.sh as headless exec task using lockfile
if (isset($_GET["projects"]) && $_GET["projects"] && is_array($_GET["projects"]))
{
$validprojectKeys = projects(true);
$projects = $_GET["projects"]; sort($projects); reset($projects);
if (sizeof($validprojectKeys) > 0)
{
# running as user wwwrun
$cmd = '';
$lockfile = '';
$addedTarget = false;
foreach ($projects as $targ)
{
if ($targ && in_array($targ, $validprojectKeys))
{
$cmd .= ' ' . escapeshellarg($targ);
$lockfile .= ($lockfile ? "_" : "") . preg_replace("#^.+/#","",$targ);
$addedTarget = true;
}
}
if (isset($_GET['email']) && trim($_GET['email']))
{
$cmd .= " -email " . $_GET['email'];
}
if (!$addedTarget)
{
print "<li>Error: no valid projects added! Click back and try again.</li>";
}
else
{
if ($previewOnly) {
print '<div class="homeitem3col">'."\n";
print "<h3>Build Command (Preview Only)</h3>\n";
print "<p><small><code>".preg_replace("/\ \-/","<br> -",$cmd)."</code></small></p>";
} else if (!$isBuildDotEclipseServer){
print "<p><small><code>/opt/public/modeling/searchcvs/parsecvs.sh " . $cmd."</code></small></p>";
}
if (!$previewOnly && $isBuildDotEclipseServer)
{
$lockfile = "/opt/public/modeling/tmp/" . $lockfile . "_updateSearchCVS.lock.txt"; // org.eclipse.emf_org.eclipse.xsd_updateSearchCVS.lock.txt
// check if lock file exists for this build type
if (is_file($lockfile))
{
print '<div class="homeitem3col">'."\n";
print "<h3><b style=\"color:orange;background-color:white\">&#160;WARNING!&#160;</b> Another run is already in progress.</h3>\n";
print "<p>Logfile: <u>/tmp/parsecvs_web.log.txt</u></p>";
print "<p>Lockfile: <u>$lockfile</u></p>";
print "<p><small><code>";
foreach (file($lockfile) as $line)
{
print "$line\n";
}
print "</code></small></p>";
}
else // create lockfile
{
print '<div class="homeitem3col">'."\n";
$fp = fopen($lockfile, "w");
fputs($fp, $cmd . "\n");
fclose($fp);
$fp = null;
$fp = file($lockfile);
if (is_array($fp) && sizeof($fp)>0)
{
print "<h3><b style=\"color:green;background-color:white\">&#160;OK!&#160;</b> Build will start at " . date("h:ia", strtotime("+1 minute")) . ".</h3>\n";
print "<p>Logfile: <u>/tmp/parsecvs_web.log.txt</u></p>";
print "<p>Lockfile: <u>$lockfile</u></p>";
print "<p><small><code>".str_replace("' '","'<br/>'",preg_replace("/\ \-/","<br> -",$cmd))."</code></small></p>";
}
else
{
print "<h3><b style=\"color:red;background-color:white\">&#160;ERROR!&#160;</b> Could not write to lockfile!</h3>\n";
print "<p>Lockfile: <u>$lockfile</u></p>";
print "<p><small><code>".str_replace("' '","'<br/>'",preg_replace("/\ \-/","<br> -",$cmd))."</code></small></p>";
}
}
if (is_file($lockfile))
{
if (!chmod($lockfile, 0666))
{
print "<p><b style=\"color:red;background-color:white\">&#160;ERROR!&#160;</b> Could not set permission on lockfile; must delete manually. Contact codeslave{at}ca.ibm.com for assistance.</p>";
}
}
}
}
}
print "<p><a href=\"?\">Update another module</a></p>\n";
print "</div>\n";
}
else # if no $_GET["projects"] value, present UI to multi-select targets.
{
?>
<div class="homeitem3col">
<h3>Choose project(s) / component(s) to update</h3>
<blockquote>
<form action="" method="get" name="runUpdate">
<table>
<tr>
<td><b>Project(s):</b></td>
<td>&#160;</td>
<td colspan="2">
<select size="10" multiple="multiple" id="project" name="projects[]">
<?php
$validprojects = projects(false);
foreach ($validprojects as $val => $label)
{
print "<option value=\"$val\">".str_replace("-"," | ",$label)."</option>\n"; # cvssrc_branches/emf-org.eclipse.emf.ecore.sdo-R2_1_maintenance => emf | org.eclipse.emf.ecore.sdo | R2_1_maintenance
}
?>
</select>
<input type="hidden" name="previewOnly" value="<?php echo $previewOnly; ?>"/>
</td>
</tr>
<tr>
<td><b>Email?</b></td>
<td>&#160;</td>
<td colspan="1"><input name="email" size="25"/></td>
<td width="300"><small><a id="divToggle_email" name="divToggle_email" href="javascript:toggleDetails('email')">[+]</a></small>
<div id="divDetail_email" name="divDetail_email" style="display:none;border:0">
<small>Add your email (or comma-separated emails) to be notified when done.
</small>
</div>
</td>
</tr>
<tr>
<td>&#160;</td>
<td>
<input type="submit" value="<?php print ($previewOnly ? "Preview" : "Go!"); ?>"/>
</td>
</tr>
</table>
</form>
</blockquote>
</div>
<?php
}
}
print "</div>\n";
if (!isset($_GET["log"]))
{
print "<div id=\"rightcolumn\">\n";
print "<div class=\"sideitem\">\n";
print "<h6>Latest Logged Events</h6>\n";
exec("cat /tmp/parsecvs_web.log.txt", $logtail);
$out = "";
$cnt=0;
for ($i=sizeof($logtail)-1; $i>=0; $i--) {
if (preg_match("#\[\d{4}.+\d+\] #",$logtail[$i]))
{
$cnt++; $out = "<small style='font-size:8px'>" . preg_replace("#(\[\d{4}.+\d+\]) #", "<br/><i style='color:gray'>$1</i><br/>", $logtail[$i]) . "</small>"."<br/>\n" . $out;
}
if ($cnt == 6) break;
}
print $out;
print "<p align=\"right\"><a href=\"?log\">more</a></p>\n";
print "</div>\n";
print "</div>\n";
}
$html = ob_get_contents();
ob_end_clean();
$pageTitle = (isset($pageTitle) ? $pageTitle : "Eclipse Modeling - Update Search CVS");
$pageKeywords = "";
$pageAuthor = "Nick Boldt";
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
function projects($keysOnly = false)
{
$vps = array(
"cvssrc" => loadDirSimple("/opt/public/modeling/searchcvs/cvssrc","","d"),
"cvssrc_branches" => loadDirSimple("/opt/public/modeling/searchcvs/cvssrc_branches","","d")
);
foreach ($vps as $pre => $vp)
{
foreach ($vp as $pr)
{
if (!preg_match("/(CVS|OLD|-latest$)/",$pr))
{
if ($keysOnly)
{
$validprojects[] = "$pre/$pr"; # 0 => cvssrc_branches/emf-org.eclipse.emf.ecore.sdo-R2_1_maintenance
}
else
{
$validprojects["$pre/$pr"] = $pr; # cvssrc_branches/emf-org.eclipse.emf.ecore.sdo-R2_1_maintenance => emf-org.eclipse.emf.ecore.sdo-R2_1_maintenance
}
}
}
}
ksort($validprojects); reset($validprojects);
return $validprojects;
}
?>