|
@@ -12,6 +12,8 @@
|
|
|
|
|
|
namespace Composer\Command;
|
|
namespace Composer\Command;
|
|
|
|
|
|
|
|
+use Composer\Script\ScriptEvents;
|
|
|
|
+use Composer\Script\EventDispatcher;
|
|
use Composer\Autoload\AutoloadGenerator;
|
|
use Composer\Autoload\AutoloadGenerator;
|
|
use Composer\DependencyResolver;
|
|
use Composer\DependencyResolver;
|
|
use Composer\DependencyResolver\Pool;
|
|
use Composer\DependencyResolver\Pool;
|
|
@@ -23,6 +25,8 @@ use Composer\Repository\PlatformRepository;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Input\InputOption;
|
|
use Symfony\Component\Console\Input\InputOption;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
|
|
+use Composer\DependencyResolver\Operation\InstallOperation;
|
|
|
|
+use Composer\DependencyResolver\Solver;
|
|
|
|
|
|
/**
|
|
/**
|
|
* @author Jordi Boggiano <j.boggiano@seld.be>
|
|
* @author Jordi Boggiano <j.boggiano@seld.be>
|
|
@@ -65,6 +69,8 @@ EOT
|
|
$dryRun = (Boolean) $input->getOption('dry-run');
|
|
$dryRun = (Boolean) $input->getOption('dry-run');
|
|
$verbose = $dryRun || $input->getOption('verbose');
|
|
$verbose = $dryRun || $input->getOption('verbose');
|
|
$composer = $this->getComposer();
|
|
$composer = $this->getComposer();
|
|
|
|
+ $io = $this->getApplication()->getIO();
|
|
|
|
+ $dispatcher = new EventDispatcher($this->getComposer(), $io);
|
|
|
|
|
|
if ($preferSource) {
|
|
if ($preferSource) {
|
|
$composer->getDownloadManager()->setPreferSource(true);
|
|
$composer->getDownloadManager()->setPreferSource(true);
|
|
@@ -82,6 +88,12 @@ EOT
|
|
$pool->addRepository($repository);
|
|
$pool->addRepository($repository);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ // dispatch pre event
|
|
|
|
+ if (!$dryRun) {
|
|
|
|
+ $eventName = $update ? ScriptEvents::PRE_UPDATE_CMD : ScriptEvents::PRE_INSTALL_CMD;
|
|
|
|
+ $dispatcher->dispatchCommandEvent($eventName);
|
|
|
|
+ }
|
|
|
|
+
|
|
// creating requirements request
|
|
// creating requirements request
|
|
$request = new Request($pool);
|
|
$request = new Request($pool);
|
|
if ($update) {
|
|
if ($update) {
|
|
@@ -132,7 +144,10 @@ EOT
|
|
// TODO this belongs in the solver, but this will do for now to report top-level deps missing at least
|
|
// TODO this belongs in the solver, but this will do for now to report top-level deps missing at least
|
|
foreach ($request->getJobs() as $job) {
|
|
foreach ($request->getJobs() as $job) {
|
|
if ('install' === $job['cmd']) {
|
|
if ('install' === $job['cmd']) {
|
|
- foreach ($installedRepo->getPackages() as $package) {
|
|
|
|
|
|
+ foreach ($installedRepo->getPackages() as $package ) {
|
|
|
|
+ if ($installedRepo->hasPackage($package) && !$package->isPlatform() && !$installationManager->isPackageInstalled($package)) {
|
|
|
|
+ $operations[$job['packageName']] = new InstallOperation($package, Solver::RULE_PACKAGE_NOT_EXIST);
|
|
|
|
+ }
|
|
if (in_array($job['packageName'], $package->getNames())) {
|
|
if (in_array($job['packageName'], $package->getNames())) {
|
|
continue 2;
|
|
continue 2;
|
|
}
|
|
}
|
|
@@ -162,7 +177,9 @@ EOT
|
|
$output->writeln((string) $operation);
|
|
$output->writeln((string) $operation);
|
|
}
|
|
}
|
|
if (!$dryRun) {
|
|
if (!$dryRun) {
|
|
|
|
+ $dispatcher->dispatchPackageEvent(constant('Composer\Script\ScriptEvents::PRE_PACKAGE_'.strtoupper($operation->getJobType())), $operation);
|
|
$installationManager->execute($operation);
|
|
$installationManager->execute($operation);
|
|
|
|
+ $dispatcher->dispatchPackageEvent(constant('Composer\Script\ScriptEvents::POST_PACKAGE_'.strtoupper($operation->getJobType())), $operation);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -177,6 +194,10 @@ EOT
|
|
$output->writeln('<info>Generating autoload files</info>');
|
|
$output->writeln('<info>Generating autoload files</info>');
|
|
$generator = new AutoloadGenerator;
|
|
$generator = new AutoloadGenerator;
|
|
$generator->dump($localRepo, $composer->getPackage(), $installationManager, $installationManager->getVendorPath().'/.composer');
|
|
$generator->dump($localRepo, $composer->getPackage(), $installationManager, $installationManager->getVendorPath().'/.composer');
|
|
|
|
+
|
|
|
|
+ // dispatch post event
|
|
|
|
+ $eventName = $update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD;
|
|
|
|
+ $dispatcher->dispatchCommandEvent($eventName);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|