From 69740bbbee1eaed1876ff9848c6d94105982fe97 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Sun, 30 Oct 2016 14:29:47 -0700 Subject: [PATCH] Refactor some common logic in Command classes --- src/Composer/Command/BaseCommand.php | 36 ++++++++++++++++++ src/Composer/Command/CreateProjectCommand.php | 37 +------------------ src/Composer/Command/InstallCommand.php | 21 +---------- src/Composer/Command/UpdateCommand.php | 21 +---------- 4 files changed, 40 insertions(+), 75 deletions(-) diff --git a/src/Composer/Command/BaseCommand.php b/src/Composer/Command/BaseCommand.php index aed62b1a2..d6b695ca8 100644 --- a/src/Composer/Command/BaseCommand.php +++ b/src/Composer/Command/BaseCommand.php @@ -13,6 +13,7 @@ namespace Composer\Command; use Composer\Composer; +use Composer\Config; use Composer\Console\Application; use Composer\IO\IOInterface; use Composer\IO\NullIO; @@ -128,4 +129,39 @@ abstract class BaseCommand extends Command parent::initialize($input, $output); } + + /** + * Returns preferSource and preferDist values based on the configuration. + * + * @param Config $config + * @param InputInterface $input + * @param bool $keepVcsRequiresPreferSource + * + * @return bool[] An array composed of the preferSource and preferDist values + */ + protected function getPreferredInstallOptions(Config $config, InputInterface $input, $keepVcsRequiresPreferSource = false) + { + $preferSource = false; + $preferDist = false; + + switch ($config->get('preferred-install')) { + case 'source': + $preferSource = true; + break; + case 'dist': + $preferDist = true; + break; + case 'auto': + default: + // noop + break; + } + + if ($input->getOption('prefer-source') || $input->getOption('prefer-dist') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'))) { + $preferSource = $input->getOption('prefer-source') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs')); + $preferDist = $input->getOption('prefer-dist'); + } + + return array($preferSource, $preferDist); + } } diff --git a/src/Composer/Command/CreateProjectCommand.php b/src/Composer/Command/CreateProjectCommand.php index 7e5a41d65..796dbdeb9 100644 --- a/src/Composer/Command/CreateProjectCommand.php +++ b/src/Composer/Command/CreateProjectCommand.php @@ -111,7 +111,7 @@ EOT $config = Factory::createConfig(); $io = $this->getIO(); - $this->updatePreferredOptions($config, $input, $preferSource, $preferDist, true); + list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input, true); if ($input->getOption('dev')) { $io->writeError('You are using the deprecated option "dev". Dev packages are installed by default now.'); @@ -168,8 +168,7 @@ EOT $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ROOT_PACKAGE_INSTALL, $installDevPackages); } - $rootPackageConfig = $composer->getConfig(); - $this->updatePreferredOptions($rootPackageConfig, $input, $preferSource, $preferDist); + list($preferSource, $preferDist) = $this->getPreferredInstallOptions($composer->getConfig(), $input); // install dependencies of the created project if ($noInstall === false) { @@ -371,36 +370,4 @@ EOT { return new InstallationManager(); } - - /** - * Updated preferSource or preferDist based on the preferredInstall config option - * @param Config $config - * @param InputInterface $input - * @param bool $preferSource - * @param bool $preferDist - * @param bool $keepVcsRequiresPreferSource - */ - protected function updatePreferredOptions(Config $config, InputInterface $input, &$preferSource, &$preferDist, $keepVcsRequiresPreferSource = false) - { - $preferSource = false; - $preferDist = false; - - switch ($config->get('preferred-install')) { - case 'source': - $preferSource = true; - break; - case 'dist': - $preferDist = true; - break; - case 'auto': - default: - // noop - break; - } - - if ($input->getOption('prefer-source') || $input->getOption('prefer-dist') || ($keepVcsRequiresPreferSource && $input->getOption('keep-vcs'))) { - $preferSource = $input->getOption('prefer-source') || ($keepVcsRequiresPreferSource && $input->getOption('keep-vcs')); - $preferDist = $input->getOption('prefer-dist'); - } - } } diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php index db26b5dac..3a007b557 100644 --- a/src/Composer/Command/InstallCommand.php +++ b/src/Composer/Command/InstallCommand.php @@ -89,27 +89,8 @@ EOT $install = Installer::create($io, $composer); - $preferSource = false; - $preferDist = false; - $config = $composer->getConfig(); - - switch ($config->get('preferred-install')) { - case 'source': - $preferSource = true; - break; - case 'dist': - $preferDist = true; - break; - case 'auto': - default: - // noop - break; - } - if ($input->getOption('prefer-source') || $input->getOption('prefer-dist')) { - $preferSource = $input->getOption('prefer-source'); - $preferDist = $input->getOption('prefer-dist'); - } + list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input); $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $config->get('classmap-authoritative'); diff --git a/src/Composer/Command/UpdateCommand.php b/src/Composer/Command/UpdateCommand.php index f43f5f4f7..ec04e1285 100644 --- a/src/Composer/Command/UpdateCommand.php +++ b/src/Composer/Command/UpdateCommand.php @@ -123,27 +123,8 @@ EOT $install = Installer::create($io, $composer); - $preferSource = false; - $preferDist = false; - $config = $composer->getConfig(); - - switch ($config->get('preferred-install')) { - case 'source': - $preferSource = true; - break; - case 'dist': - $preferDist = true; - break; - case 'auto': - default: - // noop - break; - } - if ($input->getOption('prefer-source') || $input->getOption('prefer-dist')) { - $preferSource = $input->getOption('prefer-source'); - $preferDist = $input->getOption('prefer-dist'); - } + list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input); $optimize = $input->getOption('optimize-autoloader') || $config->get('optimize-autoloader'); $authoritative = $input->getOption('classmap-authoritative') || $config->get('classmap-authoritative');