blob: c7afa6601067521f51cf76fc156d746569c26f47 [file] [log] [blame]
<?php
# $PR = "modeling/mdt";
# $proj = "/uml2";
# $projct = "uml2";
# $topProj = "mdt";
# $componentName = "UML2";
$showAll=null;
$showMax=null;
$sortBy=null;
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/build/_common.php");
$topProj = preg_replace("#.+/(.+)#","$1", $PR);
// suppress projects which can't be built this way
if (isset($nodownloads)) array_push($nodownloads,"xsd");
internalUseOnly();
ob_start();
$debugb = isset($_GET["debugb"]) ? 1 : 0;
$previewOnly = isset($_GET["previewOnly"]) ? 1 : 0;
$trans = isset($projects) && is_array($projects) ? array_flip($projects) : array();
$projctFromPath = getProjectFromPath($PR);
// Support single component projects like GEF
if (!$projctFromPath && $PR == $projct) $projctFromPath = $projct;
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"] : $projctFromPath);
}
else
{
$proj = "";
}
$projct = preg_replace("#^/#", "", $proj);
if ($projct != $projctFromPath && is_dir($_SERVER['DOCUMENT_ROOT'] . "/" . $PR . $proj . "/build/"))
{
header("Location: /" . $PR . $proj . "/build/");
}
$componentName = $trans[$projct];
print "<div id=\"midcolumn\">\n";
if (strtoupper($topProj) == $componentName)
{
print "<h1>New $componentName Build</h1>\n";
}
else
{
print "<h1>New " . strtoupper($topProj) . " Component Build: ". $componentName . "</h1>\n";
}
if (!isset ($_POST["process"]) || !$_POST["process"] == "build") {
print showBuildsInProgress();
}
if (is_array($projects) && sizeof($projects) > 1)
{
print doSelectProject($projectArray, $proj, $nomenclature, "homeitem3col", $showAll, $showMax, $sortBy);
} ?>
<div class="homeitem3col">
<h3>Run A Build</h3>
<?php
if (!isset ($_POST["process"]) || !$_POST["process"] == "build")
{ // page one, the form
print "<p>To run a build, please complete the following form and click the Build button. For help, click the <a href=\"#step3\">[+]</a> links below.</p>";
}
else
{
print "<p>Your build is ".($previewOnly?"<b>NOT</b> ":"")."in progress".($previewOnly?", but the command is displayed below for preview":"").
". <a href=\"?project=$projct".($debugb?"&amp;debugb=1":"").($previewOnly?"&amp;previewOnly=1":"")."\">Build another?</a></p>";
}
if (!isset($options))
{
$options = array();
}
else
{
$options = array_merge($options, loadOptionsFromFile($dependenciesURLsFile));
$options["BranchIES"] = array ("HEAD","R3_3_maintenance");
$options["RunTests"] = array ("JUnit Tests=JUnit");
}
$options["BuildType"] = array("Release=R","Stable=S","Integration=I","Maintenance=M","Nightly=N|selected");
// bug 222298: this will probably break on some servers
# TODO: make this work with cvs connection instead of -sub flag
$selectedDepsList = array();
# for this to work, need /home/www-data/build/modeling/scripts/promoteToEclipse.$projct.properties
# can use /home/www-data/build/modeling/scripts/getPromotePropertiesFromCVS.sh to grab latest version from CVS
exec($workDir . "modeling/scripts/start_cron.sh -sub $projct -noSearchCVS -depsOnly", $selectedDepsList);
#print $workDir . "modeling/scripts/start_cron.sh -sub $projct -noSearchCVS -depsOnly<br/>"; print_r($selectedDepsList);
$selectedDepsList2 = array();
foreach($selectedDepsList as $i => $row)
{
$bits = explode("=",$row);
if (!isset($bits[1])) # properties file not found in /home/www-data/build/modeling/scripts/
{
break;
}
$selectedDepsList2[$bits[0]] = $bits[1];
}
$selectedDepsList = $selectedDepsList2; unset($selectedDepsList2); //print_r($selectedDepsList);
if (!isset ($_POST["process"]) || !$_POST["process"] == "build")
{ // page one, the form
?>
<table>
<form method=POST name="buildForm">
<input type="hidden" name="process" value="build" />
<tr>
<td colspan="4"></td>
<td colspan="2">
<div id="note" name="note" style="border:0;font-style:italic;font-weight:bold" readonly="readonly">&#160;</div>
</td>
</tr>
<tr>
<td><img width="27" src="/modeling/images/numbers/1.gif" /></td>
<td>&#160;</td>
<td><b>Branch, Subproject &amp; Type</b></td>
<td>&#160;</td>
<input name="build_Branch" type="hidden" size="8" maxlength="10" onchange="this.value=this.value.replace(/[^0-9\.]/g,'');"/>
<input name="build_Java_Home" type="hidden" size="20"/>
<td colspan=3><select name="build_CVS_Branch" onchange="doBranchSelected(this)">
<?php displayOptionsTriplet($options["BranchAndJDK"]); ?>
</select>
<select name="build_Build_Type">
<?php displayOptions($options["BuildType"]); ?>
</select></td>
</tr>
<tr>
<td colspan="6" align="right">
<div name="fullURL" id="fullURL" style="border:0;font-size:9px;" readonly="readonly">&#160;</div>
</td>
</tr>
<tr>
<td colspan="4"></td>
<td colspan="2">
<span style="font-size:x-small"><acronym title="Show all deps / show only selected deps"><a href="javascript:toggleDependencies()">Toggle Selection</a></acronym> | <acronym title="Define a regex in _common.php to use this"><a href="javascript:resetLatestDependencies()">Reset Latest Dependencies</a></acronym></span>
</td>
</tr>
<tr valign="top">
<td><img width="27" src="/modeling/images/numbers/2.gif" /></td>
<td>&#160;</td>
<td><b>Dependency URLs</b><br>
<span style="font-size:x-small">
choose URLs <br/>(use <i>CTRL</i> <br>
for multiple selections - see links at right)</span>
<p><span style="font-size:x-small">&#160;</span></p>
<p><span style="font-size:x-small">- AND/OR -</span></p>
</td>
<td>&#160;</td>
<td colspan=2>
<span style="font-size:x-small">
<select multiple="multiple" style="font-size:9px" name="build_Dependencies_URL[]" size="18" onchange="showfullURL(this.options[this.selectedIndex].value);">
<?php displayURLs($options["DependenciesURL"]); ?>
</select></td>
</tr>
<tr valign="top">
<td colspan=2>&#160;</td>
<td><span style="font-size:x-small">paste full URL(s), one per line or comma separated (new values will be stored)</span>
</td>
<td>&#160;</td>
<td colspan=2>
<textarea name="build_Dependencies_URL_New" cols="35" rows="4"></textarea>
</td>
</tr>
<tr><td colspan="6">&#160;</td></tr>
<tr>
<td rowspan="1" valign="top"><a name="step3"></a><img width="27" src="/modeling/images/numbers/3.gif" /></td>
<td rowspan="1">&#160;</td>
<td colspan=1><a href="http://wiki.eclipse.org/index.php/Platform-releng-basebuilder">Basebuilder</a> Branch:</td>
<td>&#160;</td>
<td><input size="15" name="build_basebuilder_branch" value="<?php echo $options["BaseBuilderBranch"]; ?>">
</td>
<td width="350"><span style="font-size:x-small"><a id="divToggle_relengBasebuilder" name="divToggle_relengBasebuilder" href="javascript:toggleDetails('relengBasebuilder')">[+]</a></span>
<div id="divDetail_relengBasebuilder" name="divDetail_relengBasebuilder" style="display:none;border:0">
<span style="font-size:x-small">
Enter Tag or Branch, eg.,
<acronym title="Eclipse 3.5.x">R35_M5</acronym>,
<acronym title="Eclipse 3.4.x">RC2_34</acronym>,
<acronym title="Eclipse 3.3.x">v20070614</acronym>,
<acronym title="Eclipse 3.2.x">r322_v20070104</acronym>,
<acronym title="Eclipse 3.1.x">R3_1_maintenance</acronym> :: <a href="http://wiki.eclipse.org/index.php/Platform-releng-basebuilder">wiki</a>
</span>
</div>
</td>
</tr>
<tr>
<td valign="top" rowspan="2" valign="top"><img width="27" src="/modeling/images/numbers/4.gif" /></td>
<td rowspan="2">&#160;</td>
<td><b>Build Alias</b><br><span style="font-size:x-small">required for S and R builds</span></td>
<td>&#160;</td>
<td><input name="build_Build_Alias" size=8></td>
<td width="300"><span style="font-size:x-small"><a id="divToggle_buildAlias" name="divToggle_buildAlias" href="javascript:toggleDetails('buildAlias')">[+]</a></span>
<div id="divDetail_buildAlias" name="divDetail_buildAlias" style="display:none;border:0">
<span style="font-size:x-small">
Eg., to label a milestone as "0.7.0M4" instead of "S200712120000". You must include the version -- "M4" is not valid.
</span>
</div>
</td>
</tr>
<tr valign="top">
<td valign="middle"><b>Mapfile &amp; Tagging</b></td>
<td>&#160;</td>
<td><select name="build_Mapfile_Rule" size="1">
<?php $options["MapfileRule"] = array (
"Use Map=use-false",
"Generate Map=gen-false");
displayOptions($options["MapfileRule"]); ?>
</select>
</td>
<td><span style="font-size:x-small"><a id="divToggle_MapfileRule" name="divToggle_MapfileRule" href="javascript:toggleDetails('MapfileRule')">[+]</a></span>
<div id="divDetail_MapfileRule" name="divDetail_MapfileRule" style="display:none;border:0">
<table><tr valign="top"><td><span style="font-size:x-small">Use Map</span></td><td><span style="font-size:x-small"> : </span></td><td><span style="font-size:x-small">Extract static <?php echo $projct; ?>.map file from CVS and use that for build. Tag(s) listed in mapfile MUST EXIST ALREADY.</span></td></tr>
<tr valign="top"><td><span style="font-size:x-small">Generate Map</span></td><td><span style="font-size:x-small"> : </span></td><td><span style="font-size:x-small">Generate map file using branch (eg., R1_0_maintenance).</span></td></tr>
</table>
</div>
</td>
</tr>
<tr><td colspan="6">&#160;</td></tr>
<tr>
<td rowspan="1"><img width="27" src="/modeling/images/numbers/5.gif" /></td>
<td rowspan="1">&#160;</td>
<td><b>Run Tests</b></td>
<td>&#160;</td>
<td colspan="1">
<?php displayCheckboxes("build_Run_Tests",$options["RunTests"]); ?>
</td>
<td width="300"><span style="font-size:x-small"><a id="divToggle_RunTests" name="divToggle_RunTests" href="javascript:toggleDetails('RunTests')">[+]</a></span>
<div id="divDetail_RunTests" name="divDetail_RunTests" style="display:none;border:0">
<span style="font-size:x-small">
If yes to JUnit Tests, tests will be performed during build
to validate results and will be refected in build results on
download page and build detail pages.
</span>
</div>
</td>
</tr>
<tr>
<td><img width="27" src="/modeling/images/numbers/6.gif" /></td>
<td>&#160;</td>
<td><b>Email?</b></td>
<td>&#160;</td>
<td colspan="1"><input name="build_Email" size="25" value="<?php echo $options["EmailDefault"]; ?>"/></td>
<td width="300"><span style="font-size:x-small"><a id="divToggle_email" name="divToggle_email" href="javascript:toggleDetails('email')">[+]</a></span>
<div id="divDetail_email" name="divDetail_email" style="display:none;border:0">
<span style="font-size:x-small">Add your email (or comma-separated emails) to be notified when done.
</span>
</div>
</td>
</tr>
<?php if ($debugb) { ?>
<tr>
<td colspan="6"><hr noshade size=1/></td>
</tr>
<tr valign="top">
<td>&#160;</td>
<td>&#160;</td>
<td colspan="5"><table>
<tr>
<td colspan=3><b>Debug Options:</b></td>
</tr>
<tr>
<td colspan=1 nowrap>org.eclipse.*.common.releng branch:<br><span style="font-size:x-small">-commonRelengBranch</span></td>
<td>&#160;</td>
<td><input size="15" name="build_common_releng_branch" value=""></td><td nowrap><span style="font-size:x-small"> Enter Tag/Branch/Version, eg.,<br/>build_200409171617, R1_0_maintenance</span></td>
</tr>
<tr><td colspan="3"><span style="font-size:small">&#160;</span></td>
<tr>
<td colspan=1>org.eclipse.*.releng branch:<br><span style="font-size:x-small">-projRelengBranch</span></td>
<td>&#160;</td>
<td><input size="15" name="build_proj_releng_branch" value=""></td><td><span style="font-size:x-small"> Enter Tag/Branch/Version, eg.,<br/>build_200409171617, R1_0_maintenance</span></td>
</tr>
<tr><td colspan="3"><span style="font-size:small">&#160;</span></td>
<tr>
<td colspan=1>org.eclipse.* branch:<br><span style="font-size:x-small">-branch</span></td>
<td>&#160;</td>
<td><input size="15" name="build_Branch_Override" value=""></td><td><span style="font-size:x-small"> Enter Tag/Branch/Version, eg.,<br/>build_200409171617, R1_0_maintenance</span></td>
</tr>
<tr><td colspan="3"><span style="font-size:small">&#160;</span></td>
<tr>
<td colspan=1>Keep tempfiles?<br><span style="font-size:x-small">-noclean</span></td>
<td>&#160;</td>
<td><input type="checkbox" name="build_noclean" value="Y" checked></td>
</tr>
</table></td>
</tr>
<?php } ?>
<tr><td colspan="3"><span style="font-size:small">&#160;</span></td>
<tr>
<td>&#160;</td>
<td colspan=2 align=center><input type="button" value="<?php if ($previewOnly) { print "Preview Only"; } else { print "Build"; } ?>" onclick="doSubmit()"></td>
</tr>
<tr>
<td>&#160;</td>
</tr>
</form>
</table>
<script language="javascript">
function showfullURL(val)
{
fullURL = document.getElementById('fullURL');
fullURL.innerHTML = val ? "&#160;--&gt; " + val + " &lt;--" : "&#160;";
}
<?php
/* pull list of deps from $options[regex], if defined; see $selectedDepsList above */
if (isset($selectedDepsList) && sizeof($selectedDepsList)>0)
{
$numDeps = sizeof($selectedDepsList);
$theDeps = implode(", ", array_keys($selectedDepsList));
print <<<EOT
function setNote(val)
{
// defined dynamically in _common.php using \$options[regex]
note = document.getElementById('note');
note.innerHTML = "Requires $numDeps SDKs: $theDeps";
}
EOT;
}
else
{ ?>
function setNote(val)
{
// defined statically -- replace this in _common.php using \$options[regex]
note = document.getElementById('note');
if (val == "net4j")
note.innerHTML = "Requires 3 SDKs: Eclipse, EMF, Orbit"
else if (val == "cdo")
note.innerHTML = "Requires 4 SDKs: Eclipse, EMF, Net4j, Teneo"
else if (val == "eodm" || val == "compare" || val == "teneo")
note.innerHTML = "Requires 2 SDKs: Eclipse & EMF"
else if (val == "mwe")
note.innerHTML = "Requires 4 SDKs: Eclipse, EMF, Orbit, WTP"
else if (val == "search")
note.innerHTML = "Requires 12 SDKs: Eclipse, EMF, UML2, Orbit, OCL, QTV (3), GEF, GMF, Ecore Tools, UML2 Tools"
else
note.innerHTML = "Requires at least 2 SDKs: Eclipse, EMF, ..."
} <?php
} ?>
function branchToDivNum()
{
return document.forms.buildForm.build_Branch.value.substring(0,3).replace(".","");
}
function setCheckbox(field,bool)
{
if (document.forms.buildForm && document.forms.buildForm.elements[field] && document.forms.buildForm.elements[field].type=="checkbox")
{
document.forms.buildForm.elements[field].checked=bool;
}
}
function doBranchSelected(field) {
val=field.options[field.selectedIndex].text;
pickDefaultBranch(val);
pickDefaultJavaHome(val);
}
function pickDefaultBranch(val) {
with (document.forms.buildForm) {
if (val.indexOf(" | ")>0) {
build_Branch.value=val.substring(val.indexOf(" | ")+3,val.lastIndexOf(" | ")); // since the text label shown in the select box is not available for POST, store it here
} else {
build_Branch.value=val; // since the text label shown in the select box is not available for POST, store it here
}
}
}
function checkdisabled(obj)
{
return !obj.disabled;
}
function pickDefaultJavaHome(val) {
with (document.forms.buildForm) {
if (val.indexOf(" | ")>0) {
build_Java_Home.value=val.substring(3+val.lastIndexOf(" | ")); // since the text label shown in the select box is not available for POST, store it here
} else {
build_Java_Home.value=val; // since the text label shown in the select box is not available for POST, store it here
}
return build_Java_Home.value;
}
}
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";
}
}
function doSubmit() {
answer = true;
with (document.forms.buildForm) {
tofocus="build_Run_Tests_JUnit";
if (!elements[tofocus]){
tofocus="build_Run_Tests_JUnit";
}
if (elements[tofocus] && elements[tofocus].checked==false // if not running JUnit tests
&& build_Build_Type.options[build_Build_Type.selectedIndex].value!='N' // and not a Nightly
) {
answer = confirm(
'Are you sure you want to run a '+build_Build_Type.options[build_Build_Type.selectedIndex].text+"\n"+
'build without running JUnit tests?');
} else {
tofocus=null;
}
}
if (answer) {
document.forms.buildForm.submit();
} else if (tofocus) {
document.forms.buildForm.elements[tofocus].focus();
}
}
selectedDepsList = new Array();
<?php $cnt=-1; foreach ($selectedDepsList as $key => $url) print "selectedDepsList[" . (++$cnt) . "] = '$url';\n"; ?>
allDependencies = new Array();
field=document.forms.buildForm.elements["build_Dependencies_URL[]"];
for (i=0; i<field.options.length; i++)
{
allDependencies[i] = [field.options[i].text, field.options[i].value, field.options[i].selected];
}
/* onload of the page, pick the regex-specified defaults */
function selectLatestDependencies()
{
field=document.forms.buildForm.elements["build_Dependencies_URL[]"];
for (j=0;j<selectedDepsList.length;j++)
{
for (i=0;i<field.options.length;i++)
{
if (field.options[i].value == selectedDepsList[j])
{
//alert('Match: ' + selectedDepsList[j]);
field.options[i].selected=true;
break;
}
}
}
refreshAllDependencies();
}
function refreshAllDependencies()
{
field=document.forms.buildForm.elements["build_Dependencies_URL[]"];
for (i=0;i<field.options.length;i++)
{
for (j=0;j<allDependencies.length;j++)
{
if (allDependencies[j][0] == field.options[i].text && allDependencies[j][1] == field.options[i].value)
{
allDependencies[j][2] = field.options[i].selected;
}
}
}
}
/* use this to purge any user-selected values and to only pick the latest deps */
function resetLatestDependencies()
{
if (selectedDepsList.length)
{
field=document.forms.buildForm.elements["build_Dependencies_URL[]"];
for (i=0;i<field.options.length;i++)
{
field.options[i].selected = false;
}
selectLatestDependencies();
}
else
{
alert("No latest dependencies specified in\n\$options[\"regex\"] in _common.php.")
}
}
/* toggle showing all deps and only the selected ones */
function toggleDependencies()
{
field=document.forms.buildForm.elements["build_Dependencies_URL[]"];
if (allDependencies.length==field.options.length)
{
j=0;
for (i=field.options.length-1;i>=0;i--)
{
allDependencies[i][2] = field.options[i].selected;
if (!field.options[i].selected)
{
field.remove(i);
}
}
}
else
{
field.options.length=0
for (i=0;i<allDependencies.length;i++)
{
field.options[field.options.length] = new Option(allDependencies[i][0], allDependencies[i][1], false, allDependencies[i][2]);
}
//selectLatestDependencies()
}
}
function doOnLoadDefaults() {
field=document.forms.buildForm.build_CVS_Branch; doBranchSelected(field);
field=document.forms.buildForm.build_Mapfile_Rule;
field.selectedIndex=<?php echo isset($options["Mapfile_Rule_Default"]) ? $options["Mapfile_Rule_Default"] : 1; ?>;
setNote('<?php echo $projct; ?>');
setCheckbox("build_Run_Tests_JUnit",true);
selectLatestDependencies();
if (selectedDepsList.length) { toggleDependencies(); }
}
setTimeout('doOnLoadDefaults()',1000);
</script>
<?php
}
else
{ // page two, form submission results
/****************************** END OF PAGE ONE / START OF PAGE TWO **********************************/
$newDependencies = splitDependencies($_POST["build_Dependencies_URL_New"]);
$dependencyURLs = getDependencyURLs(isset($_POST["build_Dependencies_URL"]) ? $_POST["build_Dependencies_URL"] : null,$newDependencies,$dependenciesURLsFile);
$buildTimestamp = date("YmdHi");
$ID = $_POST["build_Build_Type"].$buildTimestamp;
$BR = $_POST["build_Branch"]; # 2.1.0
$BR_suffix = "_".str_replace(".","",substr($BR,0,3));
$_POST["build_Branch"] = ($_POST["build_Branch"]?$_POST["build_Branch"]:$_POST["build_CVS_Branch"]); # 2.1.0 or HEAD?
$logfile = '/downloads/drops/'.$BR.'/'.$ID.'/buildlog.txt';
if (!$previewOnly)
{
print '<p>Logfile is <a href="/' . ($PR == $projct ? $PR : $PR . $proj) . $logfile.'">'.$workDir . ($PR == $projct ? $PR : $PR . $proj) . $logfile.'</a></p>';
}
?>
<ul>
<li><a href="/<?php print $PR; ?>/downloads/?project=<?php print $projct; ?>&amp;sortBy=date&amp;hlbuild=0#latest">You can view, explore, or download your build here</a>.
Here's what you submitted:</li>
<?php
print "<ul>\n";
$i=2;
foreach ($_POST as $k => $v)
{
if (strstr($k, "build_") && !strstr($k, "_Sel") && (is_array($v) || trim($v) != "")) // build_Dependencies_URL_New sets $v to an array; all others are strings
{
$lab = str_replace("_", " ", substr($k, 6));
$val = $k == "build_Dependencies_URL_New" ? $newDependencies : $v;
print "<li>";
print (is_array($val) ?
"<b>" . $lab . ":</b>" . "<ul>\n<li><span style=\"font-size:x-small\">" . join("</span></li>\n<li><span style=\"font-size:x-small\">", $val) . "</span></li>\n</ul>\n" :
"<div>" . $val . "</div>" . "<b>" . $lab . ":</b>");
print "</li>\n";
$i++;
}
}
print "<li><div>" . $_SERVER["REMOTE_ADDR"] . "</div><b>Your IP:</b></li>\n";
print "</ul>\n";
print "</ul>\n";
$branches = getBranches($options);
if (isset($branches["HEAD"]) && isset($_POST["build_CVS_Branch"]) && $branches["HEAD"] == $_POST["build_CVS_Branch"]) { $_POST["build_CVS_Branch"] = "HEAD"; }
// fire the shell script...
/** see http://ca3.php.net/manual/en/function.exec.php **/
// create the log dir before trying to log to it
$preCmd = 'mkdir -p '.$workDir . ($PR == $projct ? $PR : $PR . $proj) . '/downloads/drops/'.$BR.'/'.$ID.'/eclipse ;';
$topProjActual = $topProj == "emft" ? "emf" : $topProj; // when we're building EMFT but it's actually in EMF cvs repo
$cmd = ($isBuildDotEclipseServer ? '' : '/bin/bash -c "exec /usr/bin/nohup /usr/bin/setsid '.$workDir.'modeling/scripts/start.sh') .
' -proj ' . $topProjActual . ' -sub '.$projct.
' -version '.$BR.
' -branch '.(isset($_POST["build_Branch_Override"]) && $_POST["build_Branch_Override"]!="" && isset($_POST["build_CVS_Branch"]) ? $_POST["build_Branch_Override"] : $_POST["build_CVS_Branch"]).
$dependencyURLs.
((isset($_POST["build_Run_Tests_JUnit"]) && $_POST["build_Run_Tests_JUnit"]=="Y") ||
(isset($_POST["build_Run_Tests_JUnit".$BR_suffix]) && $_POST["build_Run_Tests_JUnit".$BR_suffix]=="Y") ?' -antTarget run':' -antTarget runWithoutTest').
($_POST["build_Build_Alias"]?' -buildAlias '.$_POST["build_Build_Alias"]:""). // 2.0.2, for example
' -mapfileRule '.$_POST["build_Mapfile_Rule"]. // pass in use-false, gen-true, gen-false
' -buildType '.$_POST["build_Build_Type"].
' -javaHome '.$_POST["build_Java_Home"].
' -downloadsDir '.$downloadsDir. // use central location
' -buildDir '.$workDir . ($PR == $projct ? $PR : $PR . $proj) . '/downloads/drops/'.$BR.'/'.$ID.
' -writableBuildRoot '.$writableBuildRoot.
(isset($options["ProjRelengRoot"]) && $options["ProjRelengRoot"] != "" ? ' -projRelengRoot \'' . $options["ProjRelengRoot"] . '\'': '').
' -buildTimestamp '.$buildTimestamp.
($_POST["build_Email"]!=""?' -email '.$_POST["build_Email"]:'').
' -basebuilderBranch '.($_POST["build_basebuilder_branch"]!=""?$_POST["build_basebuilder_branch"]:$options["BaseBuilderBranch"]).
(isset($_POST["build_common_releng_branch"]) && $_POST["build_common_releng_branch"]!=""?' -commonRelengBranch '.$_POST["build_common_releng_branch"]:'').
(isset($_POST["build_proj_releng_branch"]) && $_POST["build_proj_releng_branch"]!=""?' -projRelengBranch '.$_POST["build_proj_releng_branch"]:'').
(isset($_POST["build_emf_old_tests_branch"]) && $_POST["build_emf_old_tests_branch"]!=""?' -emfOldTestsBranch '.$_POST["build_emf_old_tests_branch"]:'').
(isset($_POST["build_noclean"]) && $_POST["build_noclean"]=="Y"?' -noclean':'').
($isBuildDotEclipseServer ? '' : ' >> '.$workDir . ($PR == $projct ? $PR : $PR . $proj) . $logfile.' 2>&1 &"'); // logging to unique files
if ($previewOnly)
{
print '</div><div class="homeitem3col">'."\n";
print "<h3>Build Command (Preview Only)</h3>\n";
if (!$isBuildDotEclipseServer){
print "<p><span style=\"font-size:x-small\"><code>$preCmd</code></span></p>";
}
}
else if (!$isBuildDotEclipseServer)
{
exec($preCmd);
}
if ($previewOnly)
{
print "<p><span style=\"font-size:x-small\"><code>".preg_replace("/\ \-/","<br> -",$cmd)."</code></span></p>";
}
else if (!$isBuildDotEclipseServer)
{
exec($cmd);
}
if (!$previewOnly && $isBuildDotEclipseServer)
{
$lockfile = "/opt/public/cbi/tmp/" . $topProj . "-" . $projct . "_" . $BR . ".lock.txt"; // mdt-eodm_2.0.0.lock.txt
// check if lock file exists for this build type
if (is_file($lockfile))
{
print '</div><div class="homeitem3col">'."\n";
print "<h3><b style=\"color:orange;background-color:white\">&#160;WARNING!&#160;</b> Another build is already in progress.</h3>\n";
print "<p>Lockfile: <u>$lockfile</u></p>";
print "<p><span style=\"font-size:x-small\"><code>";
foreach (file($lockfile) as $line)
{
print "$line\n";
}
print "</code></span></p>";
}
else // create lockfile
{
print '</div><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 in one minute.</h3>\n";
print "<p>Lockfile: <u>$lockfile</u></p>";
print "<p><span style=\"font-size:x-small\"><code>".preg_replace("/\ \-/","<br> -",$cmd)."</code></span></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><span style=\"font-size:x-small\"><code>".preg_replace("/\ \-/","<br> -",$cmd)."</code></span></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>";
}
}
}
} // end else
print "</div>\n</div>\n";
print "<div id=\"rightcolumn\">\n";
print "<div class=\"sideitem\">\n";
print "<h6>Options</h6>\n";
print "<ul>\n";
print "<li><a href=\"?project=$projct&amp;debugb=1\">debug build</a></li>\n";
print "<li><a href=\"?project=$projct&amp;previewOnly=1\">preview build</a></li>\n";
print "<li><a href=\"?project=$projct&amp;debugb=1&previewOnly=1\">preview debug build</a></li>\n";
print "<li><a href=\"?project=$projct\">normal build</a></li>\n";
print "</ul>\n";
print "</div>\n";
$f = $_SERVER["DOCUMENT_ROOT"] . "/$PR/build/sideitems-common.php";
if ($isBuildServer && file_exists($f))
{
include_once($f);
}
if ($isBuildServer && function_exists("sidebar"))
{
sidebar();
}
print "<div class=\"sideitem\">\n";
print "<h6>Dependencies</h6>\n";
print "<ul>\n";
$buildServer = array("www.eclipse.org","modeling.eclipse.org","emft.eclipse.org","build.eclipse.org");
/* See also:
genBuildDetails.sh (depNames array),
downloads-common.php ($deps array), and
build-common.php (<b style="font-size:small">Mirror</b> & function findCatg())
*/
print <<<EOHTML
<table>
<tr><td><b style="font-size:small">Public</b></td><td><b style="font-size:small">Mirror</b></td></tr>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://download.eclipse.org/eclipse/downloads/">Eclipse</a></td>
<td> &#149; <a style="font-size:x-small" href="http://fullmoon/downloads/">Eclipse</a></td>
</tr>
<tr><td colspan="2"><span style="font-size:small">&#160;</span></td>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emf/downloads/?project=emf&amp;showAll=&amp;sortBy=date&amp;hlbuild=0#latest">EMF</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emf/downloads/?project=query&amp;sortBy=date&amp;hlbuild=0#latest">MQ</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emf/downloads/?project=transaction&amp;sortBy=date&amp;hlbuild=0#latest">MT</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emf/downloads/?project=validation&amp;sortBy=date&amp;hlbuild=0#latest">VF</a>
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[1]}/modeling/emf/downloads/?project=emf&amp;showAll=&amp;sortBy=date&amp;hlbuild=0#latest">EMF</a>,
<a style="font-size:x-small" href="http://${buildServer[1]}/modeling/emf/downloads/?project=query&amp;sortBy=date&amp;hlbuild=0#latest">MQ</a>,
<a style="font-size:x-small" href="http://${buildServer[1]}/modeling/emf/downloads/?project=transaction&amp;sortBy=date&amp;hlbuild=0#latest">MT</a>,
<a style="font-size:x-small" href="http://${buildServer[1]}/modeling/emf/downloads/?project=validation&amp;sortBy=date&amp;hlbuild=0#latest">VF</a>
</td>
</tr>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emf/downloads/?project=net4j&amp;sortBy=date&amp;hlbuild=0#latest">Net4j</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emf/downloads/?project=teneo&amp;sortBy=date&amp;hlbuild=0#latest">Teneo</a>,
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/emf/downloads/?project=net4j&amp;sortBy=date&amp;hlbuild=0#latest">Net4j</a>,
<a style="font-size:x-small" href="http://${buildServer[2]}/modeling/emf/downloads/?project=teneo&amp;sortBy=date&amp;hlbuild=0#latest">Teneo</a>,
</td>
</tr>
<tr><td colspan="2"><span style="font-size:small">&#160;</span></td>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emft/downloads/?project=compare&amp;sortBy=date&amp;hlbuild=0#latest">Compare</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emft/downloads/?project=mint&amp;sortBy=date&amp;hlbuild=0#latest">Mint</a>,
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/emft/downloads/?project=compare&amp;sortBy=date&amp;hlbuild=0#latest">Compare</a>,
<a style="font-size:x-small" href="http://${buildServer[2]}/modeling/emft/downloads/?project=mint&amp;sortBy=date&amp;hlbuild=0#latest">Mint</a>,
</td>
</tr>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emft/downloads/?project=mwe&amp;sortBy=date&amp;hlbuild=0#latest">MWE</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emft/downloads/?project=search&amp;sortBy=date&amp;hlbuild=0#latest">Search</a>,
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/emft/downloads/?project=mwe&amp;sortBy=date&amp;hlbuild=0#latest">MWE</a>,
<a style="font-size:x-small" href="http://${buildServer[2]}/modeling/emft/downloads/?project=search&amp;sortBy=date&amp;hlbuild=0#latest">Search</a>,
</td>
</tr>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/emft/downloads/?project=ecoretools&amp;sortBy=date&amp;hlbuild=0#latest">Ecore Tools</a>
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/emft/downloads/?project=ecoretools&amp;sortBy=date&amp;hlbuild=0#latest">Ecore Tools</a>
</td>
</tr>
<tr><td colspan="2"><span style="font-size:small">&#160;</span></td>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/gef/downloads/?sortBy=date&amp;hlbuild=0#latest">GEF</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/gmf/downloads/?sortBy=date&amp;hlbuild=0#latest">GMF</a>
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/gef/downloads/?sortBy=date&amp;hlbuild=0#latest">GEF</a>,
<a style="font-size:x-small" href="http://${buildServer[2]}/modeling/gmf/downloads/?sortBy=date&amp;hlbuild=0#latest">GMF</a>
</td>
</tr>
<tr><td colspan="2"><span style="font-size:small">&#160;</span></td>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/mdt/downloads/?project=ocl&amp;sortBy=date&amp;hlbuild=0#latest">OCL</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/mdt/downloads/?project=uml2&amp;sortBy=date&amp;hlbuild=0#latest">UML2</a>
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/mdt/downloads/?project=ocl&amp;sortBy=date&amp;hlbuild=0#latest">OCL</a>,
<a style="font-size:x-small" href="http://${buildServer[2]}/modeling/mdt/downloads/?project=uml2&amp;sortBy=date&amp;hlbuild=0#latest">UML2</a>
</td>
</tr>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/mdt/downloads/?project=uml2tools&amp;sortBy=date&amp;hlbuild=0#latest">UML2 Tools</a>
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/mdt/downloads/?project=uml2tools&amp;sortBy=date&amp;hlbuild=0#latest">UML2 Tools</a>
</td>
</tr>
<tr><td colspan="2"><span style="font-size:small">&#160;</span></td>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/m2t/downloads/?project=mtl&amp;sortBy=date&amp;hlbuild=0#latest">MTL</a>,
<a style="font-size:x-small" href="http://${buildServer[0]}/modeling/m2t/downloads/?project=xpand&amp;sortBy=date&amp;hlbuild=0#latest">Xpand</a>,
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/m2t/downloads/?project=mtl&amp;sortBy=date&amp;hlbuild=0#latest">MTL</a>,
<a style="font-size:x-small" href="http://${buildServer[2]}/modeling/m2t/downloads/?project=xpand&amp;sortBy=date&amp;hlbuild=0#latest">Xpand</a>,
</td>
</tr>
<tr>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[0]}/modeling/tmf/downloads/?project=xtext&amp;sortBy=date&amp;hlbuild=0#latest">Xtext</a>
</td>
<td> &#149; <a style="font-size:x-small" href="http://${buildServer[2]}/modeling/tmf/downloads/?project=xtext&amp;sortBy=date&amp;hlbuild=0#latest">Xtext</a>
</td>
</tr>
<tr><td colspan="2"><span style="font-size:small">&#160;</span></td>
<tr><td colspan="2"><hr noshade="noshade" size="1" width="100%"/></td>
<tr><td colspan="2"><span style="font-size:small">&#160;</span></td>
<tr>
<td colspan="2"> &#149;
<a style="font-size:x-small" href="http://download.eclipse.org/tools/orbit/downloads/">Orbit</a>,
<a style="font-size:x-small" href="http://www.eclipse.org/eclipselink/downloads/">EclipseLink</a>,
<a style="font-size:x-small" href="http://www.eclipse.org/subversive/downloads.php">Subversive</a>
</td>
</tr>
<tr>
<td colspan="2"> &#149;
<a style="font-size:x-small" href="http://download.eclipse.org/technology/dltk/downloads/">DLTK</a>,
<a style="font-size:x-small" href="http://www.eclipse.org/datatools/downloads.php">DTP</a>,
<a style="font-size:x-small" href="http://download.eclipse.org/dsdp/tm/downloads/">RSE</a>,
<a style="font-size:x-small" href="http://download.eclipse.org/webtools/downloads/">WTP</a>
</td>
</tr>
</table>
EOHTML;
print "</ul>\n";
print "</div>\n";
print "</div>\n";
$html = ob_get_contents();
ob_end_clean();
$pageTitle = $componentName . " - New Build";
$pageKeywords = "";
$pageAuthor = "Nick Boldt";
$App->AddExtraHtmlHeader('<link rel="stylesheet" type="text/css" href="/modeling/includes/downloads.css"/>' . "\n");
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
/************************** METHODS *****************************************/
// if user submitted values by text entry, split them on newline, space or comma and return as an array
function splitDependencies($entered) {
if (false!==strpos($entered,"\n")) {
$entered = explode("\n",$entered);
} else if (false!==strpos($entered," ")) {
$entered = explode(" ",$entered);
} else if (false!==strpos($entered,",")) {
$entered = explode(",",$entered);
} else {
$entered = array($entered); // cast to array
}
return $entered;
}
// if user submitted values by selection, collect them
// if user submitted values by text entry, collect them and write back into file for storage
// return a string in the form "-URL http://... -URL http://..."
function getDependencyURLs($chosen, $entered, $file) {
if (!$chosen) $chosen = array();
if (!is_array($chosen)) $chosen = array($chosen); // cast to array if not already
$origSize = 0;
$newSize = 0;
// load values from $entered into $chosen
if ($entered) {
$lines = trimmed_read($file);
$origSize = sizeof($lines);
// foreach ($lines as $line) print "<i>. $line</i><br/>\n";
foreach ($entered as $url) {
// add to $chosen
$urlFixed = trim($url);
if ($urlFixed) {
$urlFixed = preg_replace("#.+://((fullmoon|fullmoon.+|emf.torolab.ibm.com|emft.eclipse.org|modeling.eclipse.org|build.eclipse.org)[^/]+)/#","http://download.eclipse.org/",$urlFixed);
$urlFixed = preg_replace("#.+&url=([^&=]+).*#","$1",$urlFixed);
$urlFixed = preg_replace("#http://www.eclipse.org/([^\/]+)/download.php\?(dropFile|file)=/#","http://download.eclipse.org/",$urlFixed);
$urlFixed = preg_replace("#" . getDownloadScript() . "/#","http://download.eclipse.org/",$urlFixed);
$urlFixed = preg_replace("#download.php\?(dropFile|file)=#","",$urlFixed);
$chosen[] = $urlFixed;
}
// add to file, if it exists and is writable
if (is_writable($file) && sizeof($lines)>0) {
$catg = findCatg($urlFixed);
if ($catg && $urlFixed && !in_array("$catg=$urlFixed",$lines)) {
$lines[] = "$catg=$urlFixed"; // don't add a blank entry!
}
}
}
$newSize = sizeof($lines);
}
rsort($lines); reset($lines);
$lines = array_unique($lines); // remove duplicate entries
// foreach ($chosen as $e) print "<i>. $e</i><br/>\n";
if ($newSize > $origSize) {
updateDependenciesFile($file,$lines);
}
$ret = "";
foreach ($chosen as $choice) {
if ($choice) $ret .= " -URL ".$choice;
}
return $ret;
}
/* See also:
genBuildDetails.sh (depNames array),
downloads-common.php ($deps array), and
build-common.php (<b style="font-size:small">Mirror</b> & function findCatg())
*/
function findCatg($url) {
$matches = array(
"29mtl" => "m2t-mtl-",
"28mint" => "emft-mint-",
"27search" => "emft-search-",
"26subversive" => "Subversive-",
"25eclipselink" => "eclipselink-",
"24qvto" => "m2m-qvtoml-",
"23rse" => "RSE-",
"22xsd" => "xsd-runtime|xsd-SDK",
"21xtext" => "tmf-xtext-",
"20xpand" => "m2t-xpand-",
"19dtp" => "dtp-|dtp_",
"18dltk-core" => "dltk-core-sdk-",
"18dltk-index" => "dltk-core-index-sdk-",
"18dltk-rse" => "dltk-rse-",
"18dltk-tests" => "dltk-core-Automated_Tests-",
"18dltk-mylyn" => "dltk-mylyn-",
"17teneo" => "emf-teneo-|emft-teneo-",
"16compare" => "emf-compare-|emft-compare-",
"15uml2tools" => "mdt-uml2tools-",
"14ecoretools" => "emft-ecoretools-",
"13mwe" => "emft-mwe-",
"12wtp" => "wtp-",
"11gmf" => "GMF-|gmf-",
"10gef" => "GEF-",
"09net4j" => "emf-net4j-|emft-net4j-",
"08validation" => "emf-validation-|emft-validation-",
"07transaction" => "emf-transaction-|emft-transaction-",
"06query" => "emf-query-|emft-query-",
"05ocl" => "mdt-ocl-|emft-ocl-",
"04orbit" => "orbit-|orbitBundles-",
"03uml2" => "mdt-uml2-|uml2-",
"02emf" => "emf-runtime-|emf-xsd-|emf-sdo-xsd-",
"01eclipse" => "eclipse-SDK-",
"99other" => "/"
);
foreach ($matches as $catg => $match) {
if (false!==strpos($url,$match) || preg_match("#(".$match.")#",$url)) {
return $catg;
}
}
}
function updateDependenciesFile($file,$lines) {
if (is_writable($file) && $lines && sizeof($lines)>0) {
$f = fopen($file, "w");
foreach ($lines as $line) {
fwrite($f,$line."\n");
}
fclose($f);
}
else
{
print "Cannot write changes to $file!";
}
}
function displayCheckboxes($label,$options,$divSuffix="") {
$matches = null;
if (isset($options["reversed"]) && $options["reversed"])
{
// pop that item out
array_shift($options);
$options = array_reverse($options);
}
foreach ($options as $o => $option)
{
$opt = $option;
$isSelected = false;
if (!preg_match("/\-\=[\d\.]+/", $opt))
{
if (strstr($opt, "="))
{ // split line so that foo=bar becomes <input type="checkbox" name="bar" value="Y">foo
$matches=null;
preg_match("/([^\=]+)\=([^\=]*)/",$opt,$matches);
print "\n\t<input id=\"".$label."_".trim($matches[2]).$divSuffix."\" type=\"checkbox\" "."name=\"".$label."_".trim($matches[2]).$divSuffix."\" value=\"Y\">".trim($matches[1]);
} else { // turn foo into <input type="checkbox" name="foo" value="Y">foo</option>
print "\n\t<input id=\"".$label."_".$opt.$divSuffix."\" type=\"checkbox\" "."name=\"".$label."_".$opt.$divSuffix."\" value=\"Y\">".$opt;
}
print "<br/>\n";
}
}
}
function displayOptionsTriplet($options) {
$matches = null;
if (isset($options["reversed"]) && $options["reversed"]) {
// pop that item out
array_shift($options);
$options = array_reverse($options);
}
$showValues = true;
foreach ($options as $o => $option) {
$opt = $option;
$isSelected = false;
if (!preg_match("/\-\=[\d\.]+/",$opt)) {
if (strstr($opt,"|selected")) { // remove the |selected keyword
$isSelected=true;
$opt = substr($opt,0,strpos($opt,"|selected"));
}
if (false!==substr($opt,"=")) { // split line so that foo=bar becomes <option value="bar">foo</option>
$matches = null;
preg_match("/([^\=]+)\=([^\=]+)\,([^\,]+)/",$opt,$matches);
if (false !== strpos($matches[2],"--"))
{
$showValues = ($matches[1] == $_SERVER["SERVER_NAME"]);
}
else if ($showValues)
{
print "\n\t<option ".($isSelected?"selected ":"")."value=\"".trim($matches[2])."\">".
trim($matches[2])." | ".trim($matches[1])." | ".trim($matches[3])."</option>";
}
} else { // turn foo into <option value="foo">foo</option>
print "\n\t<option ".($isSelected?"selected ":"")."value=\"".$opt."\">".$opt."</option>";
}
}
}
}
// compare project index, then datestamps
function compareURLs($a, $b) {
$aPF = substr($a,0,strpos($a,"="));
$bPF = substr($b,0,strpos($b,"="));
$aDS = preg_replace("/.+([0-9]{12}|[0-9]{8}\-[0-9]{4}).+/","$1",$a);
$bDS = preg_replace("/.+([0-9]{12}|[0-9]{8}\-[0-9]{4}).+/","$1",$b);
return $aPF == $bPF ? ($aDS < $bDS ? 1 : -1) : ($aPF > $bPF ? 1 : -1);
}
function displayURLs($options,$verbose=false) {
if (isset($options["reversed"]) && $options["reversed"]) {
// pop that item out
array_shift($options);
$options = array_reverse($options);
}
usort($options, "compareURLs"); reset($options);
//sort($options); reset($options);
$matches=null;
$currCatg="";
foreach ($options as $o => $option) {
$opt = $option;
if (strstr($opt,"=")) { // split line so that foo=bar becomes <option value="bar">foo</option>
$matches=null;preg_match("/([^\=]+)\=([^\=]*)/",$opt,$matches);
$catg = substr(trim($matches[1]), 2);
if ($catg!=$currCatg) {
if ($currCatg!="")
print "\n\t<option "."value=\""."\"></option>";
print "\n\t<option "."value=\""."\"> -- ".$catg." -- </option>";
$currCatg=$catg;
}
print "\n\t<option "."value=\"".trim($matches[2])."\">".substr(trim($matches[2]),6+strpos(trim($matches[2]),"drops"))."</option>";
} else if (strstr($opt,"http") && strstr($opt,"drops")) { // turn http://foo/bar.zip into <option value="http://foo/bar.zip">bar.zip</option>
print "\n\t<option "."value=\"".$opt."\">".
substr($opt,6+strpos($opt,"drops"))."</option>";
} else { // turn foo into <option value="foo">foo</option>
print "\n\t<option "."value=\"".$opt."\">".$opt."</option>";
}
}
}
function trimmed_read($file) {
$lines = array();
if (is_writable($file) && is_readable($file)) {
$f = fopen($file, "r");
if ($f) {
while (!feof($f) && ($line = trim(fgets($f, 4096))) ) $lines[] = $line;
fclose($f);
} else die( "Problem reading from: $file");
}
return $lines;
}
function loadOptionsFromFile($file1)
{
$sp = array ();
if (is_file($file1))
{
$sp = file($file1);
}
$options = loadOptionsFromArray($sp);
return $options;
}
function loadOptionsFromArray($sp)
{
global $debug;
$options = array ();
$doSection = "";
foreach ($sp as $s)
{
$matches = null;
if (strpos($s, "#") === 0)
{ // skip, comment line
}
else
if (preg_match("/\[([a-zA-Z0-9\_\|]+)\]/", $s, $matches))
{ // section starts
if (strlen($s) > 2)
{
$isReversed = false;
if (strstr($s, "|reversed"))
{ // remove the |reversed keyword
$isReversed = true;
$doSection = trim($matches[1]);
$doSection = substr($doSection, 0, strpos($doSection, "|reversed"));
}
else
{
$doSection = trim($matches[1]);
}
if ($debug > 0)
print "Section: $s --> $doSection<br>";
$options[$doSection] = array ();
if ($isReversed)
{
$options[$doSection]["reversed"] = $isReversed;
}
}
}
else
if (!preg_match("/\[([a-zA-Z\_]+)\]/", $s, $matches))
{
if (strlen($s) > 2)
{
if ($debug > 0)
print "Loading: $s<br>";
$options[$doSection][] = trim($s);
}
}
}
return $options;
}
function getBranches($options)
{
foreach ($options["BranchAndJDK"] as $br => $branch)
{
$arr[getValueFromOptionsString($branch, "name")] = getValueFromOptionsString($branch, "value");
}
return $arr;
}
function showBuildsInProgress()
{
$build_processes = array();
exec("ps ax --forest | grep -v grep | grep /start.sh", $build_processes);
$inprogress = false;
foreach ($build_processes as $bp) {
if (trim($bp))
{
$inprogress = true;
break;
}
}
if ($inprogress) {
print '
<div class="homeitem3col" style="border:red 2px dashed; padding: 10px; padding-right: 0px">
The following builds are currently in progress on this server.
<ul>
';
foreach ($build_processes as $bp) {
if (trim($bp))
{
print "<li style='border:0px'>";
$alltokens = tokenize($bp); # function defined in ../includes/scripts.php # print_r($alltokens);
$tokens = array("proj", "sub", "version", "branch", "buildType", "buildTimestamp", "basebuilderBranch");
foreach ($tokens as $t)
{
if (isset($alltokens[$t]))
{
print " <acronym title=\"$t\">" . $alltokens[$t] . "</acronym>";
}
}
if (isset($alltokens["buildDir"]))
{
$url = preg_replace("#.+/build#", "", $alltokens["buildDir"]);
print " :: <a href=\"" . $url . "\">Build Artifacts</a>";
}
else if (isset($alltokens["testDir"]))
{
print "Test in progress: " . $alltokens["testDir"];
}
print "</li>";
unset($alltokens);
}
}
print '
</ul>
</div>
';
}
}
?>