1
0
Fork 0

Allow the 'composer remove --unused' command to run in non-interactive mode (#11166)

pull/11169/head
PrinsFrank 2022-11-03 13:11:34 +01:00 committed by GitHub
parent 45af4e3e20
commit 0fca3e5521
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 15 additions and 17 deletions

View File

@ -20,6 +20,7 @@ use Composer\Plugin\CommandEvent;
use Composer\Plugin\PluginEvents; use Composer\Plugin\PluginEvents;
use Composer\Json\JsonFile; use Composer\Json\JsonFile;
use Composer\Factory; use Composer\Factory;
use Symfony\Component\Console\Exception\InvalidArgumentException;
use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputInterface;
use Composer\Console\Input\InputOption; use Composer\Console\Input\InputOption;
use Composer\Console\Input\InputArgument; use Composer\Console\Input\InputArgument;
@ -44,7 +45,7 @@ class RemoveCommand extends BaseCommand
->setName('remove') ->setName('remove')
->setDescription('Removes a package from the require or require-dev') ->setDescription('Removes a package from the require or require-dev')
->setDefinition([ ->setDefinition([
new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::REQUIRED, 'Packages that should be removed.', null, $this->suggestRootRequirement()), new InputArgument('packages', InputArgument::IS_ARRAY, 'Packages that should be removed.', null, $this->suggestRootRequirement()),
new InputOption('dev', null, InputOption::VALUE_NONE, 'Removes a package from the require-dev section.'), new InputOption('dev', null, InputOption::VALUE_NONE, 'Removes a package from the require-dev section.'),
new InputOption('dry-run', null, InputOption::VALUE_NONE, 'Outputs the operations but will not execute anything (implicitly enables --verbose).'), new InputOption('dry-run', null, InputOption::VALUE_NONE, 'Outputs the operations but will not execute anything (implicitly enables --verbose).'),
new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'), new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
@ -79,10 +80,17 @@ EOT
} }
/** /**
* @return void * @throws \Seld\JsonLint\ParsingException
*/ */
protected function interact(InputInterface $input, OutputInterface $output) protected function execute(InputInterface $input, OutputInterface $output)
{ {
if ($input->getArgument('packages') === [] && !$input->getOption('unused')) {
throw new InvalidArgumentException('Not enough arguments (missing: "packages")');
}
$packages = $input->getArgument('packages');
$packages = array_map('strtolower', $packages);
if ($input->getOption('unused')) { if ($input->getOption('unused')) {
$composer = $this->requireComposer(); $composer = $this->requireComposer();
$locker = $composer->getLocker(); $locker = $composer->getLocker();
@ -117,24 +125,14 @@ EOT
foreach ($lockedPackages as $package) { foreach ($lockedPackages as $package) {
$unused[] = $package->getName(); $unused[] = $package->getName();
} }
$input->setArgument('packages', array_merge($input->getArgument('packages'), $unused)); $packages = array_merge($packages, $unused);
if (count($input->getArgument('packages')) === 0) { if (count($packages) === 0) {
$this->getIO()->writeError('<info>No unused packages to remove</info>'); $this->getIO()->writeError('<info>No unused packages to remove</info>');
$this->setCode(static function (): int {
return 0; return 0;
});
} }
} }
}
/**
* @throws \Seld\JsonLint\ParsingException
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
$packages = $input->getArgument('packages');
$packages = array_map('strtolower', $packages);
$file = Factory::getComposerFile(); $file = Factory::getComposerFile();