[Console] Commands with an alias should not be recognized as ambiguous
This commit is contained in:
parent
75d1dd45e5
commit
ae7ee46465
|
@ -596,6 +596,15 @@ class Application
|
|||
$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);
|
||||
|
|
|
@ -72,8 +72,8 @@ class ApplicationTest extends TestCase
|
|||
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 @@ class ApplicationTest extends TestCase
|
|||
$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 @@ class ApplicationTest extends TestCase
|
|||
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());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -4,19 +4,19 @@ use Symfony\Component\Console\Command\Command;
|
|||
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');
|
||||
}
|
||||
}
|
|
@ -4,18 +4,18 @@ use Symfony\Component\Console\Command\Command;
|
|||
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');
|
||||
}
|
||||
}
|
Reference in New Issue