diff --git a/package_manager/src/Validator/ComposerPatchesValidator.php b/package_manager/src/Validator/ComposerPatchesValidator.php index ba83ceedb11e811e2e42ea88e6dc5f05859b0b26..e99124c34da1c0ce79c794c86aa67a6796de37f4 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 b584da44c857d26bfe197002afb7baf99bb3ab2c..ab07efaf46fa519c413698e66eb184a9c75256a5 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' => '*',