From 1488d68c3ae23cbe43bdfe8655136e7999aa9235 Mon Sep 17 00:00:00 2001 From: omkar podey <58183-omkar.podey@users.noreply.drupalcode.org> Date: Wed, 10 May 2023 12:38:56 +0000 Subject: [PATCH] Issue #3345535 by tedbow, omkar.podey, Wim Leers: BaseRequirementsFulfilledValidator should listen to PreRequireEvent --- .../src/Validator/BaseRequirementValidatorTrait.php | 2 ++ .../src/Validator/BaseRequirementsFulfilledValidator.php | 4 ++-- package_manager/src/Validator/SymlinkValidator.php | 6 ++++++ .../src/Kernel/BaseRequirementsFulfilledValidatorTest.php | 2 ++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/package_manager/src/Validator/BaseRequirementValidatorTrait.php b/package_manager/src/Validator/BaseRequirementValidatorTrait.php index ef3d669c0d..85f90769a5 100644 --- a/package_manager/src/Validator/BaseRequirementValidatorTrait.php +++ b/package_manager/src/Validator/BaseRequirementValidatorTrait.php @@ -7,6 +7,7 @@ namespace Drupal\package_manager\Validator; use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreCreateEvent; use Drupal\package_manager\Event\PreOperationStageEvent; +use Drupal\package_manager\Event\PreRequireEvent; use Drupal\package_manager\Event\StatusCheckEvent; /** @@ -40,6 +41,7 @@ trait BaseRequirementValidatorTrait { return [ PreCreateEvent::class => ['validate', $priority], + PreRequireEvent::class => ['validate', $priority], PreApplyEvent::class => ['validate', $priority], StatusCheckEvent::class => ['validate', $priority], ]; diff --git a/package_manager/src/Validator/BaseRequirementsFulfilledValidator.php b/package_manager/src/Validator/BaseRequirementsFulfilledValidator.php index ba5093fc8d..c358744b6d 100644 --- a/package_manager/src/Validator/BaseRequirementsFulfilledValidator.php +++ b/package_manager/src/Validator/BaseRequirementsFulfilledValidator.php @@ -5,6 +5,7 @@ namespace Drupal\package_manager\Validator; use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreCreateEvent; use Drupal\package_manager\Event\PreOperationStageEvent; +use Drupal\package_manager\Event\PreRequireEvent; use Drupal\package_manager\Event\StatusCheckEvent; use Drupal\system\SystemManager; use Symfony\Component\EventDispatcher\EventSubscriberInterface; @@ -59,10 +60,9 @@ final class BaseRequirementsFulfilledValidator implements EventSubscriberInterfa * {@inheritdoc} */ public static function getSubscribedEvents(): array { - // @todo Decide whether to also listen to PreRequireEvent in - // https://drupal.org/i/3345535. return [ PreCreateEvent::class => ['validate', self::PRIORITY], + PreRequireEvent::class => ['validate', self::PRIORITY], PreApplyEvent::class => ['validate', self::PRIORITY], StatusCheckEvent::class => ['validate', self::PRIORITY], ]; diff --git a/package_manager/src/Validator/SymlinkValidator.php b/package_manager/src/Validator/SymlinkValidator.php index e30ac93f3c..80b7d50794 100644 --- a/package_manager/src/Validator/SymlinkValidator.php +++ b/package_manager/src/Validator/SymlinkValidator.php @@ -5,6 +5,7 @@ declare(strict_types = 1); namespace Drupal\package_manager\Validator; use Drupal\package_manager\Event\PreOperationStageEvent; +use Drupal\package_manager\Event\PreRequireEvent; use Drupal\package_manager\PathLocator; use PhpTuf\ComposerStager\Domain\Aggregate\PreconditionsTree\NoUnsupportedLinksExistInterface; use PhpTuf\ComposerStager\Domain\Exception\PreconditionException; @@ -46,6 +47,11 @@ final class SymlinkValidator implements EventSubscriberInterface { * Flags errors if the project root or stage directory contain symbolic links. */ public function validate(PreOperationStageEvent $event): void { + if ($event instanceof PreRequireEvent) { + // We don't need to check symlinks again during PreRequireEvent; this was + // already just validated during PreCreateEvent. + return; + } $active_dir = $this->pathFactory->create($this->pathLocator->getProjectRoot()); // The precondition requires us to pass both an active and stage directory, diff --git a/package_manager/tests/src/Kernel/BaseRequirementsFulfilledValidatorTest.php b/package_manager/tests/src/Kernel/BaseRequirementsFulfilledValidatorTest.php index a722b9c1c1..1a81004bfe 100644 --- a/package_manager/tests/src/Kernel/BaseRequirementsFulfilledValidatorTest.php +++ b/package_manager/tests/src/Kernel/BaseRequirementsFulfilledValidatorTest.php @@ -5,6 +5,7 @@ namespace Drupal\Tests\package_manager\Kernel; use Drupal\package_manager\Event\PreApplyEvent; use Drupal\package_manager\Event\PreCreateEvent; use Drupal\package_manager\Event\PreOperationStageEvent; +use Drupal\package_manager\Event\PreRequireEvent; use Drupal\package_manager\Event\StatusCheckEvent; use Drupal\package_manager\ValidationResult; use Drupal\package_manager\Validator\BaseRequirementsFulfilledValidator; @@ -56,6 +57,7 @@ class BaseRequirementsFulfilledValidatorTest extends PackageManagerKernelTestBas public function providerBaseRequirement(): array { return [ [PreCreateEvent::class], + [PreRequireEvent::class], [PreApplyEvent::class], [StatusCheckEvent::class], ]; -- GitLab