diff --git a/src/Composer/Command/CreateProjectCommand.php b/src/Composer/Command/CreateProjectCommand.php
index 5c0039b77..a859ac12a 100644
--- a/src/Composer/Command/CreateProjectCommand.php
+++ b/src/Composer/Command/CreateProjectCommand.php
@@ -120,7 +120,9 @@ EOT
$composer = Factory::create($io);
$installer = Installer::create($io, $composer);
- $installer->run($preferSource);
+ $installer
+ ->setPreferSource($preferSource)
+ ->run();
}
protected function createDownloadManager(IOInterface $io)
diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php
index d06278e7d..7bf90709e 100644
--- a/src/Composer/Command/InstallCommand.php
+++ b/src/Composer/Command/InstallCommand.php
@@ -53,12 +53,14 @@ EOT
$io = $this->getApplication()->getIO();
$install = Installer::create($io, $composer);
- return $install->run(
- (Boolean) $input->getOption('prefer-source'),
- (Boolean) $input->getOption('dry-run'),
- (Boolean) $input->getOption('verbose'),
- (Boolean) $input->getOption('no-install-recommends'),
- (Boolean) $input->getOption('install-suggests')
- );
+ $install
+ ->setDryRun($input->getOption('dry-run'))
+ ->setVerbose($input->getOption('verbose'))
+ ->setPreferSource($input->getOption('prefer-source'))
+ ->setInstallRecommends(!$input->getOption('no-install-recommends'))
+ ->setInstallSuggests($input->getOption('install-suggests'))
+ ;
+
+ return $install->run();
}
}
diff --git a/src/Composer/Command/UpdateCommand.php b/src/Composer/Command/UpdateCommand.php
index cc0960504..7fe888139 100644
--- a/src/Composer/Command/UpdateCommand.php
+++ b/src/Composer/Command/UpdateCommand.php
@@ -51,13 +51,15 @@ EOT
$io = $this->getApplication()->getIO();
$install = Installer::create($io, $composer);
- return $install->run(
- (Boolean)$input->getOption('prefer-source'),
- (Boolean)$input->getOption('dry-run'),
- (Boolean)$input->getOption('verbose'),
- (Boolean)$input->getOption('no-install-recommends'),
- (Boolean)$input->getOption('install-suggests'),
- true
- );
+ $install
+ ->setDryRun($input->getOption('dry-run'))
+ ->setVerbose($input->getOption('verbose'))
+ ->setPreferSource($input->getOption('prefer-source'))
+ ->setInstallRecommends(!$input->getOption('no-install-recommends'))
+ ->setInstallSuggests($input->getOption('install-suggests'))
+ ->setUpdate(true)
+ ;
+
+ return $install->run();
}
}
diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php
index f6fb70c1d..a0f85576a 100644
--- a/src/Composer/Installer.php
+++ b/src/Composer/Installer.php
@@ -75,6 +75,18 @@ class Installer
*/
protected $eventDispatcher;
+ protected $preferSource = false;
+ protected $dryRun = false;
+ protected $verbose = false;
+ protected $installRecommends = true;
+ protected $installSuggests = false;
+ protected $update = false;
+
+ /**
+ * @var RepositoryInterface
+ */
+ protected $additionalInstalledRepository;
+
/**
* Constructor
*
@@ -99,37 +111,27 @@ class Installer
/**
* Run installation (or update)
- *
- * @param Boolean $preferSource
- * @param Boolean $dryRun
- * @param Boolean $verbose
- * @param Boolean $noInstallRecommends
- * @param Boolean $installSuggests
- * @param Boolean $update
- * @param RepositoryInterface $additionalInstalledRepository
*/
- public function run($preferSource = false, $dryRun = false, $verbose = false, $noInstallRecommends = false, $installSuggests = false, $update = false, RepositoryInterface $additionalInstalledRepository = null)
+ public function run()
{
- if ($dryRun) {
- $verbose = true;
+ if ($this->dryRun) {
+ $this->verbose = true;
}
- if ($preferSource) {
+ if ($this->preferSource) {
$this->downloadManager->setPreferSource(true);
}
- $this->repositoryManager = $this->repositoryManager;
-
// create local repo, this contains all packages that are installed in the local project
$localRepo = $this->repositoryManager->getLocalRepository();
// create installed repo, this contains all local packages + platform packages (php & extensions)
$installedRepo = new CompositeRepository(array($localRepo, new PlatformRepository()));
- if ($additionalInstalledRepository) {
- $installedRepo->addRepository($additionalInstalledRepository);
+ if ($this->additionalInstalledRepository) {
+ $installedRepo->addRepository($this->additionalInstalledRepository);
}
// prepare aliased packages
- if (!$update && $this->locker->isLocked()) {
+ if (!$this->update && $this->locker->isLocked()) {
$aliases = $this->locker->getAliases();
} else {
$aliases = $this->package->getAliases();
@@ -152,20 +154,20 @@ class Installer
}
// dispatch pre event
- if (!$dryRun) {
- $eventName = $update ? ScriptEvents::PRE_UPDATE_CMD : ScriptEvents::PRE_INSTALL_CMD;
+ if (!$this->dryRun) {
+ $eventName = $this->update ? ScriptEvents::PRE_UPDATE_CMD : ScriptEvents::PRE_INSTALL_CMD;
$this->eventDispatcher->dispatchCommandEvent($eventName);
}
// creating requirements request
$installFromLock = false;
$request = new Request($pool);
- if ($update) {
+ if ($this->update) {
$this->io->write('Updating dependencies');
$request->updateAll();
- $links = $this->collectLinks($noInstallRecommends, $installSuggests);
+ $links = $this->collectLinks();
foreach ($links as $link) {
$request->install($link->getTarget(), $link->getConstraint());
@@ -192,7 +194,7 @@ class Installer
} else {
$this->io->write('Installing dependencies');
- $links = $this->collectLinks($noInstallRecommends, $installSuggests);
+ $links = $this->collectLinks();
foreach ($links as $link) {
$request->install($link->getTarget(), $link->getConstraint());
@@ -207,7 +209,7 @@ class Installer
$operations = $solver->solve($request);
// force dev packages to be updated to latest reference on update
- if ($update) {
+ if ($this->update) {
foreach ($localRepo->getPackages() as $package) {
if ($package instanceof AliasPackage) {
$package = $package->getAliasOf();
@@ -249,10 +251,10 @@ class Installer
}
foreach ($operations as $operation) {
- if ($verbose) {
+ if ($this->verbose) {
$this->io->write((string) $operation);
}
- if (!$dryRun) {
+ if (!$this->dryRun) {
$this->eventDispatcher->dispatchPackageEvent(constant('Composer\Script\ScriptEvents::PRE_PACKAGE_'.strtoupper($operation->getJobType())), $operation);
// if installing from lock, restore dev packages' references to their locked state
@@ -279,8 +281,8 @@ class Installer
}
}
- if (!$dryRun) {
- if ($update || !$this->locker->isLocked()) {
+ if (!$this->dryRun) {
+ if ($this->update || !$this->locker->isLocked()) {
$this->locker->setLockData($localRepo->getPackages(), $aliases);
$this->io->write('Writing lock file');
}
@@ -292,20 +294,20 @@ class Installer
$generator->dump($localRepo, $this->package, $this->installationManager, $this->installationManager->getVendorPath().'/.composer');
// dispatch post event
- $eventName = $update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD;
+ $eventName = $this->update ? ScriptEvents::POST_UPDATE_CMD : ScriptEvents::POST_INSTALL_CMD;
$this->eventDispatcher->dispatchCommandEvent($eventName);
}
}
- private function collectLinks($noInstallRecommends, $installSuggests)
+ private function collectLinks()
{
$links = $this->package->getRequires();
- if (!$noInstallRecommends) {
+ if ($this->installRecommends) {
$links = array_merge($links, $this->package->getRecommends());
}
- if ($installSuggests) {
+ if ($this->installSuggests) {
$links = array_merge($links, $this->package->getSuggests());
}
@@ -334,4 +336,89 @@ class Installer
$eventDispatcher
);
}
+
+ public function setAdditionalInstalledRepository(RepositoryInterface $additionalInstalledRepository)
+ {
+ $this->additionalInstalledRepository = $additionalInstalledRepository;
+
+ return $this;
+ }
+
+ /**
+ * wether to run in drymode or not
+ *
+ * @param boolean $dryRun
+ * @return Installer
+ */
+ public function setDryRun($dryRun=true)
+ {
+ $this->dryRun = (boolean) $dryRun;
+
+ return $this;
+ }
+
+ /**
+ * install recommend packages
+ *
+ * @param boolean $noInstallRecommends
+ * @return Installer
+ */
+ public function setInstallRecommends($installRecommends=true)
+ {
+ $this->installRecommends = (boolean) $installRecommends;
+
+ return $this;
+ }
+
+ /**
+ * also install suggested packages
+ *
+ * @param boolean $installSuggests
+ * @return Installer
+ */
+ public function setInstallSuggests($installSuggests=true)
+ {
+ $this->installSuggests = (boolean) $installSuggests;
+
+ return $this;
+ }
+
+ /**
+ * prefer source installation
+ *
+ * @param boolean $preferSource
+ * @return Installer
+ */
+ public function setPreferSource($preferSource=true)
+ {
+ $this->preferSource = (boolean) $preferSource;
+
+ return $this;
+ }
+
+ /**
+ * update packages
+ *
+ * @param boolean $update
+ * @return Installer
+ */
+ public function setUpdate($update=true)
+ {
+ $this->update = (boolean) $update;
+
+ return $this;
+ }
+
+ /**
+ * run in verbose mode
+ *
+ * @param boolean $verbose
+ * @return Installer
+ */
+ public function setVerbose($verbose=true)
+ {
+ $this->verbose = (boolean) $verbose;
+
+ return $this;
+ }
}