diff --git a/src/Composer/DependencyResolver/Transaction.php b/src/Composer/DependencyResolver/Transaction.php index b847164ff..7c38d92fb 100644 --- a/src/Composer/DependencyResolver/Transaction.php +++ b/src/Composer/DependencyResolver/Transaction.php @@ -165,7 +165,9 @@ class Transaction $possibleRequires = $this->pool->whatProvides($link->getTarget(), $link->getConstraint()); foreach ($possibleRequires as $require) { - unset($roots[$require->id]); + if ($require !== $package) { + unset($roots[$require->id]); + } } } } diff --git a/tests/Composer/Test/Fixtures/installer/circular-dependency2.test b/tests/Composer/Test/Fixtures/installer/circular-dependency2.test new file mode 100644 index 000000000..c89beef6b --- /dev/null +++ b/tests/Composer/Test/Fixtures/installer/circular-dependency2.test @@ -0,0 +1,36 @@ +--TEST-- +Circular dependencies are possible between packages +--COMPOSER-- +{ + "name": "root", + "version": "dev-master", + "require": { + "require/itself": "1.0.0", + "regular/pkg": "1.0.0" + }, + "repositories": [ + { + "type": "package", + "package": [ + { + "name": "require/itself", + "version": "1.0.0", + "source": { "reference": "some.branch", "type": "git", "url": "" }, + "require": { + "require/itself": "1.0.0" + } + }, + { + "name": "regular/pkg", + "version": "1.0.0", + "source": { "reference": "some.branch", "type": "git", "url": "" } + } + ] + } + ] +} +--RUN-- +update -v +--EXPECT-- +Installing require/itself (1.0.0) +Installing regular/pkg (1.0.0)