bug #35094 [Console] Fix filtering out identical alternatives when there is a command loader (fancyweb)
This PR was merged into the 3.4 branch.
Discussion
----------
[Console] Fix filtering out identical alternatives when there is a command loader
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Tickets | https://github.com/symfony/symfony/issues/35089
| License | MIT
| Doc PR | -
CommandLoader commands needs to be loaded to resolve their names and filter them.
Commits
-------
589e93e3b7
[Console] Fix filtering out identical alternatives when there is a command loader
This commit is contained in:
commit
1908434f72
@ -645,8 +645,13 @@ class Application
|
||||
// filter out aliases for commands which are already on the list
|
||||
if (\count($commands) > 1) {
|
||||
$commandList = $this->commandLoader ? array_merge(array_flip($this->commandLoader->getNames()), $this->commands) : $this->commands;
|
||||
$commands = array_unique(array_filter($commands, function ($nameOrAlias) use ($commandList, $commands, &$aliases) {
|
||||
$commandName = $commandList[$nameOrAlias] instanceof Command ? $commandList[$nameOrAlias]->getName() : $nameOrAlias;
|
||||
$commands = array_unique(array_filter($commands, function ($nameOrAlias) use (&$commandList, $commands, &$aliases) {
|
||||
if (!$commandList[$nameOrAlias] instanceof Command) {
|
||||
$commandList[$nameOrAlias] = $this->commandLoader->get($nameOrAlias);
|
||||
}
|
||||
|
||||
$commandName = $commandList[$nameOrAlias]->getName();
|
||||
|
||||
$aliases[$nameOrAlias] = $commandName;
|
||||
|
||||
return $commandName === $nameOrAlias || !\in_array($commandName, $commands);
|
||||
@ -662,10 +667,6 @@ class Application
|
||||
$maxLen = max(Helper::strlen($abbrev), $maxLen);
|
||||
}
|
||||
$abbrevs = array_map(function ($cmd) use ($commandList, $usableWidth, $maxLen) {
|
||||
if (!$commandList[$cmd] instanceof Command) {
|
||||
$commandList[$cmd] = $this->commandLoader->get($cmd);
|
||||
}
|
||||
|
||||
if ($commandList[$cmd]->isHidden()) {
|
||||
return false;
|
||||
}
|
||||
|
@ -568,6 +568,9 @@ class ApplicationTest extends TestCase
|
||||
$fooCommand->setAliases(['foo2']);
|
||||
|
||||
$application = new Application();
|
||||
$application->setCommandLoader(new FactoryCommandLoader([
|
||||
'foo3' => static function () use ($fooCommand) { return $fooCommand; },
|
||||
]));
|
||||
$application->add($fooCommand);
|
||||
|
||||
$result = $application->find('foo');
|
||||
|
Reference in New Issue
Block a user