Skip to content

Commit

Permalink
Tried to merge pvanliefland's fork into the current version
Browse files Browse the repository at this point in the history
Issue doctrine#38 Multiple entity managers support

Added the possibility to configure migrations depending on
the entity manager

Conflicts:
	Command/DoctrineCommand.php
	Command/MigrationsExecuteDoctrineCommand.php
	Command/MigrationsGenerateDoctrineCommand.php
	Command/MigrationsStatusDoctrineCommand.php
  • Loading branch information
pvanliefland authored and Dennis Bystrow committed Jan 20, 2017
1 parent 6276139 commit 5678b24
Show file tree
Hide file tree
Showing 8 changed files with 96 additions and 80 deletions.
111 changes: 43 additions & 68 deletions Command/DoctrineCommand.php
Expand Up @@ -28,78 +28,53 @@
*/
abstract class DoctrineCommand extends BaseCommand
{
public static function configureMigrations(ContainerInterface $container, Configuration $configuration)
{
if (!$configuration->getMigrationsDirectory()) {
$dir = $container->getParameter('doctrine_migrations.dir_name');
if (!is_dir($dir) && !@mkdir($dir, 0777, true) && !is_dir($dir)) {
$error = error_get_last();
throw new \ErrorException($error['message']);
}
$configuration->setMigrationsDirectory($dir);
} else {
$dir = $configuration->getMigrationsDirectory();
// class Kernel has method getKernelParameters with some of the important path parameters
$pathPlaceholderArray = array('kernel.root_dir', 'kernel.cache_dir', 'kernel.logs_dir');
foreach ($pathPlaceholderArray as $pathPlaceholder) {
if ($container->hasParameter($pathPlaceholder) && preg_match('/\%'.$pathPlaceholder.'\%/', $dir)) {
$dir = str_replace('%'.$pathPlaceholder.'%', $container->getParameter($pathPlaceholder), $dir);
}
}
if (!is_dir($dir) && !@mkdir($dir, 0777, true) && !is_dir($dir)) {
$error = error_get_last();
throw new \ErrorException($error['message']);
}
$configuration->setMigrationsDirectory($dir);
}
if (!$configuration->getMigrationsNamespace()) {
$configuration->setMigrationsNamespace($container->getParameter('doctrine_migrations.namespace'));
}
if (!$configuration->getName()) {
$configuration->setName($container->getParameter('doctrine_migrations.name'));
}
// For backward compatibility, need use a table from parameters for overwrite the default configuration
if (!($configuration instanceof AbstractFileConfiguration) || !$configuration->getMigrationsTableName()) {
$configuration->setMigrationsTableName($container->getParameter('doctrine_migrations.table_name'));
}
// Migrations is not register from configuration loader
if (!($configuration instanceof AbstractFileConfiguration)) {
$configuration->registerMigrationsFromDirectory($configuration->getMigrationsDirectory());
}

$organizeMigrations = $container->getParameter('doctrine_migrations.organize_migrations');
switch ($organizeMigrations) {
case Configuration::VERSIONS_ORGANIZATION_BY_YEAR:
$configuration->setMigrationsAreOrganizedByYear(true);
break;
public static function configureMigrations(ContainerInterface $container, Configuration $configuration, $em)
{
if ($container->hasParameter('doctrine_migrations.default_entity_manager')) {
$configurationPrefix = 'doctrine_migrations.default_entity_manager';
} elseif ($container->hasParameter('doctrine_migrations.' . $em)) {
$configurationPrefix = 'doctrine_migrations.' . $em;
} else {
if (null === $em) {
$message = 'There is no doctrine migrations configuration available for the default entity manager';
} else {
$message = sprintf(
'There is no doctrine migrations configuration available for the %s entity manager',
$em
);
}
throw new \InvalidArgumentException($message);
}

case Configuration::VERSIONS_ORGANIZATION_BY_YEAR_AND_MONTH:
$configuration->setMigrationsAreOrganizedByYearAndMonth(true);
break;
$containerParameters = $container->getParameter($configurationPrefix);

case false:
break;
$dir = $containerParameters['dir_name'];
if (!file_exists($dir)) {
mkdir($dir, 0777, true);
}

default:
throw new InvalidArgumentException('Invalid value for "doctrine_migrations.organize_migrations" parameter.');
}
$configuration->setMigrationsNamespace($containerParameters['namespace']);
$configuration->setMigrationsDirectory($dir);
$configuration->registerMigrationsFromDirectory($dir);
$configuration->setName($containerParameters['name']);
$configuration->setMigrationsTableName($containerParameters['table_name']);

self::injectContainerToMigrations($container, $configuration->getMigrations());
}
self::injectContainerToMigrations($container, $configuration->getMigrations());
}

/**
* @param ContainerInterface $container
* @param array $versions
*
* Injects the container to migrations aware of it
*/
private static function injectContainerToMigrations(ContainerInterface $container, array $versions)
{
foreach ($versions as $version) {
$migration = $version->getMigration();
if ($migration instanceof ContainerAwareInterface) {
$migration->setContainer($container);
}
}
/**
* @param ContainerInterface $container
* @param array $versions
*
* Injects the container to migrations aware of it
*/
private static function injectContainerToMigrations(ContainerInterface $container, array $versions)
{
foreach ($versions as $version) {
$migration = $version->getMigration();
if ($migration instanceof ContainerAwareInterface) {
$migration->setContainer($container);
}
}
}
}
6 changes: 5 additions & 1 deletion Command/MigrationsDiffDoctrineCommand.php
Expand Up @@ -56,7 +56,11 @@ public function execute(InputInterface $input, OutputInterface $output)
}

$configuration = $this->getMigrationConfiguration($input, $output);
DoctrineCommand::configureMigrations($this->getApplication()->getKernel()->getContainer(), $configuration);
DoctrineCommand::configureMigrations(
$this->getApplication()->getKernel()->getContainer(),
$configuration,
$input->getOption('em')
);

return parent::execute($input, $output);
}
Expand Down
10 changes: 7 additions & 3 deletions Command/MigrationsExecuteDoctrineCommand.php
Expand Up @@ -50,8 +50,12 @@ public function execute(InputInterface $input, OutputInterface $output)
Helper\DoctrineCommandHelper::setApplicationHelper($this->getApplication(), $input);

$configuration = $this->getMigrationConfiguration($input, $output);
DoctrineCommand::configureMigrations($this->getApplication()->getKernel()->getContainer(), $configuration);

return parent::execute($input, $output);
DoctrineCommand::configureMigrations(
$this->getApplication()->getKernel()->getContainer(),
$configuration,
$input->getOption('em')
);

parent::execute($input, $output);
}
}
10 changes: 7 additions & 3 deletions Command/MigrationsGenerateDoctrineCommand.php
Expand Up @@ -50,8 +50,12 @@ public function execute(InputInterface $input, OutputInterface $output)
Helper\DoctrineCommandHelper::setApplicationHelper($this->getApplication(), $input);

$configuration = $this->getMigrationConfiguration($input, $output);
DoctrineCommand::configureMigrations($this->getApplication()->getKernel()->getContainer(), $configuration);

return parent::execute($input, $output);
DoctrineCommand::configureMigrations(
$this->getApplication()->getKernel()->getContainer(),
$configuration,
$input->getOption('em')
);

parent::execute($input, $output);
}
}
6 changes: 5 additions & 1 deletion Command/MigrationsMigrateDoctrineCommand.php
Expand Up @@ -50,7 +50,11 @@ public function execute(InputInterface $input, OutputInterface $output)
Helper\DoctrineCommandHelper::setApplicationHelper($this->getApplication(), $input);

$configuration = $this->getMigrationConfiguration($input, $output);
DoctrineCommand::configureMigrations($this->getApplication()->getKernel()->getContainer(), $configuration);
DoctrineCommand::configureMigrations(
$this->getApplication()->getKernel()->getContainer(),
$configuration,
$input->getOption('em')
);

return parent::execute($input, $output);
}
Expand Down
10 changes: 7 additions & 3 deletions Command/MigrationsStatusDoctrineCommand.php
Expand Up @@ -50,8 +50,12 @@ public function execute(InputInterface $input, OutputInterface $output)
Helper\DoctrineCommandHelper::setApplicationHelper($this->getApplication(), $input);

$configuration = $this->getMigrationConfiguration($input, $output);
DoctrineCommand::configureMigrations($this->getApplication()->getKernel()->getContainer(), $configuration);

return parent::execute($input, $output);
DoctrineCommand::configureMigrations(
$this->getApplication()->getKernel()->getContainer(),
$configuration,
$input->getOption('em')
);

parent::execute($input, $output);
}
}
6 changes: 5 additions & 1 deletion Command/MigrationsVersionDoctrineCommand.php
Expand Up @@ -50,7 +50,11 @@ public function execute(InputInterface $input, OutputInterface $output)
Helper\DoctrineCommandHelper::setApplicationHelper($this->getApplication(), $input);

$configuration = $this->getMigrationConfiguration($input, $output);
DoctrineCommand::configureMigrations($this->getApplication()->getKernel()->getContainer(), $configuration);
DoctrineCommand::configureMigrations(
$this->getApplication()->getKernel()->getContainer(),
$configuration,
$input->getOption('em')
);

return parent::execute($input, $output);
}
Expand Down
17 changes: 17 additions & 0 deletions DependencyInjection/Configuration.php
Expand Up @@ -37,6 +37,23 @@ public function getConfigTreeBuilder()
$organizeMigrationModes = $this->getOrganizeMigrationsModes();

$rootNode
->beforeNormalization()
->ifTrue(function($v) {
if(empty($v)) {
return true;
}
$firstConfigValue = array_shift($v);

return !is_array($firstConfigValue);
})
->then(function($v) {
$v = array('default_entity_manager' => $v);

return $v;
})
->end()
->useAttributeAsKey('name')
->prototype('array')
->children()
->scalarNode('dir_name')->defaultValue('%kernel.root_dir%/DoctrineMigrations')->cannotBeEmpty()->end()
->scalarNode('namespace')->defaultValue('Application\Migrations')->cannotBeEmpty()->end()
Expand Down

0 comments on commit 5678b24

Please sign in to comment.