From d96d046209646e93259d54ca9985004341c40fe2 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Mon, 4 Mar 2019 11:38:58 +0100 Subject: [PATCH] Fix require of platform packages with --ignore-platform-reqs, fixes #8012 --- src/Composer/Command/InitCommand.php | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/Composer/Command/InitCommand.php b/src/Composer/Command/InitCommand.php index abcea73b2..ecc3d3238 100644 --- a/src/Composer/Command/InitCommand.php +++ b/src/Composer/Command/InitCommand.php @@ -694,15 +694,22 @@ EOT { // find the latest version allowed in this pool $versionSelector = new VersionSelector($this->getPool($input, $minimumStability)); - $package = $versionSelector->findBestCandidate($name, $requiredVersion, $phpVersion, $preferredStability); + $ignorePlatformReqs = $input->hasOption('ignore-platform-reqs') && $input->getOption('ignore-platform-reqs'); - // retry without phpVersion if platform requirements are ignored in case nothing was found - if ($input->hasOption('ignore-platform-reqs') && $input->getOption('ignore-platform-reqs')) { + // ignore phpVersion if platform requirements are ignored + if ($ignorePlatformReqs) { $phpVersion = null; - $package = $versionSelector->findBestCandidate($name, $requiredVersion, $phpVersion, $preferredStability); } + $package = $versionSelector->findBestCandidate($name, $requiredVersion, $phpVersion, $preferredStability); + if (!$package) { + // platform packages can not be found in the pool in versions other than the local platform's has + // so if platform reqs are ignored we just take the user's word for it + if ($ignorePlatformReqs && preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $name)) { + return array($name, $requiredVersion ?: '*'); + } + // Check whether the PHP version was the problem if ($phpVersion && $versionSelector->findBestCandidate($name, $requiredVersion, null, $preferredStability)) { throw new \InvalidArgumentException(sprintf(