gwynne Wed Nov 5 18:15:59 2008 UTC
Added files:
/SVNROOT phpsvn.options.skel
Modified files:
/SVNROOT run-conversion.php
Log:
Complete rewrite of conversion script, and addition of cvs2svn options file
skeleton.
http://cvs.php.net/viewvc.cgi/SVNROOT/run-conversion.php?r1=1.4&r2=1.5&diff_format=u
Index: SVNROOT/run-conversion.php
diff -u SVNROOT/run-conversion.php:1.4 SVNROOT/run-conversion.php:1.5
--- SVNROOT/run-conversion.php:1.4 Fri Oct 31 03:22:27 2008
+++ SVNROOT/run-conversion.php Wed Nov 5 18:15:59 2008
@@ -1,16 +1,59 @@
<?php
-$version = substr('$Revision: 1.4 $', strlen('$Revision: '), -2);
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Constants
+$version = substr('$Revision: 1.5 $', strlen('$Revision: '), -2);
$passes = array(
- 'svncreate', // svnadmin create $SVNROOT
- 'cvs2svn', // cvs2svn --options
- 'svnrm', // svn rm $SVNROOT/*/.svn
- 'reorg', // Reorganize repository
+ 'processcvs', // Process CVS modules
+ 'svncreate', // Create various SVN repositories
+ 'cvs2svn', // Run conversion for each repository
+ 'cleanup', // Preform renaming and removes for each repo
);
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Includes
require_once 'Console/CommandLine.php';
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Utility functions
+function v($level, $message)
+{
+ if ($GLOBALS['options']['verbose'] >= $level) {
+ print $message;
+ }
+}
+
+function error($message, $status = 1)
+{
+ print $message;
+ exit($status);
+}
+
+function is_running_pass($pass)
+{
+ return $GLOBALS['options']['pass'] === NULL || $GLOBALS['options']['pass']
== $pass;
+}
+
+function scandir_is_meta($value)
+{
+ return !($value === '.' || $value === '..');
+}
+
+function scandir_no_meta($directory)
+{
+ if (func_num_args() == 3) {
+ $results = scandir($directory, func_get_arg(1), func_get_arg(2));
+ } else if (func_num_args() == 2) {
+ $results = scandir($directory, func_get_arg(1));
+ } else if (func_num_args() == 1) {
+ $results = scandir($directory);
+ }
+ return array_filter($results, 'scandir_is_meta');
+}
+
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Commandline options
$cmdline_parser = new Console_CommandLine(array(
'description' => 'PHP Group CVS->SVN respository converter',
'version' => $version,
@@ -30,8 +73,8 @@
$cmdline_parser->addOption('svnroot', array(
'short_name' => '-s',
'long_name' => '--svnroot',
- 'default' => '/home/repository-svn',
- 'description' => 'Specify the SVN repository to create.',
+ 'default' => '/home/svn',
+ 'description' => 'Specify the directory for SVN repositories.',
'action' => 'StoreString'));
$cmdline_parser->addOption('pass', array(
'short_name' => '-p',
@@ -40,6 +83,18 @@
'description' => 'Which pass to run. One of: ' . implode(', ', $passes) .
'. If not specified, all passes will run.',
'action' => 'StoreString',
'choices' => $passes));
+$cmdline_parser->addOption('tempdir', array(
+ 'short_name' => '-t',
+ 'long_name' => '--tempdir',
+ 'default' => '/tmp',
+ 'description' => 'Where to store temporary files.',
+ 'action' => 'StoreString'));
+$cmdline_parser->addOption('skeleton', array(
+ 'short_name' => '-k',
+ 'long_name' => '--skeleton',
+ 'default' => './phpsvn.options.skel',
+ 'description' => 'Skeleton file to use for cvs2svn conversions.',
+ 'action' => 'StoreString'));
try {
$result = $cmdline_parser->parse();
@@ -49,139 +104,358 @@
exit(1);
}
-function v($level, $message)
-{
- if ($GLOBALS['options']['verbose'] >= $level) {
- print $message;
- }
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Option verification
+if (!is_dir($options['cvsroot']) || !is_readable($options['cvsroot']) ||
!is_executable($options['cvsroot'])) {
+ error("CVS root directory must exist and be a readable and searchable
directory.\n");
}
+$options['cvsroot'] = realpath($options['cvsroot']);
-function error($message, $status = 1)
-{
- print $message;
- exit($status);
+if (!is_dir($options['svnroot']) || !is_readable($options['svnroot']) ||
!is_executable($options['svnroot'])) {
+ error("SVN root directory must exist, be a directory, and be readable and
searchable.\n");
}
+if (is_running_pass('svncreate') && !is_writable($options['svnroot'])) {
+ error("SVN root directory must be writable if running the svncreate
pass.\n");
+}
+$options['svnroot'] = realpath($options['svnroot']);
-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_dir($options['tempdir']) || !is_writable($options['tempdir'])) {
+ error("Temporary directory must exist and be a writable directory.\n");
+}
+$options['tempdir'] = realpath($options['tempdir']);
+
+if (!file_exists($options['skeleton']) || is_dir($options['skeleton']) ||
!is_readable($options['skeleton'])) {
+ error("cvs2svn options skeleton must exist and be a readable file.\n");
+}
+$options['skeleton'] = realpath($options['skeleton']);
+
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Classes
+
+// CVS2SVNConverter: A wrapper around a cvs2svn instance and its options file
+class CVS2SVNConverter
+{
+ private $optionsFileContents = NULL;
+ private $outputPath = NULL;
+
+ public function __construct()
+ {
+ $this->optionsFileContents =
file_get_contents($GLOBALS['options']['skeleton']);
+ $this->optionsFileContents = str_replace('@@@TEMPDIR@@@',
$GLOBALS['temp_path'], $this->optionsFileContents);
+ }
+
+ public function setOutputPath($path)
+ {
+ $this->outputPath = $path;
+ }
+
+ public function addCVSModule($moduleName, $isMetaModule = false)
+ {
+ $cvspath = $GLOBALS['options']['cvsroot'] . DIRECTORY_SEPARATOR .
$moduleName . DIRECTORY_SEPARATOR;
+ if ($isMetaModule) {
+ $modprefix = $moduleName . '/';
+ foreach(scandir_no_meta($cvspath) as $module) {
+ $this->optionsFileContents .= <<<EOEXTRA
+run_options.add_project(
+ '{$cvspath}{$module}',
+ trunk_path='{$modprefix}{$module}/trunk',
+ branches_path='{$modprefix}{$module}/branches',
+ tags_path='{$modprefix}{$module}/tags',
+ symbol_transforms=[ReplaceSubstringsSymbolTransform('\\','/'),
NormalizePathsSymbolTransform()],
+ symbol_strategy_rules=[] + global_symbol_strategy_rules,
+ )
+
+EOEXTRA;
+ }
+ } else {
+ $this->optionsFileContents .= <<<EOEXTRA
+run_options.add_project(
+ '{$cvspath}',
+ trunk_path='{$moduleName}/trunk',
+ branches_path='{$moduleName}/branches',
+ tags_path='{$moduleName}/tags',
+ symbol_transforms=[ReplaceSubstringsSymbolTransform('\\\\','/'),
NormalizePathsSymbolTransform()],
+ symbol_strategy_rules=[] + global_symbol_strategy_rules,
+ )
+
+EOEXTRA;
+ }
+ }
+
+ public function run()
+ {
+ $this->optionsFileContents = str_replace('@@@OUTPUT_PATH@@@',
$this->outputPath, $this->optionsFileContents);
+ do {
+ $seed = mt_rand();
+ $filename = $GLOBALS['temp_path'] . DIRECTORY_SEPARATOR .
'cvs2svn.options.' . $seed;
+ } while (file_exists($filename));
+ file_put_contents($filename, $this->optionsFileContents);
+
+ $command = "exec cvs2svn --options=" . escapeshellarg($filename);
+ v(2, "Running: '{$command}'...");
+ $cvs2svn_process = proc_open($command, array(
+ 0 => array('pipe', 'r'),
+ 1 => array('file', $GLOBALS['temp_path'] . DIRECTORY_SEPARATOR
. 'phpsvn.conversion.' . $seed, 'a'),
+ 2 => array('pipe', 'w'),
+ ), $pipes, NULL, NULL);
+ fclose($pipes[0]);
+ $procinfo = array();
+ do {
+ usleep(500000);
+ $procinfo = proc_get_status($cvs2svn_process);
+ } while ($procinfo['running'] == TRUE);
+ $errorText = stream_get_contents($pipes[2]);
+ fclose($pipes[2]);
+ proc_close($cvs2svn_process);
+
+ if ($procinfo['exitcode'] != 0) {
+ error("\nAn error occurred. Exit status was
{$procinfo['exitcode']}. Output:\n{$errorText}\n", $procinfo['exitcode']);
+ }
+ v(2, " done.\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");
+// Repository: A collection of related modules
+class Repository
+{
+ private $repositoryName = NULL;
+ private $cvsModuleList = array();
+ private $svnRepositoryPath = NULL;
+ private $renamingRules = array();
+
+ public function __construct($repoName)
+ {
+ $this->repositoryName = $repoName;
+ $this->svnRepositoryPath = $GLOBALS['options']['svnroot'] .
DIRECTORY_SEPARATOR . $this->repositoryName;
+ }
+
+ public function __toString()
+ {
+ $result = "Repository named '{$this->repositoryName}'.\n";
+ $result .= "\tCVS modules:\n\t\t";
+ $modList = '';
+ foreach ($this->cvsModuleList as $mod => $meta) {
+ $modList .= $mod . " " . ($meta ? "(meta) " : "");
+ }
+ $result .= wordwrap($modList, 80, "\n\t\t") . "\n";
+// $result .= "\tRenaming rules:\n\t\t";
+// $result .= wordwrap(str_replace("\n", "\n\t\t",
print_r($this->renamingRules, 1)), 80, "\n\t\t");
+ return trim($result);
+ }
+
+ public function addCVSModule($module, $isMeta = FALSE)
+ {
+ $this->cvsModuleList[$module] = $isMeta;
+ }
+
+ public function addRenameRule($rule)
+ {
+ $this->renamingRules[] = $rule;
+ }
+
+ public function createSVNRepository()
+ {
+ if (file_exists($this->svnRepositoryPath)) {
+ if (!is_readable($this->svnRepositoryPath) ||
!is_writable($this->svnRepositoryPath)) {
+ error("Directory '{$this->svnRepositoryPath}' is in the
way.\n");
+ }
+ // Repo already exists
+ return;
+ }
+ $command = "exec svnadmin create " .
escapeshellarg($this->svnRepositoryPath) . " 2>&1";
+ v(1, "Creating SVN repository for '{$this->repositoryName}' in
{$this->svnRepositoryPath}...\n");
+ 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");
+ }
+
+ public function importCVSModules()
+ {
+ if (!is_dir($this->svnRepositoryPath) ||
!is_writable($this->svnRepositoryPath)) {
+ error("SVN repository at {$this->svnRepositoryPath} doesn't exist
or isn't writable.\n");
+ }
+
+ v(1, "Running cvs2svn for '{$this->repositoryName}'...\n");
+ $converter = new CVS2SVNConverter;
+ $converter->setOutputPath($this->svnRepositoryPath);
+ foreach ($this->cvsModuleList as $cvs_module => $isMeta) {
+ $converter->addCVSModule($cvs_module, $isMeta);
+ }
+ $converter->run();
}
- 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");
+
+ public function fixupRepository($ignoreErrors = FALSE)
+ {
+ v(1, "Executing fixup commands for repository
'{$this->repositoryName}'...\n");
+ foreach ($renamingRules as $rule) {
+ switch ($rule['mode']) {
+ case 'move_all':
+ error("Moving tags and branches is not yet supported! TODO
IMPLEMENT ME.\n");
+ break;
+ case 'delete':
+ $command = "exec svn rm ";
+ $command .= "-m '[SVN CONVERSION] Reorganization in
repository {$this->repositoryName}.' ";
+ $command .= "file:///" .
escapeshellarg($this->svnRepositoryPath) . "/" .
escapeshellarg($rule['srcPath']) . " 2>&1";
+ break;
+ case 'move':
+ $command = "exec svn mv ";
+ $command .= "-m '[SVN CONVERSION] Reorganization in
repository {$this->repositoryName}.' ";
+ $command .= "file:///" .
escapeshellarg($this->svnRepositoryPath) . "/" .
escapeshellarg($rule['srcPath']) . " ";
+ $command .= "file:///" .
escapeshellarg($this->svnRepositoryPath) . "/" .
escapeshellarg($rule['dstPath']) . " 2>&1";
+ break;
+ }
+ v(2, "Running: '{$command}'...");
+ exec($command, $output, $exitstatus);
+ if ($exitstatus != 0 && $ignoreErrors === FALSE) {
+ error("\nAn error occurred. Exit status was {$exitstatus}.
Output:\n" . implode("\n", $output) . "\n", $exitstatus);
+ } else if ($exitStatus != 0) {
+ v(2, " warning: an error occurred\n");
+ } else {
+ v(2, " done.\n");
+ }
+ }
+ v(1, "Done fixing up.");
}
-} 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");
}
-
+
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Main
v(1, "PHP Group CVS->SVN respository conversion.\n");
v(1, "Started at " . date(DATE_RFC2822) . "\n");
+$temp_path = $options['tempdir'] . DIRECTORY_SEPARATOR . "phpsvn_tmp";
+v(2, "Creating temporary files directory at {$temp_path}...\n");
+
+if (!file_exists($temp_path)) {
+ if (mkdir($temp_path, 0700, FALSE) === FALSE) {
+ error("Can't create temporary files directory.\n");
+ }
+}
+
foreach ($passes as $pass) {
- if (is_null($options['pass']) || $options['pass'] == $pass) {
+ if (is_running_pass($pass)) {
call_user_func('pass_' . $pass);
}
}
-function pass_svncreate()
+//
-----------------------------------------------------------------------------------------------------------------------------
+// processcvs pass
+function pass_processcvs()
{
- global $options;
+ global $repoList, $options;
- v(1, "Running svncreate pass...\n");
+ v(1, "Running processcvs pass...\n");
+
+ $repoList = array();
+ $repoList['doc'] = new Repository('php-doc');
+ $repoList['gtk'] = new Repository('php-gtk');
+ $repoList['src'] = new Repository('php-src');
+ $repoList['web'] = new Repository('php-web');
+ $repoList['phd'] = new Repository('phd');
+ $repoList['pear1'] = new Repository('pear');
+ $repoList['other'] = new Repository('other');
+
+ $cvs_modules = scandir_no_meta($options['cvsroot']);
+ foreach ($cvs_modules as $cvs_module) {
+ if ($cvs_module == 'CVSROOT') {
+ continue;
+ }
+ if (count(scandir($options['cvsroot'] . DIRECTORY_SEPARATOR .
$cvs_module)) == 2) { // empty
+ continue;
+ }
+ if (in_array($cvs_module, array("smarty", "smarty-web", 'php4.fubar',
'php4.unused', 'peardoc.backup', 'php3', 'Zend'))) {
+ continue;
+ } else if (in_array($cvs_module, array('php-gtk', 'php-gtk-doc',
'old-php-gtk-modules'))) {
+ $repoList['gtk']->addCVSModule($cvs_module);
+ } else if (in_array($cvs_module, array('TSRM', 'ZendAPI',
'ZendEngine2', 'php-src', 'pecl', 'pecl4win', 'php-objc', 'php-lang',
+ 'win-installer', 'bindlib_w32', 'zlib', 'pdo-specs'))) {
+ $repoList['src']->addCVSModule($cvs_module, $cvs_module == 'pecl');
+ } else if ($cvs_module == 'phd') {
+ $repoList['phd']->addCVSModule($cvs_module);
+ } else if (in_array($cvs_module, array('pear', 'pearbot', 'pear-core',
'peardoc'))) {
+ $repoList['pear1']->addCVSModule($cvs_module, $cvs_module ==
'pear');
+ } else if (strncmp($cvs_module, "phpdoc", 6) == 0) {
+ $repoList['doc']->addCVSModule($cvs_module);
+ } else if (substr($cvs_module, -3) == "web") {
+ $repoList['web']->addCVSModule($cvs_module);
+ } else {
+ $repoList['other']->addCVSModule($cvs_module);
+ }
+ }
- $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);
+ $repoList['doc']->addRenameRule(array('mode' => 'move', 'srcPath' =>
'phpdoc', 'dstPath' => 'doc-base'));
+ $repoList['doc']->addRenameRule(array('mode' => 'move_all', 'srcPath' =>
'doc-base/en', 'dstPath' => 'en'));
+ $repoList['src']->addRenameRule(array('mode' => 'move', 'srcPath' =>
'pdo-specs/trunk', 'dstPath' => 'php-src/ext/pdo/specs'));
+ $repoList['src']->addRenameRule(array('mode' => 'move_all', 'srcPath' =>
'ZendEngine2', 'dstPath' => 'php-src'));
+ $repoList['src']->addRenameRule(array('mode' => 'move_all', 'srcPath' =>
'TSRM', 'dstPath' => 'php-src'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/branches/shin/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/branches/shin/tests/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/branches/shin/tests/events/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/branches/shin/tests/html/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/branches/shin/docs/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/branches/shin/examples/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/tags/start/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/tags/start/tests/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/tags/start/tests/events/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/tags/start/tests/html/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/tags/start/docs/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Selenium/tags/start/examples/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/branches/shin/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/branches/shin/tests/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/branches/shin/tests/events/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/branches/shin/tests/html/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/branches/shin/docs/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/branches/shin/examples/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/tags/start/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/tags/start/tests/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/tags/start/tests/events/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/tags/start/tests/html/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/tags/start/docs/.svn'));
+ $repoList['pear1']->addRenameRule(array('mode' => 'delete', 'srcPath' =>
'pear/Testing_Selenium/tags/start/examples/.svn'));
+
+ v(2, "Prepared " . count($repoList) . " SVN repositories.\n");
+ foreach ($repoList as $repo) {
+ v(2, $repo . "\n");
+ }
+}
+
+//
-----------------------------------------------------------------------------------------------------------------------------
+// svncreate pass
+function pass_svncreate()
+{
+ foreach ($GLOBALS['repoList'] as $repo) {
+ $repo->createSVNRepository();
}
- v(2, " done.\n");
- v(3, "Output:\n" . implode("\n", $output) . "\n");
}
+//
-----------------------------------------------------------------------------------------------------------------------------
+// cvs2svn pass
function pass_cvs2svn()
{
- global $options;
-
- v(1, "Running cvs2svn pass...\n");
-
- $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'),
- ), $pipes, NULL, NULL);
- fclose($pipes[0]);
- $procinfo = array();
-
- do {
- usleep(500000);
- $procinfo = proc_get_status($cvs2svn_process);
- } while ($procinfo['running'] == TRUE);
-
- $errorText = stream_get_contents($pipes[2]);
- fclose($pipes[2]);
-
- proc_close($cvs2svn_process);
-
- if ($procinfo['exitcode'] != 0) {
- 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");
-}
-
-function pass_svnrm()
-{
- global $options;
-
- v(1, "Running svnrm pass...\n");
-
- $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) {
- 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");
+ foreach ($GLOBALS['repoList'] as $repo) {
+ $repo->importCVSModules();
+ }
}
-function pass_reorg()
+//
-----------------------------------------------------------------------------------------------------------------------------
+// cleanup pass
+function pass_cleanup()
{
- global $options;
-
- 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");
+ foreach ($GLOBALS['repoList'] as $repo) {
+ $repo->fixupRepository();
+ }
}
+//
-----------------------------------------------------------------------------------------------------------------------------
+// Cleanup
+
+if ($options['pass'] === NULL || $options['pass'] == end($passes)) {
+ v(2, "Removing temporary files.\n");
+ system("rm -Rf " . escapeshellarg($temp_path));
+}
v(1, "Finished at " . date(DATE_RFC2822) . "\n");
?>
http://cvs.php.net/viewvc.cgi/SVNROOT/phpsvn.options.skel?view=markup&rev=1.1
Index: SVNROOT/phpsvn.options.skel
+++ SVNROOT/phpsvn.options.skel
# (Be in -*- python -*- mode.)
import re
import os
from cvs2svn_lib.boolean import *
from cvs2svn_lib import config
from cvs2svn_lib import changeset_database
from cvs2svn_lib.common import CVSTextDecoder
from cvs2svn_lib.log import Log
from cvs2svn_lib.project import Project
from cvs2svn_lib.svn_output_option import *
from cvs2svn_lib.revision_manager import *
from cvs2svn_lib.rcs_revision_manager import *
from cvs2svn_lib.checkout_internal import *
from cvs2svn_lib.symbol_strategy import *
from cvs2svn_lib.symbol_transform import *
from cvs2svn_lib.property_setters import *
Log().log_level = Log.VERBOSE
ctx.output_option = ExistingRepositoryOutputOption(
r'@@@OUTPUT_PATH@@@',
)
ctx.dry_run = False
ctx.revision_recorder = InternalRevisionRecorder(compress=True)
ctx.revision_excluder = InternalRevisionExcluder()
ctx.revision_reader = InternalRevisionReader(compress=True)
ctx.svnadmin_executable = r'svnadmin'
ctx.sort_executable = r'sort'
ctx.trunk_only = False
ctx.prune = True
ctx.cvs_author_decoder = CVSTextDecoder(
[
'latin1',
'utf8',
'ascii',
],
)
ctx.cvs_log_decoder = CVSTextDecoder(
[
'latin1',
'utf8',
'ascii',
],
)
ctx.cvs_filename_decoder = CVSTextDecoder(
[
'latin1',
'utf8',
'ascii',
],
)
ctx.decode_apple_single = False
ctx.symbol_info_filename = None
global_symbol_strategy_rules = [
ExcludeRegexpStrategyRule(r'php4/CREDITS'),
UnambiguousUsageRule(),
BranchIfCommitsRule(),
HeuristicStrategyRule(),
DefaultBasePathRule(),
HeuristicPreferredParentRule(),
]
ctx.username = 'cvs2svn'
ctx.svn_property_setters.extend([
CVSBinaryFileEOLStyleSetter(),
CVSBinaryFileDefaultMimeTypeSetter(),
EOLStyleFromMimeTypeSetter(),
DefaultEOLStyleSetter('native'),
SVNBinaryFileKeywordsPropertySetter(),
KeywordsPropertySetter(config.SVN_KEYWORDS_VALUE),
ExecutablePropertySetter(),
CVSRevisionNumberSetter(),
])
ctx.tmpdir = r'@@@TEMPDIR@@@'
ctx.cross_project_commits = False
ctx.cross_branch_commits = False
ctx.retain_conflicting_attic_files = True
run_options.profiling = False
changeset_database.use_mmap_for_cvs_item_to_changeset_table = False
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php