gwynne Sun Oct 26 23:09:41 2008 UTC Modified files: /SVNROOT run-conversion.php Log: Rewrote conversion script to use Console_CommandLine and verbosity levels.
http://cvs.php.net/viewvc.cgi/SVNROOT/run-conversion.php?r1=1.1&r2=1.2&diff_format=u Index: SVNROOT/run-conversion.php diff -u SVNROOT/run-conversion.php:1.1 SVNROOT/run-conversion.php:1.2 --- SVNROOT/run-conversion.php:1.1 Fri Oct 24 02:45:27 2008 +++ SVNROOT/run-conversion.php Sun Oct 26 23:09:41 2008 @@ -1,46 +1,97 @@ <?php -$version = '$Rev$'; +$version = '$Revision: 1.2 $'; -print "PHP Group CVS->SVN respository conversion version {$version}.\n"; -print "Started at " . date(DATE_RFC2822) . "\n"; +require_once 'Console/CommandLine.php'; -$CVSROOT = "/home/repository"; -$SVNROOT = "/home/repository-svn"; - -$do_cvs2svn = TRUE; -$do_svnrm = TRUE; -$do_reorg = TRUE; +$cmdline_parser = new Console_CommandLine(array( + 'description' => 'PHP Group CVS->SVN respository converter', + 'version' => $version, +)); +$cmdline_parser->addOption('verbose', array( + 'short_name' => '-v', + 'long_name' => '--verbose', + 'default' => 1, + 'description' => 'Verbosity of output. Specify multiple times to increase verbosity.', + 'action' => 'Counter')); +$cmdline_parser->addOption('cvsroot', array( + 'short_name' => '-c', + 'long_name' => '--cvsroot', + 'default' => '/home/repository', + 'description' => 'Specify the CVS repository to operate on.', + 'action' => 'StoreString')); +$cmdline_parser->addOption('svnroot', array( + 'short_name' => '-s', + 'long_name' => '--svnroot', + 'default' => '/home/repository-svn', + 'description' => 'Specify the SVN repository to create.', + 'action' => 'StoreString')); +$cmdline_parser->addOption('pass', array( + 'short_name' => '-p', + 'long_name' => '--pass', + 'default' => NULL, + 'description' => 'Which pass to run. One of: svncreate, cvs2svn, svnrm, reorg. If not specified, all passes will run.', + 'action' => 'StoreString', + 'choices' => array('svncreate', 'cvs2svn', 'svnrm', 'reorg'))); + +try { + $result = $cmdline_parser->parse(); + $options = $result->options; +} catch (Exception $ex) { + $parser->displayError($ex->getMessage()); + exit(1); +} -function is_option($optName, $arg, &$value) +function v($level, $message) { - if (strncmp($arg, $optName, strlen($optName)) == 0) { - if (!is_null($value)) { - $value = substr($arg, strlen($optName) + 1); - } - return true; + if ($GLOBALS['options']['verbose'] >= $level) { + print $message; } - return false; } -foreach ($argv as $i => $arg) { - if (is_option("--cvsroot", $arg, $value)) { - $CVSROOT = $value; - } else if (is_option("--svnroot", $arg, $value)) { - $SVNROOT = $value; - } else if (is_option("--cvs2svn", $arg, $value)) { - $do_cvs2svn = ($value == 'true'); - } else if (is_option("--svnrm", $arg, $value)) { - $do_svnrm = ($value == 'true'); - } else if (is_option("--reorg", $arg, $value)) { - $do_reorg = ($value == 'true'); +function error($message, $status = 1) +{ + print $message; + exit($status); +} + +if (!is_dir($options['cvsroot']) || !is_readable($options['cvsroot']) || !is_executable($options['cvsroot'])) { + error("CVS root directory must exist, be a directory, and be readable and searchable.\n"); +} + +if (is_null($options['pass']) || $options['pass'] == 'svncreate') { + if (file_exists($options['svnroot'])) { + error("SVN root directory can not exist if running the svncreate pass.\n"); + } + if (!is_dir(dirname($options['svnroot'])) || !is_writable(dirname($options['svnroot']))) { + error("SVN root directory parent must exist, be a directory, and be writable if running the svncreate pass.\n"); + } +} else if (!is_dir($options['svnroot']) || !is_writable($options['svnroot'])) { + error("SVN root directory must exist and be writeable if not running the svncreate pass.\n"); +} + +v(1, "PHP Group CVS->SVN respository conversion.\n"); +v(1, "Started at " . date(DATE_RFC2822) . "\n"); + +if (is_null($options['pass']) || $options['pass'] == 'svncreate') { + v(1, "Running svncreate pass...\n"); + + $command = "exec svnadmin create {$options['svnroot']} 2>&1"; + v(2, "Running: '{$command}'..."); + exec($command, $output, $exitstatus); + if ($exitstatus != 0) { + error("\nAn error occurred. Exit status was {$exitstatus}. Output:\n" . implode("\n", $output) . "\n", $exitstatus); } + v(2, " done.\n"); + v(3, "Output:\n" . implode("\n", $output) . "\n"); } -if ($do_cvs2svn) { - print "Running cvs2svn...\n"; +if (is_null($options['pass']) || $options['pass'] == 'cvs2svn') { + v(1, "Running cvs2svn pass...\n"); - $cvs2svn_process = proc_open("cvs2svn --options=phpsvn.options", array( + $command = "exec cvs2svn --options=phpsvn.options"; + v(2, "Running: '{$command} > ./phpsvn.conversion.out 2>&php'..."); + $cvs2svn_process = proc_open($command, array( 0 => array('pipe', 'r'), 1 => array('file', './phpsvn.conversion.out', 'w'), 2 => array('pipe', 'w'), @@ -59,50 +110,53 @@ proc_close($cvs2svn_process); if ($procinfo['exitcode'] != 0) { - print "Error executing cvs2svn. Error output is:\n{$errorText}\n"; - exit($procinfo['exitcode']); + error("\nAn error occurred. Exit status was {$procinfo['exitcode']}. Output:\n{$errorText}\n", $procinfo['exitcode']); } + v(2, " done.\n"); + v(3, "Output is in ./phpsvn.conversion.out.\n"); } -if ($do_svnrm) { - print "Running svn rm...\n"; +if (is_null($options['pass']) || $options['pass'] == 'svnrm') { + v(1, "Running svnrm pass...\n"); - exec("svn rm -m \"[SVN CONVERSION] Removing .svn directories that break SVN checkout.\" " . - "file:///{$SVNROOT}/pear/Selenium/branches/shin/.svn " . - "file:///{$SVNROOT}/pear/Selenium/branches/shin/tests/.svn " . - "file:///{$SVNROOT}/pear/Selenium/branches/shin/tests/events/.svn " . - "file:///{$SVNROOT}/pear/Selenium/branches/shin/tests/html/.svn " . - "file:///{$SVNROOT}/pear/Selenium/branches/shin/docs/.svn " . - "file:///{$SVNROOT}/pear/Selenium/branches/shin/examples/.svn " . - "file:///{$SVNROOT}/pear/Selenium/tags/start/tests/.svn " . - "file:///{$SVNROOT}/pear/Selenium/tags/start/tests/events/.svn " . - "file:///{$SVNROOT}/pear/Selenium/tags/start/tests/html/.svn " . - "file:///{$SVNROOT}/pear/Selenium/tags/start/docs/.svn " . - "file:///{$SVNROOT}/pear/Selenium/tags/start/examples/.svn " . - "file:///{$SVNROOT}/pear/Selenium/tags/start/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/branches/shin/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/branches/shin/tests/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/branches/shin/tests/events/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/branches/shin/tests/html/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/branches/shin/docs/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/branches/shin/examples/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/tags/start/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/tags/start/tests/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/tags/start/tests/events/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/tags/start/tests/html/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/tags/start/docs/.svn " . - "file:///{$SVNROOT}/pear/Testing_Selenium/tags/start/examples/.svn 2>&1", $svnrm_output, $exitstatus); + $command = "exec svn rm -m \"[SVN CONVERSION] Removing .svn directories that break SVN checkout.\" " . + "file:///{$options['svnroot']}/pear/Selenium/branches/shin/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/branches/shin/tests/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/branches/shin/tests/events/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/branches/shin/tests/html/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/branches/shin/docs/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/branches/shin/examples/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/tags/start/tests/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/tags/start/tests/events/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/tags/start/tests/html/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/tags/start/docs/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/tags/start/examples/.svn " . + "file:///{$options['svnroot']}/pear/Selenium/tags/start/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/branches/shin/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/branches/shin/tests/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/branches/shin/tests/events/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/branches/shin/tests/html/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/branches/shin/docs/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/branches/shin/examples/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/tags/start/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/tags/start/tests/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/tags/start/tests/events/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/tags/start/tests/html/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/tags/start/docs/.svn " . + "file:///{$options['svnroot']}/pear/Testing_Selenium/tags/start/examples/.svn 2>&1"; + v(2, "Running: '{$command}'..."); + exec($command, $output, $exitstatus); if ($exitstatus != 0) { - print "Error executing svn rm. Error output is:\n" . implode("\n", $svnrm_output) . "\n"; - exit($exitstatus); + error("\nAn error occurred. Exit status was {$exitstatus}. Output:\n" . implode("\n", $output) . "\n", $exitstatus); } + v(2, " done.\n"); + v(3, "Output:\n" . implode("\n", $output) . "\n"); } -if ($do_reorg) { - print "If this were implemented yet, a series of svn cp, svn rm, and svn mv commands would follow. It isn't, so they don't. Sorry.\n"; - exit(1); +if (is_null($options['pass']) || $options['pass'] == 'reorg') { + error("If this were implemented yet, a series of svn cp, svn rm, and svn mv commands would follow. It isn't, so they don't. Sorry.\n"); } -print "Finished at " . date(DATE_RFC2822) . "\n"; +v(1, "Finished at " . date(DATE_RFC2822) . "\n"); ?>
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php