bug #16123 Command list ordering fix (spdionis, fabpot)
This PR was merged into the 2.3 branch. Discussion ---------- Command list ordering fix | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | n/a | License | MIT Makes sure that global commands are always first. Commits -------2984f8e
fixed previous commit70f2b3e
global commands are always first in command list
This commit is contained in:
commit
136722c9b0
|
@ -134,15 +134,17 @@ class ApplicationDescription
|
||||||
private function sortCommands(array $commands)
|
private function sortCommands(array $commands)
|
||||||
{
|
{
|
||||||
$namespacedCommands = array();
|
$namespacedCommands = array();
|
||||||
|
$globalCommands = array();
|
||||||
foreach ($commands as $name => $command) {
|
foreach ($commands as $name => $command) {
|
||||||
$key = $this->application->extractNamespace($name, 1);
|
$key = $this->application->extractNamespace($name, 1);
|
||||||
if (!$key) {
|
if (!$key) {
|
||||||
$key = '_global';
|
$globalCommands['_global'][$name] = $command;
|
||||||
|
} else {
|
||||||
|
$namespacedCommands[$key][$name] = $command;
|
||||||
}
|
}
|
||||||
|
|
||||||
$namespacedCommands[$key][$name] = $command;
|
|
||||||
}
|
}
|
||||||
ksort($namespacedCommands);
|
ksort($namespacedCommands);
|
||||||
|
$namespacedCommands = array_merge($globalCommands, $namespacedCommands);
|
||||||
|
|
||||||
foreach ($namespacedCommands as &$commandsSet) {
|
foreach ($namespacedCommands as &$commandsSet) {
|
||||||
ksort($commandsSet);
|
ksort($commandsSet);
|
||||||
|
|
|
@ -61,4 +61,52 @@ EOF;
|
||||||
|
|
||||||
$this->assertEquals($output, $commandTester->getDisplay(true));
|
$this->assertEquals($output, $commandTester->getDisplay(true));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testExecuteListsCommandsOrder()
|
||||||
|
{
|
||||||
|
require_once realpath(__DIR__.'/../Fixtures/Foo6Command.php');
|
||||||
|
$application = new Application();
|
||||||
|
$application->add(new \Foo6Command());
|
||||||
|
$commandTester = new CommandTester($command = $application->get('list'));
|
||||||
|
$commandTester->execute(array('command' => $command->getName()), array('decorated' => false));
|
||||||
|
$output = <<<EOF
|
||||||
|
Console Tool
|
||||||
|
|
||||||
|
Usage:
|
||||||
|
command [options] [arguments]
|
||||||
|
|
||||||
|
Options:
|
||||||
|
--help -h Display this help message
|
||||||
|
--quiet -q Do not output any message
|
||||||
|
--verbose -v|vv|vvv Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug
|
||||||
|
--version -V Display this application version
|
||||||
|
--ansi Force ANSI output
|
||||||
|
--no-ansi Disable ANSI output
|
||||||
|
--no-interaction -n Do not ask any interactive question
|
||||||
|
|
||||||
|
Available commands:
|
||||||
|
help Displays help for a command
|
||||||
|
list Lists commands
|
||||||
|
0foo
|
||||||
|
0foo:bar 0foo:bar command
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
$this->assertEquals($output, trim($commandTester->getDisplay(true)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testExecuteListsCommandsOrderRaw()
|
||||||
|
{
|
||||||
|
require_once realpath(__DIR__.'/../Fixtures/Foo6Command.php');
|
||||||
|
$application = new Application();
|
||||||
|
$application->add(new \Foo6Command());
|
||||||
|
$commandTester = new CommandTester($command = $application->get('list'));
|
||||||
|
$commandTester->execute(array('command' => $command->getName(), '--raw' => true));
|
||||||
|
$output = <<<EOF
|
||||||
|
help Displays help for a command
|
||||||
|
list Lists commands
|
||||||
|
0foo:bar 0foo:bar command
|
||||||
|
EOF;
|
||||||
|
|
||||||
|
$this->assertEquals($output, trim($commandTester->getDisplay(true)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
|
||||||
|
class Foo6Command extends Command
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this->setName('0foo:bar')->setDescription('0foo:bar command');
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue