diff --git a/automatic_updates_extensions/automatic_updates_extensions.services.yml b/automatic_updates_extensions/automatic_updates_extensions.services.yml index 12e84a9ade7d6fe6ec48794d3977b4beb0452f50..21e95bc99167a73d703f348278894ef7d48ef708 100644 --- a/automatic_updates_extensions/automatic_updates_extensions.services.yml +++ b/automatic_updates_extensions/automatic_updates_extensions.services.yml @@ -2,6 +2,7 @@ services: automatic_updates_extensions.updater: class: Drupal\automatic_updates_extensions\ExtensionUpdater arguments: + - '@package_manager.composer_inspector' - '@package_manager.path_locator' - '@package_manager.beginner' - '@package_manager.stager' diff --git a/automatic_updates_extensions/src/ExtensionUpdater.php b/automatic_updates_extensions/src/ExtensionUpdater.php index 7cae2d5fcd169529e7fb880b57a87bfd41f1f187..fc3813f67fb2898f7c0a78c344173d6198be7c8c 100644 --- a/automatic_updates_extensions/src/ExtensionUpdater.php +++ b/automatic_updates_extensions/src/ExtensionUpdater.php @@ -5,6 +5,7 @@ declare(strict_types = 1); namespace Drupal\automatic_updates_extensions; use Drupal\Core\StringTranslation\TranslatableMarkup; +use Drupal\package_manager\ComposerInspector; use Drupal\package_manager\LegacyVersionUtility; use Drupal\package_manager\Stage; @@ -17,6 +18,18 @@ use Drupal\package_manager\Stage; */ class ExtensionUpdater extends Stage { + /** + * Constructs a new ExtensionUpdater object. + * + * @param \Drupal\package_manager\ComposerInspector $composerInspector + * The Composer inspector service. + * @param mixed ...$arguments + * Additional arguments to pass to the parent constructor. + */ + public function __construct(protected ComposerInspector $composerInspector, mixed ...$arguments) { + parent::__construct(...$arguments); + } + /** * Begins the update. * @@ -33,29 +46,27 @@ class ExtensionUpdater extends Stage { if (empty($project_versions)) { throw new \InvalidArgumentException("No projects to begin the update"); } - $composer = $this->getActiveComposer(); $package_versions = [ 'production' => [], 'dev' => [], ]; - $require_dev = $composer->getComposer() - ->getPackage() - ->getDevRequires(); - $installed_packages = $composer->getInstalledPackages(); + $project_root = $this->pathLocator->getProjectRoot(); + $info = $this->composerInspector->getRootPackageInfo($project_root); + $installed_packages = $this->composerInspector->getInstalledPackagesList($project_root); foreach ($project_versions as $project_name => $version) { - $package = $composer->getPackageForProject($project_name); + $package = $installed_packages->getPackageByDrupalProjectName($project_name); if (empty($package)) { throw new \InvalidArgumentException("The project $project_name is not a Drupal project known to Composer and cannot be updated."); } // We don't support updating install profiles. - if ($installed_packages[$package]->getType() === 'drupal-profile') { + if ($package->type === 'drupal-profile') { throw new \InvalidArgumentException("The project $project_name cannot be updated because updating install profiles is not supported."); } - $group = array_key_exists($package, $require_dev) ? 'dev' : 'production'; - $package_versions[$group][$package] = LegacyVersionUtility::convertToSemanticVersion($version); + $group = isset($info['devRequires'][$package->name]) ? 'dev' : 'production'; + $package_versions[$group][$package->name] = LegacyVersionUtility::convertToSemanticVersion($version); } // Ensure that package versions are available to pre-create event