|
@@ -273,10 +273,23 @@ class Installer
|
|
|
$this->io->write('<info>Nothing to install or update</info>');
|
|
|
}
|
|
|
|
|
|
+ $suggestedPackages = array();
|
|
|
foreach ($operations as $operation) {
|
|
|
if ($this->verbose) {
|
|
|
$this->io->write((string) $operation);
|
|
|
}
|
|
|
+
|
|
|
+ // collect suggestions
|
|
|
+ if ('install' === $operation->getJobType()) {
|
|
|
+ foreach ($operation->getPackage()->getSuggests() as $target => $reason) {
|
|
|
+ $suggestedPackages[] = array(
|
|
|
+ 'source' => $operation->getPackage()->getPrettyName(),
|
|
|
+ 'target' => $target,
|
|
|
+ 'reason' => $reason,
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
if (!$this->dryRun) {
|
|
|
$this->eventDispatcher->dispatchPackageEvent(constant('Composer\Script\ScriptEvents::PRE_PACKAGE_'.strtoupper($operation->getJobType())), $operation);
|
|
|
|
|
@@ -306,15 +319,20 @@ class Installer
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ // dump suggestions
|
|
|
+ foreach ($suggestedPackages as $suggestion) {
|
|
|
+ $this->io->write($suggestion['source'].' suggests installing '.$suggestion['target'].' ('.$suggestion['reason'].')');
|
|
|
+ }
|
|
|
+
|
|
|
if (!$this->dryRun) {
|
|
|
+ // write lock
|
|
|
if ($this->update || !$this->locker->isLocked()) {
|
|
|
if ($this->locker->setLockData($localRepo->getPackages(), $aliases)) {
|
|
|
$this->io->write('<info>Writing lock file</info>');
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- $localRepo->write();
|
|
|
-
|
|
|
+ // write autoloader
|
|
|
$this->io->write('<info>Generating autoload files</info>');
|
|
|
$generator = new AutoloadGenerator;
|
|
|
$generator->dump($localRepo, $this->package, $this->installationManager, $this->installationManager->getVendorPath().'/.composer');
|