From 780e6fc02767708769efc5d36e1db6b23a289d72 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 13 Nov 2020 16:05:20 +0100 Subject: [PATCH] Avoid creating unnecessary conflict rules for provide/replace of aliases --- src/Composer/DependencyResolver/RuleSetGenerator.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/Composer/DependencyResolver/RuleSetGenerator.php b/src/Composer/DependencyResolver/RuleSetGenerator.php index 19fcc8c12..e4591f451 100644 --- a/src/Composer/DependencyResolver/RuleSetGenerator.php +++ b/src/Composer/DependencyResolver/RuleSetGenerator.php @@ -211,7 +211,12 @@ class RuleSetGenerator $conflicts = $this->pool->whatProvides($link->getTarget(), $link->getConstraint()); foreach ($conflicts as $conflict) { - $this->addRule(RuleSet::TYPE_PACKAGE, $this->createRule2Literals($package, $conflict, Rule::RULE_PACKAGE_CONFLICT, $link)); + // define the conflict rule for regular packages, for alias packages it's only needed if the name + // matches the conflict exactly, otherwise the name match is by provide/replace which means the + // package which this is an alias of will conflict anyway, so no need to create additional rules + if (!$conflict instanceof AliasPackage || $conflict->getName() === $link->getTarget()) { + $this->addRule(RuleSet::TYPE_PACKAGE, $this->createRule2Literals($package, $conflict, Rule::RULE_PACKAGE_CONFLICT, $link)); + } } } }