diff --git a/src/Symfony/Component/Console/Application.php b/src/Symfony/Component/Console/Application.php index 6cc5f5c580ec..4d10c3169973 100644 --- a/src/Symfony/Component/Console/Application.php +++ b/src/Symfony/Component/Console/Application.php @@ -596,6 +596,15 @@ public function find($name) $this->init(); $aliases = []; + + foreach ($this->commands as $command) { + foreach ($command->getAliases() as $alias) { + if (!$this->has($alias)) { + $this->commands[$alias] = $command; + } + } + } + $allCommands = $this->commandLoader ? array_merge($this->commandLoader->getNames(), array_keys($this->commands)) : array_keys($this->commands); $expr = preg_replace_callback('{([^:]+|)}', function ($matches) { return preg_quote($matches[1]).'[^:]*'; }, $name); $commands = preg_grep('{^'.$expr.'}', $allCommands); diff --git a/src/Symfony/Component/Console/Tests/ApplicationTest.php b/src/Symfony/Component/Console/Tests/ApplicationTest.php index 200568f0701d..b920d211aaa8 100644 --- a/src/Symfony/Component/Console/Tests/ApplicationTest.php +++ b/src/Symfony/Component/Console/Tests/ApplicationTest.php @@ -72,8 +72,8 @@ public static function setUpBeforeClass() require_once self::$fixturesPath.'/BarBucCommand.php'; require_once self::$fixturesPath.'/FooSubnamespaced1Command.php'; require_once self::$fixturesPath.'/FooSubnamespaced2Command.php'; - require_once self::$fixturesPath.'/TestTiti.php'; - require_once self::$fixturesPath.'/TestToto.php'; + require_once self::$fixturesPath.'/TestAmbiguousCommandRegistering.php'; + require_once self::$fixturesPath.'/TestAmbiguousCommandRegistering2.php'; } protected function normalizeLineBreaks($text) @@ -164,6 +164,27 @@ public function testRegister() $this->assertEquals('foo', $command->getName(), '->register() registers a new command'); } + public function testRegisterAmbiguous() + { + $code = function (InputInterface $input, OutputInterface $output) { + $output->writeln('It works!'); + }; + + $application = new Application(); + $application + ->register('test-foo') + ->setAliases(['test']) + ->setCode($code); + + $application + ->register('test-bar') + ->setCode($code); + + $tester = new ApplicationTester($application); + $tester->run(['test']); + $this->assertContains('It works!', $tester->getDisplay(true)); + } + public function testAdd() { $application = new Application(); @@ -303,9 +324,9 @@ public function testFindAmbiguousNamespace() public function testFindNonAmbiguous() { $application = new Application(); - $application->add(new \TestTiti()); - $application->add(new \TestToto()); - $this->assertEquals('test-toto', $application->find('test')->getName()); + $application->add(new \TestAmbiguousCommandRegistering()); + $application->add(new \TestAmbiguousCommandRegistering2()); + $this->assertEquals('test-ambiguous', $application->find('test')->getName()); } /** diff --git a/src/Symfony/Component/Console/Tests/Fixtures/TestToto.php b/src/Symfony/Component/Console/Tests/Fixtures/TestAmbiguousCommandRegistering.php similarity index 65% rename from src/Symfony/Component/Console/Tests/Fixtures/TestToto.php rename to src/Symfony/Component/Console/Tests/Fixtures/TestAmbiguousCommandRegistering.php index 2e6a8195938b..bece09fcdde8 100644 --- a/src/Symfony/Component/Console/Tests/Fixtures/TestToto.php +++ b/src/Symfony/Component/Console/Tests/Fixtures/TestAmbiguousCommandRegistering.php @@ -4,19 +4,19 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class TestToto extends Command +class TestAmbiguousCommandRegistering extends Command { protected function configure() { $this - ->setName('test-toto') - ->setDescription('The test-toto command') + ->setName('test-ambiguous') + ->setDescription('The test-ambiguous command') ->setAliases(['test']) ; } protected function execute(InputInterface $input, OutputInterface $output) { - $output->write('test-toto'); + $output->write('test-ambiguous'); } } diff --git a/src/Symfony/Component/Console/Tests/Fixtures/TestTiti.php b/src/Symfony/Component/Console/Tests/Fixtures/TestAmbiguousCommandRegistering2.php similarity index 62% rename from src/Symfony/Component/Console/Tests/Fixtures/TestTiti.php rename to src/Symfony/Component/Console/Tests/Fixtures/TestAmbiguousCommandRegistering2.php index 72e29d2a0a2d..9dde48624546 100644 --- a/src/Symfony/Component/Console/Tests/Fixtures/TestTiti.php +++ b/src/Symfony/Component/Console/Tests/Fixtures/TestAmbiguousCommandRegistering2.php @@ -4,18 +4,18 @@ use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; -class TestTiti extends Command +class TestAmbiguousCommandRegistering2 extends Command { protected function configure() { $this - ->setName('test-titi') - ->setDescription('The test:titi command') + ->setName('test-ambiguous2') + ->setDescription('The test-ambiguous2 command') ; } protected function execute(InputInterface $input, OutputInterface $output) { - $output->write('test-titi'); + $output->write('test-ambiguous2'); } }