| <?php |
| $ignoredWorkingSets = array('EXCLUDE', 'STEM-Data-EarthScience'); |
| |
| define('DATA_BUILD_MAP_PATH', 'releng/org.eclipse.stem.releng/maps/stem.data.map'); |
| define('BUILD_MAP_PATH', 'releng/org.eclipse.stem.releng/maps/stem.map'); |
| define('BUILD_MAP_DIRECTORY_PATH', 'releng/org.eclipse.stem.releng/maps/directories.properties'); |
| |
| define('WORKING_SET_MATCH', '!WS:'); |
| define('MAP_ENTRY_REGEX', '(.*)@(.*)=(.*)'); |
| define('MAP_ENTRY_PATH_PREFIX', "\${checkoutDir}"); |
| |
| define('REPOSITORY_ROOT_SSH', 'svn+ssh://dev.eclipse.org/svnroot/technology/org.eclipse.stem/'); |
| define('REPOSITORY_ROOT_HTTP', 'http://dev.eclipse.org/svnroot/technology/org.eclipse.stem/'); |
| define('REPOSITORY_ROOT_HTTPS', 'https://dev.eclipse.org/svnroot/technology/org.eclipse.stem/'); |
| |
| define('PROVIDER_ID', 'org.tigris.subversion.subclipse.core.svnnature'); |
| define('PROVIDER_ENTRY_TEMPLATE', '0.9.3,$PATH$,$NAME$'); |
| |
| define('RELENG_WS_ENTRY', '!WS:STEM-Releng'); |
| define('RELENG_PROJECT_ENTRY', 'resource@org.eclipse.stem.releng=COPY,${source.path.releng},org.eclipse.stem.releng'); |
| define('TARGETPLATFORM_PROJECT_ENTRY', 'resource@org.eclipse.stem.releng.targetplatforms=COPY,${source.path.releng},org.eclipse.stem.releng.targetplatforms'); |
| |
| |
| $workingSetEntryTemplates = array(); |
| $workingSetEntryTemplates['default'] = array('factoryID'=>'org.eclipse.ui.internal.model.ResourceFactory','path'=>'$NAME$','type'=>'4'); |
| $workingSetEntryTemplates['plugin'] = array('factoryID'=>'org.eclipse.jdt.ui.PersistableJavaElementFactory', 'elementID'=>'=$NAME$'); |
| $workingSetEntryTemplates['fragment'] = $workingSetEntryTemplates['plugin']; |
| |
| function getBuildDirectoryMapUrl() |
| { |
| $repositoryRoot = getRepositoryRoot(true); |
| return $repositoryRoot .'/'. BUILD_MAP_DIRECTORY_PATH; |
| } |
| |
| |
| function getBuildDirectoryMap() |
| { |
| $directoryMapData = @file(getBuildDirectoryMapUrl()); |
| if (!$directoryMapData) { |
| return false; |
| } |
| |
| $repositoryRoot = getRepositoryRoot(); |
| |
| $data = array(); |
| foreach ($directoryMapData as $line) { |
| $tokens = explode("=", $line); |
| if (is_array($tokens) && sizeof($tokens) == 2) { |
| |
| $name = $tokens[0]; |
| $path = $tokens[1]; |
| |
| if ($name == "source.path") { |
| $path = $repositoryRoot; |
| $data[$name] = trim($path); |
| } else { |
| if (@eregi('^\$\{(.*)\}\/(.*)$', $path, $t2)) { |
| $path = $data[$t2[1]] . '/'. $t2[2]; |
| $data[$name] = trim($path); |
| } |
| } |
| |
| |
| } |
| } |
| |
| return $data; |
| |
| } |
| |
| function getBuildMapUrl() |
| { |
| $repositoryRoot = getRepositoryRoot(true); |
| return $repositoryRoot .'/'. BUILD_MAP_PATH; |
| } |
| |
| function getDataBuildMapUrl() |
| { |
| $repositoryRoot = getRepositoryRoot(true); |
| return $repositoryRoot .'/'. DATA_BUILD_MAP_PATH; |
| } |
| |
| function getRepositoryRoot($forceHttp = false) |
| { |
| if (!$forceHttp && isset($_REQUEST['r']) && $_REQUEST['r'] == "ssh") { |
| $path = REPOSITORY_ROOT_SSH; |
| } else if (!$forceHttp && isset($_REQUEST['r']) && $_REQUEST['r'] == "https") { |
| $path = REPOSITORY_ROOT_HTTPS; |
| } else { |
| $path = REPOSITORY_ROOT_HTTP; |
| } |
| |
| if (isset($_REQUEST['branch'])) { |
| $path .= "branches/". $_REQUEST['branch']; |
| } else if (isset($_REQUEST['tag'])) { |
| $path .= "tags/". $_REQUEST['tag']; |
| } else { |
| $path .= "trunk"; |
| } |
| |
| return $path; |
| } |
| |
| function processMapEntry($line, $dirMap) |
| { |
| $repositoryRoot = getRepositoryRoot(); |
| |
| $data = array(); |
| $data['line'] = $line; |
| |
| //feature@org.eclipse.stem.feature=COPY,${checkoutDir}/features,org.eclipse.stem.feature |
| if (@eregi(MAP_ENTRY_REGEX, $line, $tokens)) { |
| |
| |
| //COPY,${checkoutDir}/features,org. eclipse.stem.feature |
| $pathTokens = explode(",", $tokens[3]); |
| if ($pathTokens[0] == "COPY") { |
| |
| $dirKey = trim($pathTokens[1]); |
| $dirKey = substr($dirKey, 2, $dirKey-1); |
| |
| if (!array_key_exists($dirKey, $dirMap)) { |
| return false; |
| } |
| |
| $path = $dirMap[$dirKey]; |
| |
| // Local entry |
| |
| $data['path'] = $path . '/' . $pathTokens[2]; |
| |
| //$data['path'] = str_replace(MAP_ENTRY_PATH_PREFIX, $repositoryRoot, $pathTokens[1]) ."/". $tokens[2]; |
| } |
| |
| $data['type'] = $tokens[1]; |
| $data['name'] = $tokens[2]; |
| } |
| |
| return $data; |
| } |
| |
| function processMapFile($lines) |
| { |
| $data = array(); |
| |
| $buildDirMap = getBuildDirectoryMap(); |
| |
| |
| $currentWorkingSet = "EXCLUDE"; |
| |
| foreach ($lines as $line) { |
| $line = trim($line); |
| if ($line != "") { |
| if ($line{0} == "!" || $line{0} == "#") { |
| // comment line |
| $lineMatch = strstr($line, WORKING_SET_MATCH); |
| // Matched a working set string |
| if ($lineMatch !== FALSE) { |
| $currentWorkingSet = str_replace(WORKING_SET_MATCH, "", $lineMatch); |
| } |
| } else { |
| if ($currentWorkingSet === false) { |
| continue; |
| } |
| |
| |
| $entry = processMapEntry($line, $buildDirMap); |
| if (!$entry) { |
| continue; |
| } |
| $data[$currentWorkingSet][] = $entry; |
| } |
| } |
| } |
| |
| return $data; |
| } |
| |
| |
| function buildProviderDOM($xml, $workingSets) |
| { |
| global $ignoredWorkingSets; |
| |
| |
| $xml = createElementDOM($xml, "provider"); |
| createAttributeDOM($xml, "id", PROVIDER_ID); |
| |
| foreach ($workingSets as $workingSetName => $workingSetEntries) { |
| if (!isExcludedWorkingSet($workingSetName)) { |
| // Not an ignored working set. Process. |
| |
| foreach ($workingSetEntries as $workingSetEntry) { |
| $projectRef = createElementDOM($xml,"project"); |
| |
| if (!isset($workingSetEntry['path'])) { |
| continue; |
| } |
| |
| |
| $entryString = PROVIDER_ENTRY_TEMPLATE; |
| $entryString = str_replace("\$PATH\$", $workingSetEntry['path'], $entryString); |
| $entryString = str_replace("\$NAME\$", $workingSetEntry['name'], $entryString); |
| |
| createAttributeDOM($projectRef, "reference", $entryString); |
| } |
| } |
| } |
| } |
| |
| function isExcludedWorkingSet($wsName) |
| { |
| global $ignoredWorkingSets; |
| $ws = false; |
| if (isset($_REQUEST['ws'])) { |
| return !($_REQUEST['ws'] == $wsName); |
| } |
| |
| return in_array($wsName, $ignoredWorkingSets); |
| } |
| |
| |
| |
| |
| /** |
| <workingSets editPageId="org.eclipse.jdt.ui.JavaWorkingSetPage" id="1310766141425_10" label="STEM-Tests" name="STEM-Tests"> |
| <item elementID="=org.eclipse.stem.tests.automaticexperiment" factoryID="org.eclipse.jdt.ui.PersistableJavaElementFactory"/> |
| <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/org.eclipse.stem.core.feature" type="4"/> |
| </workingSets> |
| */ |
| function addWorkingSetEntryDOM($wsXML, $workingSetEntry) |
| { |
| if (!isset($workingSetEntry['path'])) { |
| return; |
| } |
| |
| |
| global $workingSetEntryTemplates; |
| |
| $itemXML = createElementDOM($wsXML, "item"); |
| |
| if (array_key_exists($workingSetEntry['type'],$workingSetEntryTemplates)) { |
| $attributes = $workingSetEntryTemplates[$workingSetEntry['type']]; |
| } else { |
| $attributes = $workingSetEntryTemplates['default']; |
| } |
| |
| foreach ($attributes as $attributeName => $attributeValue) { |
| $attributeValue = str_replace("\$PATH\$", $workingSetEntry['path'], $attributeValue); |
| $attributeValue = str_replace("\$NAME\$", $workingSetEntry['name'], $attributeValue); |
| createAttributeDOM($itemXML, $attributeName, $attributeValue); |
| } |
| } |
| |
| function buildWorkingSetDOM($rootXML, $workingSets) |
| { |
| global $ignoredWorkingSets; |
| |
| $seq = 0; |
| |
| foreach ($workingSets as $workingSetName => $workingSetEntries) { |
| if (!isExcludedWorkingSet($workingSetName)) { |
| $wsXML = createElementDOM($rootXML, "workingSets"); |
| createAttributeDOM($wsXML, "editPageId", "org.eclipse.jdt.ui.JavaWorkingSetPage"); |
| createAttributeDOM($wsXML, "id", time() ."_". $seq++); |
| createAttributeDOM($wsXML, "label", $workingSetName); |
| createAttributeDOM($wsXML, "name", $workingSetName); |
| |
| foreach ($workingSetEntries as $workingSetEntry) { |
| addWorkingSetEntryDOM($wsXML, $workingSetEntry); |
| } |
| } |
| } |
| } |
| |
| function buildProjectSetDOM($data) |
| { |
| $doc = new DOMDocument('1.0'); |
| $doc->formatOutput = true; |
| |
| |
| $root = createElementDOM($doc, "psf"); |
| createAttributeDOM($root, "version", "2.0"); |
| |
| |
| buildProviderDOM($root, $data); |
| buildWorkingSetDOM($root, $data); |
| return $doc; |
| } |
| |
| function createElementDOM($root, $name) |
| { |
| if ($root->ownerDocument != NULL) { |
| $element = $root->ownerDocument->createElement($name); |
| } else { |
| $element = $root->createElement($name); |
| } |
| |
| $root->appendChild($element); |
| |
| return $element; |
| } |
| |
| function createAttributeDOM($root, $name, $value) |
| { |
| $attr = $root->ownerDocument->createAttribute($name); |
| $attr->value = $value; |
| $root->appendChild($attr); |
| } |
| |
| |
| function addRelengProjects($buildMapData) |
| { |
| $buildMapData[] = RELENG_WS_ENTRY; |
| $buildMapData[] = RELENG_PROJECT_ENTRY; |
| $buildMapData[] = TARGETPLATFORM_PROJECT_ENTRY; |
| |
| return $buildMapData; |
| } |
| |
| |
| function getBuildMap() |
| { |
| $dataBuildMap = @file(getDataBuildMapUrl()); |
| $coreBuildMap = @file(getBuildMapUrl()); |
| |
| $buildMapData = array_merge($coreBuildMap, $dataBuildMap); |
| if (!$buildMapData) { |
| return false; |
| } |
| |
| |
| //$buildMapData = @file(getBuildMapUrl()); |
| |
| $buildMapData = addRelengProjects($buildMapData); |
| return $buildMapData; |
| } |
| |
| |
| $buildMapData = getBuildMap(); |
| if (!$buildMapData) { |
| echo "Error: Cannot get project set data. Check that the branch or tag exists. Only branches from STEM 1.2.1 and newer are compatible."; |
| exit(); |
| } |
| |
| |
| $data = processMapFile($buildMapData); |
| //echo "<pre>"; |
| //print_r($data); |
| //echo "</pre>"; |
| |
| $xml = buildProjectSetDOM($data); |
| |
| Header("Content-type: text/xml"); |
| echo $xml->saveXML(); |
| exit(); |
| |
| |
| |
| |
| |
| |
| /** |
| |
| |
| function buildWorkingSetXML($rootXML, $workingSets) |
| { |
| global $ignoredWorkingSets; |
| |
| $seq = 0; |
| |
| foreach ($workingSets as $workingSetName => $workingSetEntries) { |
| if (!in_array($workingSetName, $ignoredWorkingSets)) { |
| $wsXML = $rootXML->addChild("workingSets"); |
| $wsXML->addAttribute("editPageId", "org.eclipse.jdt.ui.JavaWorkingSetPage"); |
| $wsXML->addAttribute("id", time() ."_". $seq++); |
| $wsXML->addAttribute("label", $workingSetName); |
| $wsXML->addAttribute("name", $workingSetName); |
| |
| foreach ($workingSetEntries as $workingSetEntry) { |
| addWorkingSetEntry($wsXML, $workingSetEntry); |
| } |
| } |
| } |
| } |
| |
| function buildProjectSetXML($data) |
| { |
| $root = new SimpleXMLElement("<psf/>"); |
| $root->addAttribute("version", "2.0"); |
| buildProviderXML($root, $data); |
| buildWorkingSetXML($root, $data); |
| return $root; |
| } |
| |
| function buildProviderXML($xml, $workingSets) |
| { |
| |
| |
| $xml = $xml->addChild("provider"); |
| $xml->addAttribute("id", PROVIDER_ID); |
| |
| foreach ($workingSets as $workingSetName => $workingSetEntries) { |
| if (!in_array($workingSetName, $ignoredWorkingSets)) { |
| // Not an ignored working set. Process. |
| |
| foreach ($workingSetEntries as $workingSetEntry) { |
| $projectRef = $xml->addChild("project"); |
| |
| $entryString = PROVIDER_ENTRY_TEMPLATE; |
| $entryString = str_replace("\$PATH\$", $workingSetEntry['path'], $entryString); |
| $entryString = str_replace("\$NAME\$", $workingSetEntry['name'], $entryString); |
| |
| $projectRef->addAttribute("reference", $entryString); |
| } |
| } |
| } |
| } |
| |
| function addWorkingSetEntry($wsXML, $workingSetEntry) |
| { |
| global $workingSetEntryTemplates; |
| |
| $itemRef = $wsXML->addChild("item"); |
| |
| if (array_key_exists($workingSetEntry['type'],$workingSetEntryTemplates)) { |
| $attributes = $workingSetEntryTemplates[$workingSetEntry['type']]; |
| } else { |
| $attributes = $workingSetEntryTemplates['default']; |
| } |
| |
| foreach ($attributes as $attributeName => $attributeValue) { |
| $attributeValue = str_replace("\$PATH\$", $workingSetEntry['path'], $attributeValue); |
| $attributeValue = str_replace("\$NAME\$", $workingSetEntry['name'], $attributeValue); |
| $itemRef->addAttribute($attributeName, $attributeValue); |
| } |
| } |
| |
| |
| */ |
| ?> |