Browse Source

Settings of the same repository for a package is allowed.

Martin Hasoň 12 năm trước cách đây
mục cha
commit
fa0d62ab6a

+ 0 - 1
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(

+ 1 - 1
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;

+ 42 - 0
tests/Composer/Test/Package/BasePackageTest.php

@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * 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'));
+    }
+}