From 9641ad60250f337eacab1e2812224376081e1223 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Wed, 21 Oct 2020 14:08:12 +0200 Subject: [PATCH] SolverProblemException: Hide learnt rules on output Results in too much error output which is not helpful. Very repetitive and hard to understand. In issue 8903 even leads to endless recursion bug. --- src/Composer/DependencyResolver/Rule.php | 14 +- .../installer/alias-solver-problems.test | 3 +- .../installer/github-issues-7051.test | 221 +----------------- .../installer/github-issues-8903.test | 216 +++++++++++++++++ .../installer/provider-conflicts3.test | 12 +- 5 files changed, 236 insertions(+), 230 deletions(-) create mode 100644 tests/Composer/Test/Fixtures/installer/github-issues-8903.test diff --git a/src/Composer/DependencyResolver/Rule.php b/src/Composer/DependencyResolver/Rule.php index 37bb462c8..a7df98d71 100644 --- a/src/Composer/DependencyResolver/Rule.php +++ b/src/Composer/DependencyResolver/Rule.php @@ -278,11 +278,15 @@ abstract class Rule return 'You can only install one version of a package, so only one of these can be installed: ' . $this->formatPackagesUnique($pool, $literals, $isVerbose) . '.'; case self::RULE_LEARNED: - if (isset($learnedPool[$this->reasonData])) { - $learnedString = ', learned rules:' . Problem::formatDeduplicatedRules($learnedPool[$this->reasonData], ' ', $repositorySet, $request, $pool, $isVerbose, $installedMap, $learnedPool); - } else { - $learnedString = ' (reasoning unavailable)'; - } + /** @TODO currently still generates way too much output to be helpful, and in some cases can even lead to endless recursion + if (isset($learnedPool[$this->reasonData])) { + echo $this->reasonData."\n"; + $learnedString = ', learned rules:' . Problem::formatDeduplicatedRules($learnedPool[$this->reasonData], ' ', $repositorySet, $request, $pool, $isVerbose, $installedMap, $learnedPool); + } else { + $learnedString = ' (reasoning unavailable)'; + } + */ + $learnedString = ' (conflict analysis result)'; if (count($literals) === 1) { $ruleText = $pool->literalToPrettyString($literals[0], $installedMap); diff --git a/tests/Composer/Test/Fixtures/installer/alias-solver-problems.test b/tests/Composer/Test/Fixtures/installer/alias-solver-problems.test index 7158057d1..1729826ec 100644 --- a/tests/Composer/Test/Fixtures/installer/alias-solver-problems.test +++ b/tests/Composer/Test/Fixtures/installer/alias-solver-problems.test @@ -49,8 +49,7 @@ Your requirements could not be resolved to an installable set of packages. - a/a dev-master requires d/d 1.0.0 -> satisfiable by d/d[1.0.0]. - You can only install one version of a package, so only one of these can be installed: d/d[1.0.0, 2.0.0]. - b/b dev-master requires d/d 2.0.0 -> satisfiable by d/d[2.0.0]. - - Conclusion: install b/b dev-master, learned rules: - - Root composer.json requires b/b *@dev -> satisfiable by b/b[dev-master]. + - Conclusion: install b/b dev-master (conflict analysis result) - Root composer.json requires a/a *@dev -> satisfiable by a/a[dev-master]. --EXPECT-- diff --git a/tests/Composer/Test/Fixtures/installer/github-issues-7051.test b/tests/Composer/Test/Fixtures/installer/github-issues-7051.test index 1c17958ba..9c39c1441 100644 --- a/tests/Composer/Test/Fixtures/installer/github-issues-7051.test +++ b/tests/Composer/Test/Fixtures/installer/github-issues-7051.test @@ -108,233 +108,26 @@ Solver Bug Exception caused by analyze on mutli conflict rule reported in GitHub } --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 - - Conclusion: don't install friendsofphp/php-cs-fixer v2.10.5, learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - Conclusion: don't install one of symfony/console[v3.1.10], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - Conclusion: don't install one of symfony/console[v2.8.7], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install one of symfony/console[v2.8.8], friendsofphp/php-cs-fixer[v2.10.5], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install symfony/console v3.4.29, learned rules: - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install symfony/console v2.8.8, learned rules: - - friendsofphp/php-cs-fixer v2.10.4 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v3.4.29, learned rules: - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Root composer.json requires friendsofphp/php-cs-fixer * -> satisfiable by friendsofphp/php-cs-fixer[v2.10.4, v2.10.5]. - - Conclusion: don't install friendsofphp/php-cs-fixer v2.10.5, learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - Conclusion: don't install one of symfony/console[v3.1.10], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - Conclusion: don't install one of symfony/console[v2.8.7], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install one of symfony/console[v2.8.8], friendsofphp/php-cs-fixer[v2.10.5], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install symfony/console v3.4.28, learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v2.8.8, learned rules: - - friendsofphp/php-cs-fixer v2.10.4 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v3.4.29, learned rules: - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Root composer.json requires friendsofphp/php-cs-fixer * -> satisfiable by friendsofphp/php-cs-fixer[v2.10.4, v2.10.5]. - - Conclusion: don't install friendsofphp/php-cs-fixer v2.10.5, learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - Conclusion: don't install one of symfony/console[v3.1.10], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - Conclusion: don't install one of symfony/console[v2.8.7], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install one of symfony/console[v2.8.8], friendsofphp/php-cs-fixer[v2.10.5], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. + - Conclusion: don't install friendsofphp/php-cs-fixer v2.10.5 (conflict analysis result) + - Conclusion: don't install symfony/console v3.4.29 (conflict analysis result) + - Conclusion: don't install symfony/console v2.8.8 (conflict analysis result) + - Conclusion: don't install symfony/console v3.4.28 (conflict analysis result) - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - Conclusion: don't install symfony/console v2.8.7, learned rules: - - friendsofphp/php-cs-fixer v2.10.4 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v3.4.28, learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v2.8.8, learned rules: - - friendsofphp/php-cs-fixer v2.10.4 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v3.4.29, learned rules: - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Root composer.json requires friendsofphp/php-cs-fixer * -> satisfiable by friendsofphp/php-cs-fixer[v2.10.4, v2.10.5]. - - Conclusion: don't install friendsofphp/php-cs-fixer v2.10.5, learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - Conclusion: don't install one of symfony/console[v3.1.10], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - Conclusion: don't install one of symfony/console[v2.8.7], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install one of symfony/console[v2.8.8], friendsofphp/php-cs-fixer[v2.10.5], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install symfony/console v3.4.29, learned rules: - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Root composer.json requires friendsofphp/php-cs-fixer * -> satisfiable by friendsofphp/php-cs-fixer[v2.10.4, v2.10.5]. - - Conclusion: don't install friendsofphp/php-cs-fixer v2.10.5, learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - Conclusion: don't install one of symfony/console[v3.1.10], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - Conclusion: don't install one of symfony/console[v2.8.7], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install one of symfony/console[v2.8.8], friendsofphp/php-cs-fixer[v2.10.5], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. + - Conclusion: don't install symfony/console v2.8.7 (conflict analysis result) - Root composer.json requires friendsofphp/php-cs-fixer * -> satisfiable by friendsofphp/php-cs-fixer[v2.10.4, v2.10.5]. - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - friendsofphp/php-cs-fixer v2.10.4 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - Conclusion: don't install symfony/console v3.1.10, learned rules: - - friendsofphp/php-cs-fixer v2.10.4 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v3.4.28, learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v2.8.8, learned rules: - - friendsofphp/php-cs-fixer v2.10.4 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console v3.4.29, learned rules: - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Root composer.json requires friendsofphp/php-cs-fixer * -> satisfiable by friendsofphp/php-cs-fixer[v2.10.4, v2.10.5]. - - Conclusion: don't install friendsofphp/php-cs-fixer v2.10.5, learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - Conclusion: don't install one of symfony/console[v3.1.10], friendsofphp/php-cs-fixer[v2.10.5] | install symfony/console[v3.4.29], learned rules: - %A - - Conclusion: don't install symfony/console[v3.4.29] | install symfony/console[v2.8.8], learned rules: - - illuminate/queue v5.2.0 requires illuminate/console 5.2.* -> satisfiable by illuminate/console[v5.2.25, v5.2.26]. - - illuminate/console v5.2.25 requires symfony/console 3.1.* -> satisfiable by symfony/console[v3.1.9, v3.1.10]. - - illuminate/console v5.2.26 requires symfony/console 2.8.* -> satisfiable by symfony/console[v2.8.7, v2.8.8]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. - - Conclusion: don't install one of symfony/console[v2.8.8], friendsofphp/php-cs-fixer[v2.10.5], learned rules: - - friendsofphp/php-cs-fixer v2.10.5 requires symfony/console ^3.2 || ^4.0 -> satisfiable by symfony/console[v3.2.13, ..., v3.4.29]. - - You can only install one version of a package, so only one of these can be installed: symfony/console[v2.8.7, v2.8.8, v3.1.9, ..., v3.4.29]. - - Root composer.json requires illuminate/queue * -> satisfiable by illuminate/queue[v5.2.0]. + - Conclusion: don't install symfony/console v3.1.10 (conflict analysis result) --EXPECT-- --EXPECT-EXIT-CODE-- diff --git a/tests/Composer/Test/Fixtures/installer/github-issues-8903.test b/tests/Composer/Test/Fixtures/installer/github-issues-8903.test new file mode 100644 index 000000000..f2c8c9f20 --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/github-issues-8903.test @@ -0,0 +1,216 @@ +--TEST-- + +See Github issue #8903 ( https://github.com/composer/composer/issues/8903 ). + +Recursive output of learnt rules can lead to infinite loop. + +--COMPOSER-- +{ + "name": "nomorehours/knowmore-api", + "description": "Reported at https://github.com/composer/composer/issues/8903 (OP)", + "require": { + "laravel/lumen-framework": "^7.0", + "irazasyed/telegram-bot-sdk": "^2.0" + }, + "repositories": { + "laravel/lumen-framework": { + "type": "package", + "package": [ + { + "name": "laravel/lumen-framework", + "version": "v7.0.0", + "type": "library", + "require": { + "illuminate/support": "^7.0" + } + } + ] + }, + "irazasyed/telegram-bot-sdk": { + "type": "package", + "package": [ + { + "name": "irazasyed/telegram-bot-sdk", + "version": "v2.1.0", + "type": "library", + "require": { + "illuminate/support": "5.0.*|5.1.*|5.2.*" + } + }, + { + "name": "irazasyed/telegram-bot-sdk", + "version": "v2.0.0", + "type": "library", + "require": { + "illuminate/support": "5.0.*|5.1.*|5.2.*" + } + } + ] + }, + "illuminate/support": { + "type": "package", + "package": [ + { + "name": "illuminate/support", + "version": "v7.14.0", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.2.2", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.2.1", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.1.0", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.8", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.7", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.6", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.5", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.4", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.3", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.2", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.1", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v7.0.0", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.3.23", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.3.16", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.3.4", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.3.0", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.45", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.43", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.37", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.32", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.31", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.28", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.27", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.26", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.25", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.24", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.2.0", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.1.41", + "type": "library" + }, + { + "name": "illuminate/support", + "version": "v5.0.0", + "type": "library" + } + ] + } + } +} + +--RUN-- +update + +--EXPECT-- + +--EXPECT-OUTPUT-- + +--EXPECT-EXIT-CODE-- +2 diff --git a/tests/Composer/Test/Fixtures/installer/provider-conflicts3.test b/tests/Composer/Test/Fixtures/installer/provider-conflicts3.test index 53d11ecf0..de0744b53 100644 --- a/tests/Composer/Test/Fixtures/installer/provider-conflicts3.test +++ b/tests/Composer/Test/Fixtures/installer/provider-conflicts3.test @@ -37,15 +37,9 @@ Updating dependencies Your requirements could not be resolved to an installable set of packages. Problem 1 - - Conclusion: don't install regular/pkg 1.0.3, learned rules: - - Root composer.json requires replacer/pkg 2.* -> satisfiable by replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3]. - - Only one of these can be installed: regular/pkg[1.0.0, 1.0.1, 1.0.2, 1.0.3], replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3]. replacer/pkg replaces regular/pkg and thus cannot coexist with it. - - Conclusion: don't install regular/pkg 1.0.2, learned rules: - - Root composer.json requires replacer/pkg 2.* -> satisfiable by replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3]. - - Only one of these can be installed: regular/pkg[1.0.0, 1.0.1, 1.0.2, 1.0.3], replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3]. replacer/pkg replaces regular/pkg and thus cannot coexist with it. - - Conclusion: don't install regular/pkg 1.0.1, learned rules: - - Root composer.json requires replacer/pkg 2.* -> satisfiable by replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3]. - - Only one of these can be installed: regular/pkg[1.0.0, 1.0.1, 1.0.2, 1.0.3], replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3]. replacer/pkg replaces regular/pkg and thus cannot coexist with it. + - Conclusion: don't install regular/pkg 1.0.3 (conflict analysis result) + - Conclusion: don't install regular/pkg 1.0.2 (conflict analysis result) + - Conclusion: don't install regular/pkg 1.0.1 (conflict analysis result) - Only one of these can be installed: regular/pkg[1.0.0, 1.0.1, 1.0.2, 1.0.3], replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3]. replacer/pkg replaces regular/pkg and thus cannot coexist with it. - Root composer.json requires regular/pkg 1.* -> satisfiable by regular/pkg[1.0.0, 1.0.1, 1.0.2, 1.0.3]. - Root composer.json requires replacer/pkg 2.* -> satisfiable by replacer/pkg[2.0.0, 2.0.1, 2.0.2, 2.0.3].