Register plugin only one time when it's present in global and project mode
parent
cec1627acf
commit
11b945046f
|
@ -37,6 +37,7 @@ class PluginManager
|
|||
protected $versionParser;
|
||||
|
||||
protected $plugins = array();
|
||||
protected $registeredPlugins = array();
|
||||
|
||||
private static $classCounter = 0;
|
||||
|
||||
|
@ -191,6 +192,10 @@ class PluginManager
|
|||
{
|
||||
$oldInstallerPlugin = ($package->getType() === 'composer-installer');
|
||||
|
||||
if (in_array($package->getName(), $this->registeredPlugins)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$extra = $package->getExtra();
|
||||
if (empty($extra['class'])) {
|
||||
throw new \UnexpectedValueException('Error while installing '.$package->getPrettyName().', composer-plugin packages should have a class defined in their extra key to be usable.');
|
||||
|
@ -233,6 +238,7 @@ class PluginManager
|
|||
} else {
|
||||
$plugin = new $class();
|
||||
$this->addPlugin($plugin);
|
||||
$this->registeredPlugins[] = $package->getName();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -164,4 +164,21 @@ class PluginInstallerTest extends \PHPUnit_Framework_TestCase
|
|||
$plugins = $this->pm->getPlugins();
|
||||
$this->assertEquals('installer-v3', $plugins[1]->version);
|
||||
}
|
||||
|
||||
public function testRegisterPluginOnlyOneTime()
|
||||
{
|
||||
$this->repository
|
||||
->expects($this->exactly(2))
|
||||
->method('getPackages')
|
||||
->will($this->returnValue(array()));
|
||||
$installer = new PluginInstaller($this->io, $this->composer);
|
||||
$this->pm->loadInstalledPlugins();
|
||||
|
||||
$installer->install($this->repository, $this->packages[0]);
|
||||
$installer->install($this->repository, clone $this->packages[0]);
|
||||
|
||||
$plugins = $this->pm->getPlugins();
|
||||
$this->assertCount(1, $plugins);
|
||||
$this->assertEquals('installer-v1', $plugins[0]->version);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue