From f74d4daacd5d57f7cf68ff357c01b2f636d15090 Mon Sep 17 00:00:00 2001 From: Adam G-H <32250-phenaproxima@users.noreply.drupalcode.org> Date: Wed, 10 Jan 2024 13:47:34 +0000 Subject: [PATCH] Issue #3408483 by phenaproxima, Wim Leers: Support cweagans/composer-patches 2.x --- .../Validator/ComposerPatchesValidator.php | 20 +++++++++++++++---- .../Validator/ComposerPluginsValidator.php | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/package_manager/src/Validator/ComposerPatchesValidator.php b/package_manager/src/Validator/ComposerPatchesValidator.php index ba83ceedb1..e99124c34d 100644 --- a/package_manager/src/Validator/ComposerPatchesValidator.php +++ b/package_manager/src/Validator/ComposerPatchesValidator.php @@ -4,6 +4,7 @@ declare(strict_types = 1); namespace Drupal\package_manager\Validator; +use Composer\Semver\Semver; use Drupal\Component\Serialization\Json; use Drupal\Core\Extension\ModuleHandlerInterface; use Drupal\Core\StringTranslation\StringTranslationTrait; @@ -155,15 +156,26 @@ final class ComposerPatchesValidator implements EventSubscriberInterface { */ private function computePatcherStatus(string $working_dir): array { $list = $this->composerInspector->getInstalledPackagesList($working_dir); - $is_installed = isset($list[static::PLUGIN_NAME]); + $installed_version = $list[static::PLUGIN_NAME]?->version; $info = $this->composerInspector->getRootPackageInfo($working_dir); $is_root_requirement = array_key_exists(static::PLUGIN_NAME, $info['requires'] ?? []) || array_key_exists(static::PLUGIN_NAME, $info['devRequires'] ?? []); - $extra = Json::decode($this->composerInspector->getConfig('extra', $working_dir)); - $exit_on_failure = $extra['composer-exit-on-patch-failure'] ?? FALSE; + // The 2.x version of the plugin always exits with an error if a patch can't + // be applied. + if ($installed_version && Semver::satisfies($installed_version, '^2')) { + $exit_on_failure = TRUE; + } + else { + $extra = Json::decode($this->composerInspector->getConfig('extra', $working_dir)); + $exit_on_failure = $extra['composer-exit-on-patch-failure'] ?? FALSE; + } - return [$is_installed, $is_root_requirement, $exit_on_failure]; + return [ + is_string($installed_version), + $is_root_requirement, + $exit_on_failure, + ]; } /** diff --git a/package_manager/src/Validator/ComposerPluginsValidator.php b/package_manager/src/Validator/ComposerPluginsValidator.php index b584da44c8..ab07efaf46 100644 --- a/package_manager/src/Validator/ComposerPluginsValidator.php +++ b/package_manager/src/Validator/ComposerPluginsValidator.php @@ -64,7 +64,7 @@ final class ComposerPluginsValidator implements EventSubscriberInterface { private const SUPPORTED_PLUGINS_THAT_DO_MODIFY = [ // cSpell:disable // @see \Drupal\package_manager\Validator\ComposerPatchesValidator - 'cweagans/composer-patches' => '^1.7.3', + 'cweagans/composer-patches' => '^1.7.3 || ^2', // @see \Drupal\package_manager\PathExcluder\VendorHardeningExcluder 'drupal/core-vendor-hardening' => '*', 'php-http/discovery' => '*', -- GitLab