diff --git a/automatic_updates.services.yml b/automatic_updates.services.yml index 277b385801f40d6cae87afbbff63faaa10477e0a..6e06bb184986b93e107c70d3005e226d88e60d3e 100644 --- a/automatic_updates.services.yml +++ b/automatic_updates.services.yml @@ -1,4 +1,7 @@ services: + _defaults: + autowire: true + automatic_updates.route_subscriber: class: Drupal\automatic_updates\Routing\RouteSubscriber tags: diff --git a/src/Validator/RequestedUpdateValidator.php b/src/Validator/RequestedUpdateValidator.php index 7ac68e3a6dabb896d3b8818019b212df14710e44..ffed086bdbf2c96378eaf78b030e70f9f4617ba2 100644 --- a/src/Validator/RequestedUpdateValidator.php +++ b/src/Validator/RequestedUpdateValidator.php @@ -7,7 +7,9 @@ namespace Drupal\automatic_updates\Validator; use Composer\Semver\Semver; use Drupal\automatic_updates\Updater; use Drupal\Core\StringTranslation\StringTranslationTrait; +use Drupal\package_manager\ComposerInspector; use Drupal\package_manager\Event\PreApplyEvent; +use Drupal\package_manager\PathLocator; use Symfony\Component\EventDispatcher\EventSubscriberInterface; /** @@ -17,6 +19,19 @@ class RequestedUpdateValidator implements EventSubscriberInterface { use StringTranslationTrait; + /** + * Constructs a RequestedUpdateValidator object. + * + * @param \Drupal\package_manager\ComposerInspector $composerInspector + * The Composer inspector service. + * @param \Drupal\package_manager\PathLocator $pathLocator + * The path locator service. + */ + public function __construct( + private ComposerInspector $composerInspector, + private PathLocator $pathLocator, + ) {} + /** * Validates that requested packages have been updated to the right version. * @@ -29,7 +44,10 @@ class RequestedUpdateValidator implements EventSubscriberInterface { return; } $requested_package_versions = $stage->getPackageVersions(); - $changed_stage_packages = $stage->getStageComposer()->getPackagesWithDifferentVersionsIn($stage->getActiveComposer()); + $active = $this->composerInspector->getInstalledPackagesList($this->pathLocator->getProjectRoot()); + $staged = $this->composerInspector->getInstalledPackagesList($event->stage->getStageDirectory()); + $changed_stage_packages = $staged->getPackagesWithDifferentVersionsIn($active)->getArrayCopy(); + if (empty($changed_stage_packages)) { $event->addError([$this->t('No updates detected in the staging area.')]); return; @@ -40,7 +58,7 @@ class RequestedUpdateValidator implements EventSubscriberInterface { foreach (['production', 'dev'] as $package_type) { foreach ($requested_package_versions[$package_type] as $requested_package_name => $requested_version) { if (array_key_exists($requested_package_name, $changed_stage_packages)) { - $staged_version = $changed_stage_packages[$requested_package_name]->getPrettyVersion(); + $staged_version = $changed_stage_packages[$requested_package_name]->version; if (!Semver::satisfies($staged_version, $requested_version)) { $event->addError([ $this->t(