diff --git a/automatic_updates.services.yml b/automatic_updates.services.yml index c61b581d9735fdd26e630956e5d5183650bebb1c..4ad9a1001c01edd8701e3e86c92c0d5057009bb4 100644 --- a/automatic_updates.services.yml +++ b/automatic_updates.services.yml @@ -18,12 +18,6 @@ services: - '@package_manager.cleaner' - '@event_dispatcher' - '@tempstore.shared' - automatic_updates.update_refresh_subscriber: - class: Drupal\automatic_updates\Event\UpdateRefreshSubscriber - arguments: - - '@update.manager' - tags: - - { name: event_subscriber } automatic_updates.excluded_paths_subscriber: class: Drupal\automatic_updates\Event\ExcludedPathsSubscriber arguments: diff --git a/src/Event/UpdateRefreshSubscriber.php b/package_manager/src/EventSubscriber/UpdateDataSubscriber.php similarity index 70% rename from src/Event/UpdateRefreshSubscriber.php rename to package_manager/src/EventSubscriber/UpdateDataSubscriber.php index a336783a2dd6610ad925e8fae8fcea266308d2f4..5b422b4be7621b56306dfc1d7678cf7aa3633b26 100644 --- a/src/Event/UpdateRefreshSubscriber.php +++ b/package_manager/src/EventSubscriber/UpdateDataSubscriber.php @@ -1,15 +1,15 @@ <?php -namespace Drupal\automatic_updates\Event; +namespace Drupal\package_manager\EventSubscriber; use Drupal\package_manager\Event\PostApplyEvent; use Drupal\update\UpdateManagerInterface; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** - * Clears stale update data once a staged update has been committed. + * Clears stale update data once staged changes have been applied. */ -class UpdateRefreshSubscriber implements EventSubscriberInterface { +class UpdateDataSubscriber implements EventSubscriberInterface { /** * The update manager service. @@ -30,6 +30,10 @@ class UpdateRefreshSubscriber implements EventSubscriberInterface { /** * Clears stale update data. + * + * This will always run after any staging area is applied to the active + * directory, since it's likely that core and/or multiple extensions have been + * added, removed, or updated. */ public function clearData(): void { $this->updateManager->refreshUpdateData(); diff --git a/package_manager/src/PackageManagerServiceProvider.php b/package_manager/src/PackageManagerServiceProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..3d74d54d355c2bd60c9115d47a3af4a8805167dc --- /dev/null +++ b/package_manager/src/PackageManagerServiceProvider.php @@ -0,0 +1,31 @@ +<?php + +namespace Drupal\package_manager; + +use Drupal\Core\DependencyInjection\ContainerBuilder; +use Drupal\Core\DependencyInjection\ServiceProviderBase; +use Drupal\package_manager\EventSubscriber\UpdateDataSubscriber; +use Symfony\Component\DependencyInjection\Reference; + +/** + * Defines dynamic container services for Package Manager. + */ +class PackageManagerServiceProvider extends ServiceProviderBase { + + /** + * {@inheritdoc} + */ + public function register(ContainerBuilder $container) { + parent::register($container); + + if (array_key_exists('update', $container->getParameter('container.modules'))) { + $container->register('package_manager.update_data_subscriber') + ->setClass(UpdateDataSubscriber::class) + ->setArguments([ + new Reference('update.manager'), + ]) + ->addTag('event_subscriber'); + } + } + +} diff --git a/src/Validator/StagedProjectsValidator.php b/src/Validator/StagedProjectsValidator.php index 71d003e19db15d98526e36a6bac8977e8bce5639..c3ad1e878bb680a1cc53d5f84207a3ac05a6662c 100644 --- a/src/Validator/StagedProjectsValidator.php +++ b/src/Validator/StagedProjectsValidator.php @@ -2,6 +2,7 @@ namespace Drupal\automatic_updates\Validator; +use Drupal\automatic_updates\Updater; use Drupal\package_manager\Event\PreApplyEvent; use Drupal\Core\StringTranslation\StringTranslationTrait; use Drupal\Core\StringTranslation\TranslationInterface; @@ -32,6 +33,11 @@ final class StagedProjectsValidator implements EventSubscriberInterface { */ public function validateStagedProjects(PreApplyEvent $event): void { $stage = $event->getStage(); + // We only want to do this check if the stage belongs to Automatic Updates. + if (!$stage instanceof Updater) { + return; + } + try { $active_packages = $stage->getActiveComposer()->getDrupalExtensionPackages(); $staged_packages = $stage->getStageComposer()->getDrupalExtensionPackages();