Skip to content

Commit f6e64ad

Browse files
authored
Merge f3c5739 into 04109e6
2 parents 04109e6 + f3c5739 commit f6e64ad

21 files changed

+5069
-190
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
1-
composer.lock
21
/vendor/
2+
/.phpcs-cache
3+

.scrutinizer.yml

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
build:
2+
nodes:
3+
analysis:
4+
environment:
5+
php:
6+
version: 7.1
7+
cache:
8+
disabled: false
9+
directories:
10+
- ~/.composer/cache
11+
project_setup:
12+
override: true
13+
tests:
14+
override:
15+
- php-scrutinizer-run
16+
- phpcs-run
17+
dependencies:
18+
override:
19+
- composer install --ignore-platform-reqs --no-interaction
20+
21+
tools:
22+
external_code_coverage:
23+
timeout: 600
24+
25+
build_failure_conditions:
26+
- 'elements.rating(<= C).new.exists' # No new classes/methods with a rating of C or worse allowed
27+
- 'issues.label("coding-style").new.exists' # No new coding style issues allowed
28+
- 'issues.severity(>= MAJOR).new.exists' # New issues of major or higher severity
29+
- 'project.metric_change("scrutinizer.test_coverage", < 0)' # Code Coverage decreased from previous inspection
30+

.travis.yml

Lines changed: 27 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3,42 +3,53 @@ sudo: false
33
language: php
44

55
php:
6-
- 5.4
7-
- 5.5
8-
- 5.6
9-
- 7.0
106
- 7.1
117
- 7.2
128
- nightly
139

10+
cache:
11+
directories:
12+
- $HOME/.composer/cache
13+
1414
before_install:
1515
- mv ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini{,.disabled} || echo "xdebug not available"
16-
- composer self-update
16+
- travis_retry composer self-update
1717

18-
install: travis_retry composer update --prefer-dist
18+
install:
19+
- rm composer.lock
20+
- travis_retry composer update --prefer-dist
1921

2022
script:
21-
- ./vendor/bin/phpunit -v
23+
- ./vendor/bin/phpunit
2224

2325
jobs:
26+
allow_failures:
27+
- php: nightly
28+
2429
include:
2530
- stage: Test
2631
env: DEPENDENCIES=low
27-
install: travis_retry composer update --prefer-dist --prefer-lowest
32+
install:
33+
- rm composer.lock
34+
- travis_retry composer update --prefer-dist --prefer-lowest
2835

29-
- stage: Coverage
36+
- stage: Test
37+
env: COVERAGE
3038
before_script:
3139
- mv ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/xdebug.ini{.disabled,}
3240
- if [[ ! $(php -m | grep -si xdebug) ]]; then echo "xdebug required for coverage"; exit 1; fi
3341
script:
34-
- ./vendor/bin/phpunit -v --coverage-clover ./build/logs/clover.xml
42+
- ./vendor/bin/phpunit --coverage-clover clover.xml
3543
after_script:
3644
- wget https://scrutinizer-ci.com/ocular.phar
37-
- php ocular.phar code-coverage:upload --format=php-clover build/logs/clover.xml
45+
- php ocular.phar code-coverage:upload --format=php-clover clover.xml
3846

39-
allow_failures:
40-
- php: nightly
47+
- stage: Code Quality
48+
env: CODING_STANDARDS
49+
install: travis_retry composer install --prefer-dist
50+
script: ./vendor/bin/phpcs
4151

42-
cache:
43-
directories:
44-
- $HOME/.composer/cache
52+
- stage: Code Quality
53+
env: STATIC_ANALYSIS
54+
install: travis_retry composer install --prefer-dist
55+
script: vendor/bin/phpstan analyse -l 7 -c phpstan.neon lib

Command/DoctrineCommand.php

Lines changed: 56 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,96 @@
11
<?php
22

3+
declare(strict_types=1);
34

45
namespace Doctrine\Bundle\MigrationsBundle\Command;
56

67
use Doctrine\Bundle\DoctrineBundle\Command\DoctrineCommand as BaseCommand;
7-
use Doctrine\DBAL\Migrations\Configuration\AbstractFileConfiguration;
8-
use Doctrine\DBAL\Migrations\Configuration\Configuration;
8+
use Doctrine\Migrations\Configuration\AbstractFileConfiguration;
9+
use Doctrine\Migrations\Configuration\Configuration;
10+
use Doctrine\Migrations\Version\Version;
11+
use ErrorException;
912
use Symfony\Component\DependencyInjection\ContainerAwareInterface;
1013
use Symfony\Component\DependencyInjection\ContainerInterface;
1114
use Symfony\Component\DependencyInjection\Exception\InvalidArgumentException;
15+
use function error_get_last;
16+
use function is_dir;
17+
use function method_exists;
18+
use function mkdir;
19+
use function preg_match;
20+
use function str_replace;
1221

1322
/**
1423
* Base class for Doctrine console commands to extend from.
15-
*
16-
* @author Fabien Potencier <fabien@symfony.com>
1724
*/
1825
abstract class DoctrineCommand extends BaseCommand
1926
{
20-
public static function configureMigrations(ContainerInterface $container, Configuration $configuration)
27+
public static function configureMigrations(ContainerInterface $container, Configuration $configuration) : void
2128
{
22-
if (!$configuration->getMigrationsDirectory()) {
29+
$dir = $configuration->getMigrationsDirectory();
30+
31+
if ($dir === null) {
2332
$dir = $container->getParameter('doctrine_migrations.dir_name');
24-
if (!is_dir($dir) && !@mkdir($dir, 0777, true) && !is_dir($dir)) {
33+
34+
if (! is_dir($dir) && ! @mkdir($dir, 0777, true) && ! is_dir($dir)) {
2535
$error = error_get_last();
26-
throw new \ErrorException($error['message']);
36+
37+
throw new ErrorException(sprintf(
38+
'Failed to create directory %s with message %s', $dir, $error['message']
39+
));
2740
}
41+
2842
$configuration->setMigrationsDirectory($dir);
2943
} else {
30-
$dir = $configuration->getMigrationsDirectory();
3144
// class Kernel has method getKernelParameters with some of the important path parameters
32-
$pathPlaceholderArray = array('kernel.root_dir', 'kernel.cache_dir', 'kernel.logs_dir');
45+
$pathPlaceholderArray = ['kernel.root_dir', 'kernel.cache_dir', 'kernel.logs_dir'];
46+
3347
foreach ($pathPlaceholderArray as $pathPlaceholder) {
34-
if ($container->hasParameter($pathPlaceholder) && preg_match('/\%'.$pathPlaceholder.'\%/', $dir)) {
35-
$dir = str_replace('%'.$pathPlaceholder.'%', $container->getParameter($pathPlaceholder), $dir);
48+
if (! $container->hasParameter($pathPlaceholder) || ! preg_match('/\%' . $pathPlaceholder . '\%/', $dir)) {
49+
continue;
3650
}
51+
52+
$dir = str_replace('%' . $pathPlaceholder . '%', $container->getParameter($pathPlaceholder), $dir);
3753
}
38-
if (!is_dir($dir) && !@mkdir($dir, 0777, true) && !is_dir($dir)) {
54+
55+
if (! is_dir($dir) && ! @mkdir($dir, 0777, true) && ! is_dir($dir)) {
3956
$error = error_get_last();
40-
throw new \ErrorException($error['message']);
57+
58+
throw new ErrorException(sprintf(
59+
'Failed to create directory %s with message %s', $dir, $error['message']
60+
));
4161
}
62+
4263
$configuration->setMigrationsDirectory($dir);
4364
}
44-
if (!$configuration->getMigrationsNamespace()) {
65+
66+
if ($configuration->getMigrationsNamespace() === null) {
4567
$configuration->setMigrationsNamespace($container->getParameter('doctrine_migrations.namespace'));
4668
}
47-
if (!$configuration->getName()) {
69+
70+
if ($configuration->getName() === null) {
4871
$configuration->setName($container->getParameter('doctrine_migrations.name'));
4972
}
73+
5074
// For backward compatibility, need use a table from parameters for overwrite the default configuration
51-
if (!($configuration instanceof AbstractFileConfiguration) || !$configuration->getMigrationsTableName()) {
75+
if (! ($configuration instanceof AbstractFileConfiguration) || $configuration->getMigrationsTableName() === '') {
5276
$configuration->setMigrationsTableName($container->getParameter('doctrine_migrations.table_name'));
5377
}
78+
5479
// Migrations is not register from configuration loader
55-
if (!($configuration instanceof AbstractFileConfiguration)) {
56-
$configuration->registerMigrationsFromDirectory($configuration->getMigrationsDirectory());
80+
if (! ($configuration instanceof AbstractFileConfiguration)) {
81+
$migrationsDirectory = $configuration->getMigrationsDirectory();
82+
83+
if ($migrationsDirectory !== null) {
84+
$configuration->registerMigrationsFromDirectory($migrationsDirectory);
85+
}
5786
}
5887

59-
if (method_exists($configuration, 'getCustomTemplate') && !$configuration->getCustomTemplate()) {
88+
if (method_exists($configuration, 'getCustomTemplate') && $configuration->getCustomTemplate() === null) {
6089
$configuration->setCustomTemplate($container->getParameter('doctrine_migrations.custom_template'));
6190
}
6291

6392
$organizeMigrations = $container->getParameter('doctrine_migrations.organize_migrations');
93+
6494
switch ($organizeMigrations) {
6595
case Configuration::VERSIONS_ORGANIZATION_BY_YEAR:
6696
$configuration->setMigrationsAreOrganizedByYear(true);
@@ -81,18 +111,19 @@ public static function configureMigrations(ContainerInterface $container, Config
81111
}
82112

83113
/**
84-
* @param ContainerInterface $container
85-
* @param array $versions
114+
* @param Version[] $versions
86115
*
87116
* Injects the container to migrations aware of it
88117
*/
89-
private static function injectContainerToMigrations(ContainerInterface $container, array $versions)
118+
private static function injectContainerToMigrations(ContainerInterface $container, array $versions) : void
90119
{
91120
foreach ($versions as $version) {
92121
$migration = $version->getMigration();
93-
if ($migration instanceof ContainerAwareInterface) {
94-
$migration->setContainer($container);
122+
if (! ($migration instanceof ContainerAwareInterface)) {
123+
continue;
95124
}
125+
126+
$migration->setContainer($container);
96127
}
97128
}
98129
}
Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,63 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace Doctrine\Bundle\MigrationsBundle\Command\Helper;
46

57
use Doctrine\Bundle\DoctrineBundle\Command\Proxy\DoctrineCommandHelper as BaseDoctrineCommandHelper;
8+
use Doctrine\Bundle\DoctrineBundle\Registry;
69
use Doctrine\DBAL\Sharding\PoolingShardConnection;
10+
use Doctrine\DBAL\Tools\Console\Helper\ConnectionHelper;
11+
use LogicException;
712
use Symfony\Bundle\FrameworkBundle\Console\Application;
813
use Symfony\Component\Console\Input\InputInterface;
14+
use function count;
15+
use function sprintf;
916

1017
/**
1118
* Provides some helper and convenience methods to configure doctrine commands in the context of bundles
1219
* and multiple connections/entity managers.
13-
*
14-
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
1520
*/
1621
abstract class DoctrineCommandHelper extends BaseDoctrineCommandHelper
1722
{
18-
public static function setApplicationHelper(Application $application, InputInterface $input)
23+
public static function setApplicationHelper(Application $application, InputInterface $input) : void
1924
{
2025
$container = $application->getKernel()->getContainer();
21-
$doctrine = $container->get('doctrine');
26+
27+
/** @var Registry $doctrine */
28+
$doctrine = $container->get('doctrine');
29+
2230
$managerNames = $doctrine->getManagerNames();
2331

24-
if ($input->getOption('db') || empty($managerNames)) {
32+
if ($input->getOption('db') !== null || count($managerNames) === 0) {
2533
self::setApplicationConnection($application, $input->getOption('db'));
2634
} else {
2735
self::setApplicationEntityManager($application, $input->getOption('em'));
2836
}
2937

30-
if ($input->getOption('shard')) {
31-
$connection = $application->getHelperSet()->get('db')->getConnection();
32-
if (!$connection instanceof PoolingShardConnection) {
33-
if (empty($managerNames)) {
34-
throw new \LogicException(sprintf("Connection '%s' must implement shards configuration.", $input->getOption('db')));
35-
} else {
36-
throw new \LogicException(sprintf("Connection of EntityManager '%s' must implement shards configuration.", $input->getOption('em')));
37-
}
38+
if ($input->getOption('shard') === null) {
39+
return;
40+
}
41+
42+
/** @var ConnectionHelper $dbHelper */
43+
$dbHelper = $application->getHelperSet()->get('db');
44+
45+
$connection = $dbHelper->getConnection();
46+
47+
if (! $connection instanceof PoolingShardConnection) {
48+
if (count($managerNames) === 0) {
49+
throw new LogicException(sprintf(
50+
"Connection '%s' must implement shards configuration.",
51+
$input->getOption('db')
52+
));
3853
}
3954

40-
$connection->connect($input->getOption('shard'));
55+
throw new LogicException(sprintf(
56+
"Connection of EntityManager '%s' must implement shards configuration.",
57+
$input->getOption('em')
58+
));
4159
}
60+
61+
$connection->connect($input->getOption('shard'));
4262
}
4363
}
Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
<?php
22

3+
declare(strict_types=1);
34

45
namespace Doctrine\Bundle\MigrationsBundle\Command;
56

6-
use Doctrine\DBAL\Migrations\Tools\Console\Command\DiffCommand;
7+
use Doctrine\Migrations\Tools\Console\Command\DiffCommand;
8+
use Symfony\Bundle\FrameworkBundle\Console\Application;
79
use Symfony\Component\Console\Input\InputInterface;
810
use Symfony\Component\Console\Input\InputOption;
911
use Symfony\Component\Console\Output\OutputInterface;
@@ -12,12 +14,10 @@
1214
* Command for generate migration classes by comparing your current database schema
1315
* to your mapping information.
1416
*
15-
* @author Fabien Potencier <fabien@symfony.com>
16-
* @author Jonathan H. Wage <jonwage@gmail.com>
1717
*/
1818
class MigrationsDiffDoctrineCommand extends DiffCommand
1919
{
20-
protected function configure()
20+
protected function configure() : void
2121
{
2222
parent::configure();
2323

@@ -29,13 +29,16 @@ protected function configure()
2929
;
3030
}
3131

32-
public function execute(InputInterface $input, OutputInterface $output)
32+
public function initialize(InputInterface $input, OutputInterface $output) : void
3333
{
34-
Helper\DoctrineCommandHelper::setApplicationHelper($this->getApplication(), $input);
34+
/** @var Application $application */
35+
$application = $this->getApplication();
36+
37+
Helper\DoctrineCommandHelper::setApplicationHelper($application, $input);
3538

3639
$configuration = $this->getMigrationConfiguration($input, $output);
37-
DoctrineCommand::configureMigrations($this->getApplication()->getKernel()->getContainer(), $configuration);
40+
DoctrineCommand::configureMigrations($application->getKernel()->getContainer(), $configuration);
3841

39-
return parent::execute($input, $output);
42+
parent::initialize($input, $output);
4043
}
4144
}

0 commit comments

Comments
 (0)