diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php index 48a2496b5..d2d3284bb 100644 --- a/src/Composer/Installer.php +++ b/src/Composer/Installer.php @@ -817,7 +817,6 @@ class Installer if ($package instanceof AliasPackage) { $alias = (string) $package->getAliasOf(); $packages[$key] = new AliasPackage($packages[$alias], $package->getVersion(), $package->getPrettyVersion()); - unset($packages[$alias]); } } $rm->setLocalRepository( diff --git a/src/Composer/Package/BasePackage.php b/src/Composer/Package/BasePackage.php index f1e71010e..a783ca7fc 100644 --- a/src/Composer/Package/BasePackage.php +++ b/src/Composer/Package/BasePackage.php @@ -119,7 +119,7 @@ abstract class BasePackage implements PackageInterface */ public function setRepository(RepositoryInterface $repository) { - if ($this->repository) { + if ($this->repository && $repository !== $this->repository) { throw new \LogicException('A package can only be added to one repository'); } $this->repository = $repository; diff --git a/tests/Composer/Test/Package/BasePackageTest.php b/tests/Composer/Test/Package/BasePackageTest.php new file mode 100644 index 000000000..6e9f8f05a --- /dev/null +++ b/tests/Composer/Test/Package/BasePackageTest.php @@ -0,0 +1,42 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Test\Package; + +use Composer\Package\BasePackage; + +class BasePackageTest extends \PHPUnit_Framework_TestCase +{ + public function testSetSameRepository() + { + $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', array('foo')); + $repository = $this->getMock('Composer\Repository\RepositoryInterface'); + + $package->setRepository($repository); + try { + $package->setRepository($repository); + } catch (\Exception $e) { + $this->fail('Set againt the same repository is allowed.'); + } + } + + /** + * @expectedException LogicException + */ + public function testSetAnotherRepository() + { + $package = $this->getMockForAbstractClass('Composer\Package\BasePackage', array('foo')); + + $package->setRepository($this->getMock('Composer\Repository\RepositoryInterface')); + $package->setRepository($this->getMock('Composer\Repository\RepositoryInterface')); + } +}