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