diff --git a/.atoum.php b/.atoum.php index 605953e..7a58d33 100644 --- a/.atoum.php +++ b/.atoum.php @@ -1,6 +1,6 @@ bootstrapFile(__DIR__ . DIRECTORY_SEPARATOR . '.atoum.bootstrap.php'); diff --git a/.travis.yml b/.travis.yml index 695a1a3..737df1e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,14 +1,14 @@ language: php php: - - 7.1 - 7.2 - 7.3 + - 8.0 install: composer install -n script: - - bin/atoum + - bin/atoum -ncc notifications: email: diff --git a/Command/DeployActionCommand.php b/Command/DeployActionCommand.php index 8d75288..07bda50 100644 --- a/Command/DeployActionCommand.php +++ b/Command/DeployActionCommand.php @@ -2,17 +2,23 @@ namespace Spy\TimelineBundle\Command; -use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; +use Exception; +use InvalidArgumentException; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\DependencyInjection\ContainerAwareInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * This command will deploy each actions (see limit option) which * has PUBLISHED on status_wanted. */ -class DeployActionCommand extends ContainerAwareCommand +class DeployActionCommand extends Command implements ContainerAwareInterface { + private $container; + /** * {@inheritdoc} */ @@ -28,37 +34,48 @@ protected function configure() /** * {@inheritdoc} */ - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output):int { $limit = (int) $input->getOption('limit'); if ($limit < 1) { - throw new \InvalidArgumentException('Limit defined should be biggest than 0 ...'); + throw new InvalidArgumentException('Limit defined should be biggest than 0 ...'); } - $container = $this->getContainer(); - $actionManager = $container->get('spy_timeline.action_manager'); + $actionManager = $this->container->get('spy_timeline.action_manager'); $results = $actionManager->findActionsWithStatusWantedPublished($limit); $output->writeln(sprintf('There is %s action(s) to deploy', count($results))); - $deployer = $container->get('spy_timeline.spread.deployer'); + $deployer = $this->container->get('spy_timeline.spread.deployer'); foreach ($results as $action) { try { $deployer->deploy($action, $actionManager); $output->writeln(sprintf('Deploy action %s', $action->getId())); - } catch (\Exception $e) { + } catch (Exception $e) { $message = sprintf('[TIMELINE] Error during deploy action %s', $action->getId()); if (OutputInterface::VERBOSITY_VERBOSE <= $output->getVerbosity()) { $message .= sprintf('%s: %s', $message, $e->getMessage()); } - $container->get('logger')->crit($message); + $this->container->get('logger')->crit($message); $output->writeln(sprintf('%s', $message)); } } $output->writeln('Done'); + + return 0; + } + + /** + * @param ContainerInterface|null $container + * + * @return void + */ + public function setContainer(?ContainerInterface $container): void + { + $this->container = $container; } } diff --git a/Command/SpreadListCommand.php b/Command/SpreadListCommand.php index 0a15d70..bafa320 100644 --- a/Command/SpreadListCommand.php +++ b/Command/SpreadListCommand.php @@ -2,15 +2,19 @@ namespace Spy\TimelineBundle\Command; -use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; +use Symfony\Component\Console\Command\Command; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; +use Symfony\Component\DependencyInjection\ContainerAwareInterface; +use Symfony\Component\DependencyInjection\ContainerInterface; /** * This command will show all services which are defined as spread. */ -class SpreadListCommand extends ContainerAwareCommand +class SpreadListCommand extends Command implements ContainerAwareInterface { + private $container; + /** * {@inheritdoc} */ @@ -25,17 +29,23 @@ protected function configure() /** * {@inheritdoc} */ - protected function execute(InputInterface $input, OutputInterface $output) + protected function execute(InputInterface $input, OutputInterface $output): int { - $spreads = $this->getContainer() + $spreads = $this->container ->get('spy_timeline.spread.deployer') - ->getSpreads() - ; + ->getSpreads(); $output->writeln(sprintf('There is %s timeline spread(s) defined', count($spreads))); foreach ($spreads as $spread) { $output->writeln(sprintf('- %s', get_class($spread))); } + + return 0; + } + + public function setContainer(?ContainerInterface $container) + { + $this->container = $container; } } diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index fcb3879..52c43af 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -15,8 +15,8 @@ class Configuration implements ConfigurationInterface */ public function getConfigTreeBuilder() { - $tb = new TreeBuilder(); - $rootNode = $tb->root('spy_timeline'); + $tb = new TreeBuilder("spy_timeline"); + $rootNode = $tb->getRootNode(); $this->addDriverSection($rootNode); $this->addQueryBuilderSection($rootNode); diff --git a/Driver/Doctrine/AbstractActionManager.php b/Driver/Doctrine/AbstractActionManager.php index 3cf1938..afab16c 100644 --- a/Driver/Doctrine/AbstractActionManager.php +++ b/Driver/Doctrine/AbstractActionManager.php @@ -2,7 +2,7 @@ namespace Spy\TimelineBundle\Driver\Doctrine; -use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\Persistence\ObjectManager; use Spy\Timeline\Model\ActionInterface; use Spy\Timeline\ResultBuilder\ResultBuilderInterface; use Spy\Timeline\Driver\AbstractActionManager as BaseActionManager; diff --git a/Driver/Doctrine/AbstractTimelineManager.php b/Driver/Doctrine/AbstractTimelineManager.php index f29095b..a87fd5c 100644 --- a/Driver/Doctrine/AbstractTimelineManager.php +++ b/Driver/Doctrine/AbstractTimelineManager.php @@ -2,7 +2,7 @@ namespace Spy\TimelineBundle\Driver\Doctrine; -use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\ORM\EntityManager; use Spy\Timeline\Model\ActionInterface; use Spy\Timeline\Model\ComponentInterface; use Spy\Timeline\Model\TimelineInterface; @@ -11,7 +11,7 @@ class AbstractTimelineManager { /** - * @var ObjectManager + * @var EntityManager */ protected $objectManager; @@ -26,11 +26,11 @@ class AbstractTimelineManager protected $timelineClass; /** - * @param ObjectManager $objectManager objectManager + * @param EntityManager $objectManager objectManager * @param ResultBuilderInterface $resultBuilder resultBuilder * @param string $timelineClass timelineClass */ - public function __construct(ObjectManager $objectManager, ResultBuilderInterface $resultBuilder, $timelineClass) + public function __construct(EntityManager $objectManager, ResultBuilderInterface $resultBuilder, $timelineClass) { $this->objectManager = $objectManager; $this->resultBuilder = $resultBuilder; diff --git a/Driver/Doctrine/ODM/PostLoadListener.php b/Driver/Doctrine/ODM/PostLoadListener.php index 8dc3b9c..085cadd 100644 --- a/Driver/Doctrine/ODM/PostLoadListener.php +++ b/Driver/Doctrine/ODM/PostLoadListener.php @@ -3,7 +3,7 @@ namespace Spy\TimelineBundle\Driver\Doctrine\ODM; use Doctrine\Common\EventSubscriber; -use Doctrine\Common\Persistence\Mapping\MappingException; +use Doctrine\Persistence\Mapping\MappingException; use Doctrine\ODM\MongoDB\Event\LifecycleEventArgs; use Doctrine\ODM\MongoDB\DocumentNotFoundException; use Spy\Timeline\Model\ComponentInterface; diff --git a/Driver/Doctrine/ORM/PostLoadListener.php b/Driver/Doctrine/ORM/PostLoadListener.php index 2bd42c4..5a46416 100644 --- a/Driver/Doctrine/ORM/PostLoadListener.php +++ b/Driver/Doctrine/ORM/PostLoadListener.php @@ -3,7 +3,7 @@ namespace Spy\TimelineBundle\Driver\Doctrine\ORM; use Doctrine\Common\EventSubscriber; -use Doctrine\Common\Persistence\Mapping\MappingException; +use Doctrine\Persistence\Mapping\MappingException; use Doctrine\ORM\Event\LifecycleEventArgs; use Doctrine\ORM\EntityNotFoundException; use Spy\Timeline\Model\ComponentInterface; diff --git a/Driver/ORM/QueryBuilder/QueryBuilder.php b/Driver/ORM/QueryBuilder/QueryBuilder.php index 23630df..d4accac 100644 --- a/Driver/ORM/QueryBuilder/QueryBuilder.php +++ b/Driver/ORM/QueryBuilder/QueryBuilder.php @@ -8,7 +8,7 @@ use Spy\Timeline\Driver\QueryBuilder\QueryBuilderFactory; use Spy\Timeline\Driver\QueryBuilder\Criteria\Asserter; use Spy\Timeline\Driver\QueryBuilder\Criteria\Operator; -use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\Persistence\ObjectManager; use Spy\Timeline\ResultBuilder\ResultBuilderInterface; use Spy\TimelineBundle\Driver\ORM\QueryBuilder\Criteria\CriteriaCollection; diff --git a/Filter/DataHydrator/Locator/DoctrineODM.php b/Filter/DataHydrator/Locator/DoctrineODM.php index e01875b..e3fd832 100644 --- a/Filter/DataHydrator/Locator/DoctrineODM.php +++ b/Filter/DataHydrator/Locator/DoctrineODM.php @@ -3,7 +3,7 @@ namespace Spy\TimelineBundle\Filter\DataHydrator\Locator; use Spy\Timeline\Filter\DataHydrator\Locator\LocatorInterface; -use Doctrine\Common\Persistence\ManagerRegistry; +use Doctrine\Persistence\ManagerRegistry; class DoctrineODM implements LocatorInterface { @@ -13,7 +13,7 @@ class DoctrineODM implements LocatorInterface protected $registry; /** - * @param ManagerRegistry $registry registry + * @param ManagerRegistry|null $registry registry */ public function __construct(ManagerRegistry $registry = null) { diff --git a/Filter/DataHydrator/Locator/DoctrineORM.php b/Filter/DataHydrator/Locator/DoctrineORM.php index 313844d..40f5aff 100644 --- a/Filter/DataHydrator/Locator/DoctrineORM.php +++ b/Filter/DataHydrator/Locator/DoctrineORM.php @@ -4,8 +4,8 @@ use Doctrine\ORM\QueryBuilder; use Spy\Timeline\Filter\DataHydrator\Locator\LocatorInterface; -use Doctrine\Common\Persistence\ManagerRegistry; -use Doctrine\Common\Persistence\ObjectManager; +use Doctrine\Persistence\ManagerRegistry; +use Doctrine\Persistence\ObjectManager; class DoctrineORM implements LocatorInterface { diff --git a/ResolveComponent/DoctrineComponentDataResolver.php b/ResolveComponent/DoctrineComponentDataResolver.php index e8b1a79..b7dc561 100644 --- a/ResolveComponent/DoctrineComponentDataResolver.php +++ b/ResolveComponent/DoctrineComponentDataResolver.php @@ -2,10 +2,11 @@ namespace Spy\TimelineBundle\ResolveComponent; +use Doctrine\Persistence\ManagerRegistry; +use Doctrine\Persistence\Mapping\ClassMetadata; use Spy\Timeline\ResolveComponent\ValueObject\ResolvedComponentData; use Spy\Timeline\Exception\ResolveComponentDataException; use Spy\Timeline\ResolveComponent\ComponentDataResolverInterface; -use Doctrine\Common\Persistence\ManagerRegistry; use Spy\Timeline\ResolveComponent\ValueObject\ResolveComponentModelIdentifier; /** @@ -92,7 +93,7 @@ public function addRegistry(ManagerRegistry $manager) /** * @param string $class * - * @return \Doctrine\Common\Persistence\Mapping\ClassMetadata|null + * @return ClassMetadata|null */ protected function getClassMetadata($class) { @@ -102,6 +103,6 @@ protected function getClassMetadata($class) } } - return; + return null; } } diff --git a/Tests/Units/Command/DeployActionCommand.php b/Tests/Units/Command/DeployActionCommand.php index 56677f5..e4ce836 100644 --- a/Tests/Units/Command/DeployActionCommand.php +++ b/Tests/Units/Command/DeployActionCommand.php @@ -5,7 +5,7 @@ use Spy\TimelineBundle\Command\DeployActionCommand as TestedCommand; use Symfony\Component\Console\Application; use Symfony\Component\Console\Tester\CommandTester; -use mageekguy\atoum; +use atoum\atoum; class DeployActionCommand extends atoum\test { diff --git a/Tests/Units/Command/SpreadListCommand.php b/Tests/Units/Command/SpreadListCommand.php index 9841bec..4ab20e6 100644 --- a/Tests/Units/Command/SpreadListCommand.php +++ b/Tests/Units/Command/SpreadListCommand.php @@ -2,7 +2,7 @@ namespace Spy\TimelineBundle\Tests\Units\Command; -use mageekguy\atoum; +use atoum\atoum; use Spy\TimelineBundle\Command\SpreadListCommand as TestedCommand; use Symfony\Component\Console\Tester\CommandTester; use Symfony\Component\Console\Application; diff --git a/Tests/Units/DependencyInjection/Compiler/AddLocatorCompilerPass.php b/Tests/Units/DependencyInjection/Compiler/AddLocatorCompilerPass.php index 4c8f45a..255b8be 100644 --- a/Tests/Units/DependencyInjection/Compiler/AddLocatorCompilerPass.php +++ b/Tests/Units/DependencyInjection/Compiler/AddLocatorCompilerPass.php @@ -2,7 +2,7 @@ namespace Spy\TimelineBundle\Tests\Units\DependencyInjection\Compiler; -use mageekguy\atoum; +use atoum\atoum; use Spy\TimelineBundle\DependencyInjection\Compiler\AddLocatorCompilerPass as TestedModel; class AddLocatorCompilerPass extends atoum\test @@ -38,6 +38,9 @@ public function testProcess() ->and($this->calling($containerBuilder)->findTaggedServiceIds = function () use ($taggedServicesResult) { return $taggedServicesResult; }) + ->and($this->calling($definition)->addMethodCall = function () use ($definition) { + return $definition; + }) ->and($compiler = new TestedModel()) ->when($compiler->process($containerBuilder)) ->then( diff --git a/Tests/Units/DependencyInjection/Compiler/AddSpreadCompilerPass.php b/Tests/Units/DependencyInjection/Compiler/AddSpreadCompilerPass.php index 68d75a4..5749d8f 100644 --- a/Tests/Units/DependencyInjection/Compiler/AddSpreadCompilerPass.php +++ b/Tests/Units/DependencyInjection/Compiler/AddSpreadCompilerPass.php @@ -2,8 +2,9 @@ namespace Spy\TimelineBundle\Tests\Units\DependencyInjection\Compiler; -use mageekguy\atoum; +use atoum\atoum; use Spy\TimelineBundle\DependencyInjection\Compiler\AddSpreadCompilerPass as TestedModel; +use Symfony\Component\DependencyInjection\Alias; class AddSpreadCompilerPass extends atoum\test { @@ -17,7 +18,8 @@ public function testProcess() ->and($this->mockGenerator->orphanize('__construct')) ->and($this->mockGenerator->shuntParentClassCalls()) ->and($definition = new \mock\Symfony\Component\DependencyInjection\Definition()) - ->and($this->calling($containerBuilder)->getAlias = function ($alias) { + ->and($alias = new Alias(1, false)) + ->and($this->calling($containerBuilder)->getAlias = function () use ($alias) { return $alias; }) ->and($this->calling($containerBuilder)->getDefinition = function () use ($definition) { @@ -26,6 +28,9 @@ public function testProcess() ->and($this->calling($containerBuilder)->findTaggedServiceIds = function () use ($taggedServicesResult) { return $taggedServicesResult; }) + ->and($this->calling($definition)->addMethodCall = function () use ($definition) { + return $definition; + }) ->and($compiler = new TestedModel()) ->when($compiler->process($containerBuilder)) ->then( diff --git a/Tests/Units/DependencyInjection/Configuration.php b/Tests/Units/DependencyInjection/Configuration.php index 371ae26..979af33 100644 --- a/Tests/Units/DependencyInjection/Configuration.php +++ b/Tests/Units/DependencyInjection/Configuration.php @@ -2,7 +2,7 @@ namespace Spy\TimelineBundle\Tests\Units\DependencyInjection; -use mageekguy\atoum; +use atoum\atoum; use Spy\TimelineBundle\DependencyInjection\Configuration as ConfigurationTested; use Symfony\Component\Config\Definition\Processor; @@ -43,7 +43,7 @@ public function testMultipleDrivers() }) ->isInstanceOf('\Symfony\Component\Config\Definition\Exception\InvalidConfigurationException') ->hasMessage('Invalid configuration for path "spy_timeline.drivers": Please define only one driver.') - ; + ; } public function processConfiguration($config) diff --git a/Tests/Units/Driver/ORM/ActionManager.php b/Tests/Units/Driver/ORM/ActionManager.php index c4258a7..02f83fa 100644 --- a/Tests/Units/Driver/ORM/ActionManager.php +++ b/Tests/Units/Driver/ORM/ActionManager.php @@ -2,7 +2,8 @@ namespace Spy\TimelineBundle\Tests\Units\Driver\ORM; -use mageekguy\atoum; +use Doctrine\Persistence\ObjectManager; +use atoum\atoum; use Spy\TimelineBundle\Driver\ORM\ActionManager as TestedModel; use Spy\Timeline\ResolveComponent\ValueObject\ResolvedComponentData; use Spy\Timeline\ResolveComponent\ValueObject\ResolveComponentModelIdentifier; @@ -15,8 +16,10 @@ public function testCreateComponent() $identifier = 0; $resolve = new ResolveComponentModelIdentifier($model, $identifier); + $objectManager = $this->newMockInstance(ObjectManager::class); + $this - ->and($objectManager = new \mock\Doctrine\Common\Persistence\ObjectManager()) + ->and($objectManager) ->and($resultBuilder = new \mock\Spy\Timeline\ResultBuilder\ResultBuilderInterface()) ->and($componentDataResolver = new \mock\Spy\Timeline\ResolveComponent\ComponentDataResolverInterface()) ->and($this->calling($componentDataResolver)->resolveComponentData = function () use ($model, $identifier) { @@ -46,11 +49,14 @@ public function testfindOrCreateComponentWithExistingComponent() { $resolve = new ResolveComponentModelIdentifier('user', 1); $resolvedComponentData = new ResolvedComponentData('user', 1); + + $objectManager = $this->newMockInstance(ObjectManager::class); + $this ->and($this->mockGenerator->orphanize('__construct')) ->and($this->mockGenerator->shuntParentClassCalls()) ->and($entityRepository = new \mock\Doctrine\ORM\EntityRepository()) - ->and($objectManager = new \mock\Doctrine\Common\Persistence\ObjectManager()) + ->and($objectManager) ->and($resultBuilder = new \mock\Spy\Timeline\ResultBuilder\ResultBuilderInterface()) ->and($componentDataResolver = new \mock\Spy\Timeline\ResolveComponent\ComponentDataResolverInterface()) ->and($queryBuilder = new \mock\Doctrine\Orm\QueryBuilder()) diff --git a/Tests/Units/ResolveComponent/DoctrineComponentDataResolver.php b/Tests/Units/ResolveComponent/DoctrineComponentDataResolver.php index 9fac85f..29dd414 100644 --- a/Tests/Units/ResolveComponent/DoctrineComponentDataResolver.php +++ b/Tests/Units/ResolveComponent/DoctrineComponentDataResolver.php @@ -2,7 +2,8 @@ namespace Spy\TimelineBundle\Tests\Units\ResolveComponent; -use mageekguy\atoum; +use Doctrine\Persistence\ManagerRegistry; +use atoum\atoum; use Spy\TimelineBundle\ResolveComponent\DoctrineComponentDataResolver as TestedModel; use Spy\Timeline\ResolveComponent\TestHelper\User; use Spy\Timeline\ResolveComponent\ValueObject\ResolveComponentModelIdentifier; @@ -14,11 +15,13 @@ public function testObjectManagedByDoctrine() $object = new User(5); $resolve = new ResolveComponentModelIdentifier($object); - $this->if($classMetadata = new \mock\Doctrine\Common\Persistence\Mapping\ClassMetadata()) - ->and($managerRegistry = new \mock\Doctrine\Common\Persistence\ManagerRegistry()) + $managerRegistry = $this->newMockInstance(ManagerRegistry::class); + + $this->if($classMetadata = new \mock\Doctrine\Persistence\Mapping\ClassMetadata()) + ->and($managerRegistry) ->and($this->mockGenerator->orphanize('__construct')) ->and($this->mockGenerator->shuntParentClassCalls()) - ->and($objectManager = new \mock\Doctrine\Common\Persistence\ObjectManager()) + ->and($objectManager = new \mock\Doctrine\Persistence\ObjectManager()) ->and($this->calling($managerRegistry)->getManagerForClass = function () use ($objectManager) { return $objectManager; }) @@ -50,7 +53,9 @@ public function testObjectNotManagedByDoctrine() $object = new User(5); $resolve = new ResolveComponentModelIdentifier($object); - $this->if($managerRegistry = new \mock\Doctrine\Common\Persistence\ManagerRegistry()) + $managerRegistry = $this->newMockInstance(ManagerRegistry::class); + + $this->if($managerRegistry) ->and($resolver = new TestedModel()) ->and($resolver->addRegistry($managerRegistry)) ->when($result = $resolver->resolveComponentData($resolve)) @@ -67,7 +72,9 @@ public function testObjectNotManagedByDoctrineWithoutGetIdMethod() $object = new \stdClass(); $resolve = new ResolveComponentModelIdentifier($object); - $this->if($managerRegistry = new \mock\Doctrine\Common\Persistence\ManagerRegistry()) + $managerRegistry = $this->newMockInstance(ManagerRegistry::class); + + $this->if($managerRegistry) ->and($resolver = new TestedModel()) ->and($resolver->addRegistry($managerRegistry)) ->exception(function () use ($resolver, $resolve) { @@ -84,7 +91,9 @@ public function testStringModelAndIdentifierGiven() $identifier = array('foo' => 'bar'); $resolve = new ResolveComponentModelIdentifier($model, $identifier); - $this->if($managerRegistry = new \mock\Doctrine\Common\Persistence\ManagerRegistry()) + $managerRegistry = $this->newMockInstance(ManagerRegistry::class); + + $this->if($managerRegistry) ->and($resolver = new TestedModel()) ->and($resolver->addRegistry($managerRegistry)) ->when($result = $resolver->resolveComponentData($resolve)) diff --git a/Tests/Units/SpyTimelineBundle.php b/Tests/Units/SpyTimelineBundle.php index 000961b..5bd18a5 100644 --- a/Tests/Units/SpyTimelineBundle.php +++ b/Tests/Units/SpyTimelineBundle.php @@ -2,7 +2,7 @@ namespace Spy\TimelineBundle\Tests\Units; -use mageekguy\atoum; +use atoum\atoum; use Spy\TimelineBundle\SpyTimelineBundle as TestedModel; use Spy\TimelineBundle\DependencyInjection\Compiler\AddLocatorCompilerPass; use Spy\TimelineBundle\DependencyInjection\Compiler\AddDeliveryMethodCompilerPass; diff --git a/composer.json b/composer.json index 0f26415..dbf3527 100644 --- a/composer.json +++ b/composer.json @@ -9,18 +9,25 @@ "name": "Community contributors", "homepage": "https://github.com/stephpy/timeline-bundle/contributors" }], + "repositories": [ + { + "type": "vcs", + "url": "https://github.com/Riverline/timeline" + } + ], "require": { - "php": "^7.1", - "stephpy/timeline": "^1.2", - "symfony/framework-bundle": "~2.0|~3.0|~4.0", - "symfony/options-resolver": "~2.0|~3.0|~4.0" + "php": "^7.2 | ^8.0", + "stephpy/timeline": "dev-master", + "symfony/framework-bundle": "~5.0", + "symfony/options-resolver": "~5.0" }, "require-dev": { - "atoum/atoum": "1.*|3.*", + "atoum/atoum": "~4.0", "doctrine/orm": "^2.6", - "symfony/console": "~2.0|~3.0|~4.0", - "symfony/twig-bundle": "~2.8.13|~3.0|~4.0", - "symfony/expression-language": "~2.0|~3.0|~4.0" + "symfony/console": "~5.0", + "symfony/twig-bundle": "~5.0", + "symfony/expression-language": "~5.0", + "doctrine/persistence": "~2.1" }, "suggest": { "symfony/console": "List spreads and deploy timelines via a command",