diff --git a/src/Composer/Command/UpdateCommand.php b/src/Composer/Command/UpdateCommand.php index 23178e5b7..95c1fa0be 100644 --- a/src/Composer/Command/UpdateCommand.php +++ b/src/Composer/Command/UpdateCommand.php @@ -80,11 +80,10 @@ EOT protected function execute(InputInterface $input, OutputInterface $output) { $composer = $this->getComposer(true, $input->getOption('no-plugins')); - $packages = $input->getOption('interactive') ? $this->getPackagesInteractively( - $input, - $output, - $composer - ) : $input->getArgument('packages'); + $packages = $input->getArgument('packages'); + if ($input->getOption('interactive')) { + $packages = $this->getPackagesInteractively($input, $output, $composer, $packages); + } if ($input->getOption('no-custom-installers')) { $output->writeln('You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.'); @@ -146,20 +145,10 @@ EOT return $install->run(); } - private function getPackagesInteractively( - InputInterface $input, - OutputInterface $output, - Composer $composer - ) { - if ($input->getArgument('packages')) { - throw new \InvalidArgumentException( - 'The option --interactive does not require an argument' - ); - } - + private function getPackagesInteractively(InputInterface $input, OutputInterface $output, Composer $composer, $packages) + { $packagesMap = $composer->getRepositoryManager() ->getLocalRepository()->getPackages(); - $config = $composer->getConfig(); $requiredPackageNames = array(); foreach ( @@ -174,26 +163,18 @@ EOT foreach ($packagesMap as $package) { $InstalledPackageNames[] = $package->getPrettyName(); } - $names = array_unique( + + $autocompleterValues = array_unique( array_merge($InstalledPackageNames, $requiredPackageNames) ); - $vendorDir = $config->get('vendor-dir', true); - $vendorWildcard = sprintf('%s/*', $vendorDir); - - $autocompleterValues = array($vendorWildcard); - foreach ($names as $name) { - $autocompleterValues[] = $name; - $autocompleterValues[] = sprintf('%s/%s', $vendorDir, $name); - } - $helper = $this->getHelper('question'); $question = new Question( 'Enter package name: ', null ); - $packages = array(); + $packages = is_array($packages) ? $packages : array(); $output->writeln('NB: Empty package ends submission.'); // I couldn't find any better for now! $continue = true; @@ -204,11 +185,7 @@ EOT if (is_string($addedPackage)) { if (!in_array($addedPackage, $packages)) { $packages[] = $addedPackage; - if ($addedPackage === $vendorWildcard) { - $autocompleterValues = array(); - } else { - $autocompleterValues = array_diff($autocompleterValues, array($addedPackage)); - } + $autocompleterValues = array_diff($autocompleterValues, array($addedPackage)); } else { $output->writeln(sprintf('The package "%s" was already added.', $package)); }