| <?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()); |
| ob_start(); |
| |
| include($_SERVER["DOCUMENT_ROOT"] . "/modeling/includes/db.php"); |
| |
| $bugid = null; |
| if (isset($_GET["bugid"]) && preg_match("/^\d+$/", $_GET["bugid"])) |
| { |
| $bugid = $_GET["bugid"]; |
| } |
| |
| print "<div id=\"midcolumn\">\n"; |
| if ($bugid !== null) |
| { |
| $out = changeset($bugid, isset($_GET["html"])); |
| if (isset($_GET["html"])) |
| { |
| print "<h1>Generated Changeset Script For Bug #$bugid</h1>\n"; |
| print "<pre>\n"; |
| print $out; |
| print "</pre>\n"; |
| } |
| } |
| else |
| { |
| print "<h1>Generate Changeset Script For A Bug</h1>\n"; |
| changesetForm(); |
| } |
| print "</div>\n"; |
| |
| $html = ob_get_contents(); |
| ob_end_clean(); |
| |
| $pageTitle = "Eclipse Modeling - Generate Changeset Script For A Bug"; |
| $pageKeywords = ""; // TODO: add something here |
| $pageAuthor = "Neil Skrypuch, Nick Boldt"; |
| |
| if (isset($_GET["html"]) || $bugid === null) |
| { |
| $App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html); |
| } |
| else |
| { |
| header("Content-type: application/x-sh"); |
| print $out; |
| } |
| |
| function changeset($bugid, $html = false) |
| { |
| $end = ""; |
| $mid = ""; |
| $mid2 = ""; |
| $note = ""; |
| |
| $out = "#!/bin/bash\n\n"; |
| $out .= "# This script can be used to generate a complete changeset patch file for bug #$bugid\n\n"; |
| |
| $out .= "# If you do not have the appropriate plugins or projects checked out into ~/workspace,\n"; |
| $out .= "# modify this script accordingly.\n\n"; |
| |
| $out .= "# Make sure this file is executable (chmod 755).\n\n"; |
| |
| $out .= "#### CONFIGURATION BEGIN ####\n\n"; |
| |
| $out .= "# pluginsInWorkspace=0: you have an entire uber-project checked out (eg., org.eclipse.mdt)\n"; |
| $out .= "# pluginsInWorkspace=1: you have individual plugins/features checked out (eg., org.eclipse.emf.codegen)\n"; |
| $out .= "pluginsInWorkspace=0;\n\n"; |
| |
| $out .= "# workspace; enter path to where your project/plugins/features are checked out\n"; |
| $out .= "workspace=~/eclipse/workspace;\n\n"; |
| |
| $out .= "# applyPatch=0; generate patch but do NOT apply it\n"; |
| $out .= "# applyPatch=1; generate patch and apply it\n"; |
| $out .= "applyPatch=0;\n\n"; |
| |
| $result = wmysql_query("SELECT `project` FROM `cvsfiles` NATURAL JOIN `commits` NATURAL LEFT JOIN `bugs` WHERE `bugid` = $bugid GROUP BY `project` ORDER BY `date` DESC"); |
| if ($result) |
| { |
| $out .= "# path aliases (eg., useful if you have renamed projects from org.eclipse.emf to org.eclipse.emf_R2_0m)\n"; |
| } |
| while ($row = mysql_fetch_row($result)) |
| { |
| $dirVar = dir2var($row[0]); |
| $out .= "# $dirVar; path alias for $row[0]\n"; |
| $out .= "$dirVar=\"".$row[0]."\";\n\n"; |
| |
| $mid .= "if [[ -f \$$dirVar/changeset_$bugid.patch ]]; then rm -i \$$dirVar/changeset_$bugid.patch; fi\n"; |
| $mid2 .= "echo \"Patch file to generate: \$workspace/\$$dirVar/changeset_$bugid.patch\";\n"; |
| |
| $end .= "if [[ \$applyPatch -eq 1 ]]; then\n"; |
| $end .= " if [[ \$pluginsInWorkspace -eq 1 ]]; then\n"; |
| $end .= " patch -p0 <changeset_$bugid.patch;\n"; |
| $end .= " else\n"; |
| $end .= " pushd \$$dirVar && patch -p0 <changeset_$bugid.patch; popd;\n"; |
| $end .= " fi\n"; |
| $end .= "fi\n"; |
| $dirVar = null; |
| } |
| |
| $out .= "#### CONFIGURATION DONE ####\n\n"; |
| |
| $out .= "cd \$workspace;\n"; |
| $out .= "\n# remove any existing versions of this patch\n".$mid2."\n".$mid."\n"; |
| |
| $result = wmysql_query("SELECT `cvsname`, `revision` FROM `cvsfiles` NATURAL JOIN `commits` NATURAL LEFT JOIN `bugs` WHERE `bugid` = $bugid GROUP BY `fid`, `revision`, `bugid` ORDER BY `date` DESC"); |
| while ($row = mysql_fetch_row($result)) |
| { |
| $m = null; |
| if (preg_match("#^(?:/[^/]+){2}/([^/]+)/(.+),v$#", $row[0], $m)) |
| { |
| $dirVar = dir2var($m[1]); |
| if (preg_match("/^1\.1$/", $row[1])) |
| { |
| $note .= "if [[ \$applyPatch -eq 1 ]]; then\n"; |
| $note .= " echo \"[NOTE] \$$dirVar/$m[2] was added in this changeset. File will be checked out locally but is not in the patch.\"\n"; |
| $note .= " if [[ \$pluginsInWorkspace -eq 1 ]]; then\n"; |
| $note .= " cvs up -r1.1 " . cleanPath($m[2]) . ";\n"; |
| $note .= " else\n"; |
| $note .= " pushd \$$dirVar && cvs up -r1.1 $m[2]; popd;\n"; |
| $note .= " fi\n"; |
| $note .= "else\n"; |
| $note .= " echo \"[NOTE] \$$dirVar/$m[2] was added in this changeset. You will have to check it out manually:\"\n"; |
| $note .= " echo ' cvs up -r1.1 $m[2];'\n"; |
| $note .= "fi\n"; |
| } |
| else |
| { |
| $out .= "if [[ \$pluginsInWorkspace -eq 1 ]]; then\n"; |
| $out .= " cvs diff -u -w -r" . cvsminus($row[1]) . " -r$row[1] " . cleanPath($m[2]) . " >>changeset_$bugid.patch; echo;\n"; |
| $out .= "else\n"; |
| $out .= " pushd \$$dirVar && cvs diff -u -w -r" . cvsminus($row[1]) . " -r$row[1] $m[2] >>changeset_$bugid.patch; popd; echo;\n"; |
| $out .= "fi\n"; |
| } |
| } |
| } |
| |
| $out .= "\n" . $end; |
| $out .= "\n" . $note; |
| |
| return ($html ? htmlspecialchars($out) : $out); |
| } |
| |
| function dir2var($in) |
| { |
| return str_replace(".","_",$in); |
| } |
| |
| function cleanPath($in) |
| { |
| return preg_replace("#plugins/|tests/|features/|examples/|doc/|modeling/#","",$in); |
| } |
| ?> |