From f262feebec342733785e304333498715de524a59 Mon Sep 17 00:00:00 2001 From: Oleg Andreyev Date: Sat, 22 Aug 2020 20:07:13 +0300 Subject: [PATCH] fixing error message for higher repository priority, when higher repo has only a dev-branch --- src/Composer/DependencyResolver/Problem.php | 6 +-- src/Composer/Repository/RepositorySet.php | 2 +- .../installer/repositories-priorities4.test | 50 +++++++++++++++++++ 3 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 tests/Composer/Test/Fixtures/installer/repositories-priorities4.test diff --git a/src/Composer/DependencyResolver/Problem.php b/src/Composer/DependencyResolver/Problem.php index 6d94b068b..c455a36ea 100644 --- a/src/Composer/DependencyResolver/Problem.php +++ b/src/Composer/DependencyResolver/Problem.php @@ -279,11 +279,11 @@ class Problem return array("- Root composer.json requires $packageName".self::constraintToText($constraint) . ', ', 'found '.self::getPackageList($packages, $isVerbose).' but '.(self::hasMultipleNames($packages) ? 'these do' : 'it does').' not match your minimum-stability.'); } - // check if the package is found when bypassing the constraint check - if ($packages = $repositorySet->findPackages($packageName, null)) { + // check if the package is found when bypassing the constraint check and stability checks + if ($packages = $repositorySet->findPackages($packageName, null, RepositorySet::ALLOW_UNACCEPTABLE_STABILITIES)) { // we must first verify if a valid package would be found in a lower priority repository if ($allReposPackages = $repositorySet->findPackages($packageName, $constraint, RepositorySet::ALLOW_SHADOWED_REPOSITORIES)) { - $higherRepoPackages = $repositorySet->findPackages($packageName, null); + $higherRepoPackages = $repositorySet->findPackages($packageName, null, RepositorySet::ALLOW_UNACCEPTABLE_STABILITIES); $nextRepoPackages = array(); $nextRepo = null; diff --git a/src/Composer/Repository/RepositorySet.php b/src/Composer/Repository/RepositorySet.php index 9417dec97..04db0becd 100644 --- a/src/Composer/Repository/RepositorySet.php +++ b/src/Composer/Repository/RepositorySet.php @@ -193,7 +193,7 @@ class RepositorySet } } - return $candidates; + return $result; } public function getProviders($packageName) diff --git a/tests/Composer/Test/Fixtures/installer/repositories-priorities4.test b/tests/Composer/Test/Fixtures/installer/repositories-priorities4.test new file mode 100644 index 000000000..7e251002f --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/repositories-priorities4.test @@ -0,0 +1,50 @@ +--TEST-- +Packages found in a higher priority repository won't be considered as found if version does not match +--COMPOSER-- +{ + "repositories": [ + { + "type": "package", + "package": [ + { + "name": "ruflin/elastica", + "version": "dev-outdated-branch" + } + ] + }, + { + "type": "package", + "package": [ + { + "name": "friendsofsymfony/elastica-bundle", + "version": "dev-foobar-master", + "require": { + "ruflin/elastica": "2.*" + } + } + ] + }, + { + "type": "composer", + "url": "https://repo.packagist.org" + } + ], + "require": { + "friendsofsymfony/elastica-bundle": "dev-foobar-master" + } +} + +--RUN-- +update +--EXPECT-OUTPUT-- +Loading composer repositories with package information +Updating dependencies +Your requirements could not be resolved to an installable set of packages. + + Problem 1 + - Root composer.json requires friendsofsymfony/elastica-bundle dev-foobar-master -> satisfiable by friendsofsymfony/elastica-bundle[dev-foobar-master]. + - friendsofsymfony/elastica-bundle dev-foobar-master requires ruflin/elastica 2.* -> satisfiable by ruflin/elastica[2.0.0, ..., 2.3.3] from composer repo (https://repo.packagist.org) but ruflin/elastica[dev-outdated-branch] from package repo (defining 1 package) has higher repository priority. The packages with higher priority do not match your constraint and are therefore not installable. See https://getcomposer.org/repoprio for details and assistance. + +--EXPECT-- +--EXPECT-EXIT-CODE-- +2