diff --git a/lib/Doctrine/Common/Cli/CliController.php b/lib/Doctrine/Common/Cli/CliController.php index 5bb26de4b..3e55bbd53 100644 --- a/lib/Doctrine/Common/Cli/CliController.php +++ b/lib/Doctrine/Common/Cli/CliController.php @@ -82,7 +82,8 @@ class CliController extends AbstractNamespace ->addTask('generate-proxies', $ns . '\GenerateProxiesTask') ->addTask('run-dql', $ns . '\RunDqlTask') ->addTask('schema-tool', $ns . '\SchemaToolTask') - ->addTask('version', $ns . '\VersionTask'); + ->addTask('version', $ns . '\VersionTask') + ->addTask('convert-d1-schema', $ns . '\ConvertDoctrine1SchemaTask'); $ns = 'Doctrine\DBAL\Tools\Cli\Tasks'; $this->addNamespace('Dbal') diff --git a/lib/Doctrine/ORM/Tools/Cli/Tasks/ConvertDoctrine1SchemaTask.php b/lib/Doctrine/ORM/Tools/Cli/Tasks/ConvertDoctrine1SchemaTask.php new file mode 100644 index 000000000..894f95e7c --- /dev/null +++ b/lib/Doctrine/ORM/Tools/Cli/Tasks/ConvertDoctrine1SchemaTask.php @@ -0,0 +1,111 @@ +. + */ + +namespace Doctrine\ORM\Tools\Cli\Tasks; + +use Doctrine\Common\Cli\Tasks\AbstractTask, + Doctrine\ORM\Tools\Export\ClassMetadataExporter, + Doctrine\Common\Cli\CliException, + Doctrine\Common\Cli\Option, + Doctrine\Common\Cli\OptionGroup, + Doctrine\ORM\Tools\ConvertDoctrine1Schema; + +/** + * CLI Task to convert a Doctrine 1 schema to a Doctrine 2 mapping file + * + * @license http://www.opensource.org/licenses/lgpl-license.php LGPL + * @link www.doctrine-project.org + * @since 2.0 + * @version $Revision$ + * @author Benjamin Eberlei + * @author Guilherme Blanco + * @author Jonathan Wage + * @author Roman Borschel + */ +class ConvertDoctrine1SchemaTask extends AbstractTask +{ + /** + * @inheritdoc + */ + public function buildDocumentation() + { + $options = new OptionGroup(OptionGroup::CARDINALITY_N_N, array( + new Option('from', '', 'The path to the Doctrine 1 schema.'), + new Option('to', '', 'The Doctrine 2 mapping format to convert to.'), + new Option('dest', '', 'The path to export the converted schema.') + )); + + $doc = $this->getDocumentation(); + $doc->setName('convert-10-schema') + ->setDescription('Displays the current installed Doctrine version.') + ->getOptionGroup() + ->addOption($options); + } + + /** + * @inheritdoc + */ + public function validate() + { + $arguments = $this->getArguments(); + $em = $this->getConfiguration()->getAttribute('em'); + + if ( ! isset($arguments['from']) || ! isset($arguments['to']) || ! isset($arguments['dest'])) { + throw new CliException('You must specify a value for --from, --to and --dest'); + } + + return true; + } + + public function run() + { + $arguments = $this->getArguments(); + $printer = $this->getPrinter(); + + $printer->writeln(sprintf( + 'Converting Doctrine 1 schema at "%s" to the "%s" format', + $printer->format($arguments['from'], 'KEYWORD'), + $printer->format($arguments['to'], 'KEYWORD') + ) + ); + + $cme = new ClassMetadataExporter(); + $exporter = $cme->getExporter($arguments['to'], $arguments['dest']); + + $converter = new ConvertDoctrine1Schema($arguments['from']); + $metadatas = $converter->getMetadatasFromSchema(); + + foreach ($metadatas as $metadata) { + $printer->writeln( + sprintf('Processing entity "%s"', $printer->format($metadata->name, 'KEYWORD')) + ); + } + + $exporter->setMetadatas($metadatas); + $exporter->export(); + + $printer->writeln(sprintf( + 'Writing Doctrine 2 mapping files to "%s"', + $printer->format($arguments['dest'], 'KEYWORD') + ) + ); + } +} \ No newline at end of file diff --git a/lib/Doctrine/ORM/Tools/Cli/Tasks/ConvertMappingTask.php b/lib/Doctrine/ORM/Tools/Cli/Tasks/ConvertMappingTask.php index 61d63cf8f..6e6e3ab7f 100644 --- a/lib/Doctrine/ORM/Tools/Cli/Tasks/ConvertMappingTask.php +++ b/lib/Doctrine/ORM/Tools/Cli/Tasks/ConvertMappingTask.php @@ -129,36 +129,29 @@ class ConvertMappingTask extends AbstractTask $from = (array) $arguments['from']; - if ($this->_isDoctrine1Schema($from)) { - $printer->writeln('Converting Doctrine 1 schema to Doctrine 2 mapping files', 'INFO'); - - $converter = new \Doctrine\ORM\Tools\ConvertDoctrine1Schema($from); - $metadatas = $converter->getMetadatasFromSchema(); - } else { - foreach ($from as $source) { - $sourceArg = $source; - $type = $this->_determineSourceType($sourceArg); - - if ( ! $type) { - throw new CliException( - "Invalid mapping source type '$sourceArg'." - ); - } - - $source = $this->_getSourceByType($type, $sourceArg); - - $printer->writeln( - sprintf( - 'Adding "%s" mapping source which contains the "%s" format', - $printer->format($sourceArg, 'KEYWORD'), $printer->format($type, 'KEYWORD') - ) + foreach ($from as $source) { + $sourceArg = $source; + $type = $this->_determineSourceType($sourceArg); + + if ( ! $type) { + throw new CliException( + "Invalid mapping source type '$sourceArg'." ); - - $cme->addMappingSource($source, $type); } - $metadatas = $cme->getMetadatasForMappingSources(); + $source = $this->_getSourceByType($type, $sourceArg); + + $printer->writeln( + sprintf( + 'Adding "%s" mapping source which contains the "%s" format', + $printer->format($sourceArg, 'KEYWORD'), $printer->format($type, 'KEYWORD') + ) + ); + + $cme->addMappingSource($source, $type); } + + $metadatas = $cme->getMetadatasForMappingSources(); foreach ($metadatas as $metadata) { $printer->writeln( @@ -178,22 +171,6 @@ class ConvertMappingTask extends AbstractTask $exporter->export(); } - private function _isDoctrine1Schema(array $from) - { - $files = glob(current($from) . '/*.yml'); - - if ($files) { - $array = \Symfony\Components\Yaml\Yaml::load($files[0]); - $first = current($array); - - // We're dealing with a Doctrine 1 schema if you have - // a columns index in the first model array - return isset($first['columns']); - } else { - return false; - } - } - private function _determineSourceType($source) { // If the --from= is a directory lets determine if it is