Register all packages via the autoload generator before dispatching events

main
Jordi Boggiano 13 years ago
parent 5daaba9e62
commit 2d780fbef6

@ -14,7 +14,7 @@ namespace Composer\Script;
use Composer\Json\JsonFile;
use Composer\Repository\FilesystemRepository;
use Composer\Autoload\ClassLoader;
use Composer\Autoload\AutoloadGenerator;
use Composer\Package\PackageInterface;
use Composer\IO\IOInterface;
use Composer\Composer;
@ -48,8 +48,6 @@ class EventDispatcher
{
$this->composer = $composer;
$this->io = $io;
$this->loader = new ClassLoader();
$this->loader->register();
}
/**
@ -105,16 +103,22 @@ class EventDispatcher
{
$package = $this->composer->getPackage();
$scripts = $package->getScripts();
$autoload = $package->getAutoload();
// get namespaces in composer.json project
if (!$this->loader->getPrefixes() && isset($autoload['psr-0'])) {
krsort($autoload['psr-0']);
foreach ($autoload['psr-0'] as $ns => $path) {
$this->loader->add($ns, rtrim(getcwd().'/'.$path, '/'));
}
if (empty($scripts[$event->getName()])) {
return array();
}
if ($this->loader) {
$this->loader->unregister();
}
return isset($scripts[$event->getName()]) ? $scripts[$event->getName()] : array();
$generator = new AutoloadGenerator;
$packages = $this->composer->getRepositoryManager()->getLocalRepository()->getPackages();
$packageMap = $generator->buildPackageMap($this->composer->getInstallationManager(), $package, $packages);
$map = $generator->parseAutoloads($packageMap);
$this->loader = $generator->createLoader($map);
$this->loader->register();
return $scripts[$event->getName()];
}
}

Loading…
Cancel
Save