From 4a9bb1d28bb73ccdc39cbb725181727b27af46f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gr=C3=A9goire=20Pineau?= Date: Tue, 8 Dec 2015 11:50:00 +0100 Subject: [PATCH] [Console] Better support for one command app --- src/Symfony/Component/Console/Application.php | 26 ++++++++++++--- .../Console/Tests/ApplicationTest.php | 18 +++++++++++ .../Tests/Fixtures/application_run2.txt | 32 +++++++++---------- 3 files changed, 55 insertions(+), 21 deletions(-) diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php index ae737ad45d..5374084cbc 100644 --- a/src/Symfony/Component/Console/Application.php +++ b/src/Symfony/Component/Console/Application.php @@ -66,6 +66,7 @@ class Application private $dispatcher; private $terminalDimensions; private $defaultCommand; + private $singleCommand; /** * Constructor. @@ -168,7 +169,7 @@ class Application if (true === $input->hasParameterOption(array('--help', '-h'), true)) { if (!$name) { $name = 'help'; - $input = new ArrayInput(array('command' => 'help')); + $input = new ArrayInput(array('command_name' => $this->defaultCommand)); } else { $this->wantHelps = true; } @@ -226,6 +227,13 @@ class Application */ public function getDefinition() { + if ($this->singleCommand) { + $inputDefinition = $this->definition; + $inputDefinition->setArguments(); + + return $inputDefinition; + } + return $this->definition; } @@ -859,7 +867,7 @@ class Application */ protected function getCommandName(InputInterface $input) { - return $input->getFirstArgument(); + return $this->singleCommand ? $this->defaultCommand : $input->getFirstArgument(); } /** @@ -1039,11 +1047,21 @@ class Application /** * Sets the default Command name. * - * @param string $commandName The Command name + * @param string $commandName The Command name + * @param bool $isSingleCommand Set to true if there is only one command in this application */ - public function setDefaultCommand($commandName) + public function setDefaultCommand($commandName, $isSingleCommand = false) { $this->defaultCommand = $commandName; + + if ($isSingleCommand) { + // Ensure the command exist + $this->find($commandName); + + $this->singleCommand = true; + } + + return $this; } private function stringWidth($string) diff --git a/src/Symfony/Component/Console/Tests/ApplicationTest.php b/src/Symfony/Component/Console/Tests/ApplicationTest.php index 954d02eaad..f61cd16b2b 100644 --- a/src/Symfony/Component/Console/Tests/ApplicationTest.php +++ b/src/Symfony/Component/Console/Tests/ApplicationTest.php @@ -1086,6 +1086,24 @@ class ApplicationTest extends \PHPUnit_Framework_TestCase $this->assertEquals('interact called'.PHP_EOL.'called'.PHP_EOL, $tester->getDisplay(), 'Application runs the default set command if different from \'list\' command'); } + public function testSetRunCustomSingleCommand() + { + $command = new \FooCommand(); + + $application = new Application(); + $application->setAutoExit(false); + $application->add($command); + $application->setDefaultCommand($command->getName(), true); + + $tester = new ApplicationTester($application); + + $tester->run(array()); + $this->assertContains('called', $tester->getDisplay()); + + $tester->run(array('--help' => true)); + $this->assertContains('The foo:bar command', $tester->getDisplay()); + } + /** * @requires function posix_isatty */ diff --git a/src/Symfony/Component/Console/Tests/Fixtures/application_run2.txt b/src/Symfony/Component/Console/Tests/Fixtures/application_run2.txt index 0098e9aa26..fe566d76ba 100644 --- a/src/Symfony/Component/Console/Tests/Fixtures/application_run2.txt +++ b/src/Symfony/Component/Console/Tests/Fixtures/application_run2.txt @@ -1,28 +1,26 @@ Usage: - help [options] [--] [] + list [options] [--] [] Arguments: - command The command to execute - command_name The command name [default: "help"] + namespace The namespace name Options: - --format=FORMAT The output format (txt, xml, json, or md) [default: "txt"] - --raw To output raw command help - -h, --help Display this help message - -q, --quiet Do not output any message - -V, --version Display this application version - --ansi Force ANSI output - --no-ansi Disable ANSI output - -n, --no-interaction Do not ask any interactive question - -v|vv|vvv, --verbose Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug + --raw To output raw command list + --format=FORMAT The output format (txt, xml, json, or md) [default: "txt"] Help: - The help command displays help for a given command: + The list command lists all commands: - php app/console help list + php app/console list - You can also output the help in other formats by using the --format option: + You can also display the commands for a specific namespace: - php app/console help --format=xml list + php app/console list test - To display the list of available commands, please use the list command. + You can also output the information in other formats by using the --format option: + + php app/console list --format=xml + + It's also possible to get raw list of commands (useful for embedding command runner): + + php app/console list --raw