From a5699e659bcc6692ab2607a7b920c870d1b1c182 Mon Sep 17 00:00:00 2001 From: Wim Leers <44946-wimleers@users.noreply.drupalcode.org> Date: Tue, 7 Mar 2023 15:09:47 +0000 Subject: [PATCH] Issue #3345769 by Wim Leers, tedbow, phenaproxima: RequestedUpdateValidator should use ComposerInspector instead of ComposerUtility --- automatic_updates.services.yml | 3 +++ src/Validator/RequestedUpdateValidator.php | 22 ++++++++++++++++++++-- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/automatic_updates.services.yml b/automatic_updates.services.yml index 277b385801..6e06bb1849 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 7ac68e3a6d..ffed086bdb 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( -- GitLab