Skip to content
Snippets Groups Projects
Commit e108c666 authored by Wim Leers's avatar Wim Leers Committed by Adam G-H
Browse files

Issue #3345755 by Wim Leers: ExtensionUpdater should use ComposerInspector...

Issue #3345755 by Wim Leers: ExtensionUpdater should use ComposerInspector instead of ComposerUtility
parent a5699e65
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,7 @@ services: ...@@ -2,6 +2,7 @@ services:
automatic_updates_extensions.updater: automatic_updates_extensions.updater:
class: Drupal\automatic_updates_extensions\ExtensionUpdater class: Drupal\automatic_updates_extensions\ExtensionUpdater
arguments: arguments:
- '@package_manager.composer_inspector'
- '@package_manager.path_locator' - '@package_manager.path_locator'
- '@package_manager.beginner' - '@package_manager.beginner'
- '@package_manager.stager' - '@package_manager.stager'
......
...@@ -5,6 +5,7 @@ declare(strict_types = 1); ...@@ -5,6 +5,7 @@ declare(strict_types = 1);
namespace Drupal\automatic_updates_extensions; namespace Drupal\automatic_updates_extensions;
use Drupal\Core\StringTranslation\TranslatableMarkup; use Drupal\Core\StringTranslation\TranslatableMarkup;
use Drupal\package_manager\ComposerInspector;
use Drupal\package_manager\LegacyVersionUtility; use Drupal\package_manager\LegacyVersionUtility;
use Drupal\package_manager\Stage; use Drupal\package_manager\Stage;
...@@ -17,6 +18,18 @@ use Drupal\package_manager\Stage; ...@@ -17,6 +18,18 @@ use Drupal\package_manager\Stage;
*/ */
class ExtensionUpdater extends 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. * Begins the update.
* *
...@@ -33,29 +46,27 @@ class ExtensionUpdater extends Stage { ...@@ -33,29 +46,27 @@ class ExtensionUpdater extends Stage {
if (empty($project_versions)) { if (empty($project_versions)) {
throw new \InvalidArgumentException("No projects to begin the update"); throw new \InvalidArgumentException("No projects to begin the update");
} }
$composer = $this->getActiveComposer();
$package_versions = [ $package_versions = [
'production' => [], 'production' => [],
'dev' => [], 'dev' => [],
]; ];
$require_dev = $composer->getComposer() $project_root = $this->pathLocator->getProjectRoot();
->getPackage() $info = $this->composerInspector->getRootPackageInfo($project_root);
->getDevRequires(); $installed_packages = $this->composerInspector->getInstalledPackagesList($project_root);
$installed_packages = $composer->getInstalledPackages();
foreach ($project_versions as $project_name => $version) { foreach ($project_versions as $project_name => $version) {
$package = $composer->getPackageForProject($project_name); $package = $installed_packages->getPackageByDrupalProjectName($project_name);
if (empty($package)) { if (empty($package)) {
throw new \InvalidArgumentException("The project $project_name is not a Drupal project known to Composer and cannot be updated."); 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. // 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."); 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'; $group = isset($info['devRequires'][$package->name]) ? 'dev' : 'production';
$package_versions[$group][$package] = LegacyVersionUtility::convertToSemanticVersion($version); $package_versions[$group][$package->name] = LegacyVersionUtility::convertToSemanticVersion($version);
} }
// Ensure that package versions are available to pre-create event // Ensure that package versions are available to pre-create event
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment