Merge remote-tracking branch 'origin/master'

main
Jordi Boggiano 10 years ago
commit b33da336ec

@ -37,6 +37,7 @@ class PluginManager
protected $versionParser;
protected $plugins = array();
protected $registeredPlugins = array();
private static $classCounter = 0;
@ -195,6 +196,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.');
@ -237,6 +242,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…
Cancel
Save