diff --git a/package_manager/src/InstalledPackagesList.php b/package_manager/src/InstalledPackagesList.php index abd7628cf9b899b9ee4c6fb5d214578e0548aa89..499c73120f0f3aa8ac8acda1ad1a13d39d1f8327 100644 --- a/package_manager/src/InstalledPackagesList.php +++ b/package_manager/src/InstalledPackagesList.php @@ -156,10 +156,14 @@ final class InstalledPackagesList extends \ArrayObject { * * Packages returned by ::getCorePackageList() are considered core packages. * + * @param bool $include_dev + * (optional) Whether to include core packages intended for development. + * Defaults to TRUE. + * * @return static * A list of the installed core packages. */ - public function getCorePackages(): static { + public function getCorePackages(bool $include_dev = TRUE): static { $core_packages = array_intersect_key( $this->getArrayCopy(), array_flip(static::getCorePackageList()) @@ -170,6 +174,10 @@ final class InstalledPackagesList extends \ArrayObject { if (array_key_exists('drupal/core-recommended', $core_packages)) { unset($core_packages['drupal/core']); } + if (!$include_dev) { + unset($core_packages['drupal/core-dev']); + unset($core_packages['drupal/core-dev-pinned']); + } return new static($core_packages); } diff --git a/package_manager/tests/src/Unit/InstalledPackagesListTest.php b/package_manager/tests/src/Unit/InstalledPackagesListTest.php index 247bb0f065c439d8b7e3573b1da8f3caa8303c34..3bd49e8ec5e9860bfa88903b88614223f3e38d1d 100644 --- a/package_manager/tests/src/Unit/InstalledPackagesListTest.php +++ b/package_manager/tests/src/Unit/InstalledPackagesListTest.php @@ -139,6 +139,14 @@ class InstalledPackagesListTest extends UnitTestCase { $list = new InstalledPackagesList($data); $this->assertArrayNotHasKey('drupal/not-core', $list->getCorePackages()); + // Tests that we don't get core packages intended for development when + // include_dev is set to FALSE. + $core_packages_no_dev = $list->getCorePackages(FALSE); + $this->assertArrayNotHasKey('drupal/core-dev', $core_packages_no_dev); + $this->assertArrayNotHasKey('drupal/core-dev-pinned', $core_packages_no_dev); + // We still get other packages as intended. + $this->assertArrayHasKey('drupal/core', $core_packages_no_dev); + // If drupal/core-recommended is in the list, it should supersede // drupal/core. $this->assertArrayHasKey('drupal/core', $list->getCorePackages()); diff --git a/src/Validator/VersionPolicyValidator.php b/src/Validator/VersionPolicyValidator.php index bbba0577f78daa9a7dd6730d0e0261d09609903e..197c8ea7be3397223e6bb29373e6e7d9167a0d71 100644 --- a/src/Validator/VersionPolicyValidator.php +++ b/src/Validator/VersionPolicyValidator.php @@ -277,10 +277,8 @@ final class VersionPolicyValidator implements EventSubscriberInterface { $project_root = $this->pathLocator->getProjectRoot(); $core_packages = $this->composerInspector->getInstalledPackagesList($project_root) - ->getCorePackages() + ->getCorePackages(FALSE) ->getArrayCopy(); - unset($core_packages['drupal/core-dev']); - unset($core_packages['drupal/core-dev-pinned']); return key($core_packages) ?? FALSE; }