Merge branch '2.8' into 3.3
* 2.8: [Serializer] Correct typing mistake in DocBlock [Config] Fix closure CS PHP CS Fixer: use PHPUnit Migration ruleset [Console] Commands with an alias should not be recognized as ambiguous
This commit is contained in:
commit
67ceb50b1b
@ -8,9 +8,10 @@ return PhpCsFixer\Config::create()
|
|||||||
->setRules(array(
|
->setRules(array(
|
||||||
'@Symfony' => true,
|
'@Symfony' => true,
|
||||||
'@Symfony:risky' => true,
|
'@Symfony:risky' => true,
|
||||||
|
'@PHPUnit48Migration:risky' => true,
|
||||||
|
'php_unit_no_expectation_annotation' => false, // part of `PHPUnitXYMigration:risky` ruleset, to be enabled when PHPUnit 4.x support will be dropped, as we don't want to rewrite exceptions handling twice
|
||||||
'array_syntax' => array('syntax' => 'long'),
|
'array_syntax' => array('syntax' => 'long'),
|
||||||
'protected_to_private' => false,
|
'protected_to_private' => false,
|
||||||
'php_unit_dedicate_assert' => array('target' => '3.5'),
|
|
||||||
))
|
))
|
||||||
->setRiskyAllowed(true)
|
->setRiskyAllowed(true)
|
||||||
->setFinder(
|
->setFinder(
|
||||||
|
@ -550,7 +550,7 @@ class Application
|
|||||||
public function find($name)
|
public function find($name)
|
||||||
{
|
{
|
||||||
$this->init();
|
$this->init();
|
||||||
|
$aliases = array();
|
||||||
$allCommands = array_keys($this->commands);
|
$allCommands = array_keys($this->commands);
|
||||||
$expr = preg_replace_callback('{([^:]+|)}', function ($matches) { return preg_quote($matches[1]).'[^:]*'; }, $name);
|
$expr = preg_replace_callback('{([^:]+|)}', function ($matches) { return preg_quote($matches[1]).'[^:]*'; }, $name);
|
||||||
$commands = preg_grep('{^'.$expr.'}', $allCommands);
|
$commands = preg_grep('{^'.$expr.'}', $allCommands);
|
||||||
@ -578,14 +578,15 @@ class Application
|
|||||||
// filter out aliases for commands which are already on the list
|
// filter out aliases for commands which are already on the list
|
||||||
if (count($commands) > 1) {
|
if (count($commands) > 1) {
|
||||||
$commandList = $this->commands;
|
$commandList = $this->commands;
|
||||||
$commands = array_filter($commands, function ($nameOrAlias) use ($commandList, $commands) {
|
$commands = array_filter($commands, function ($nameOrAlias) use ($commandList, $commands, &$aliases) {
|
||||||
$commandName = $commandList[$nameOrAlias]->getName();
|
$commandName = $commandList[$nameOrAlias]->getName();
|
||||||
|
$aliases[$nameOrAlias] = $commandName;
|
||||||
|
|
||||||
return $commandName === $nameOrAlias || !in_array($commandName, $commands);
|
return $commandName === $nameOrAlias || !in_array($commandName, $commands);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
$exact = in_array($name, $commands, true);
|
$exact = in_array($name, $commands, true) || isset($aliases[$name]);
|
||||||
if (count($commands) > 1 && !$exact) {
|
if (count($commands) > 1 && !$exact) {
|
||||||
$usableWidth = $this->terminal->getWidth() - 10;
|
$usableWidth = $this->terminal->getWidth() - 10;
|
||||||
$abbrevs = array_values($commands);
|
$abbrevs = array_values($commands);
|
||||||
|
@ -51,6 +51,8 @@ class ApplicationTest extends TestCase
|
|||||||
require_once self::$fixturesPath.'/BarBucCommand.php';
|
require_once self::$fixturesPath.'/BarBucCommand.php';
|
||||||
require_once self::$fixturesPath.'/FooSubnamespaced1Command.php';
|
require_once self::$fixturesPath.'/FooSubnamespaced1Command.php';
|
||||||
require_once self::$fixturesPath.'/FooSubnamespaced2Command.php';
|
require_once self::$fixturesPath.'/FooSubnamespaced2Command.php';
|
||||||
|
require_once self::$fixturesPath.'/TestTiti.php';
|
||||||
|
require_once self::$fixturesPath.'/TestToto.php';
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function normalizeLineBreaks($text)
|
protected function normalizeLineBreaks($text)
|
||||||
@ -234,6 +236,14 @@ class ApplicationTest extends TestCase
|
|||||||
$application->findNamespace('f');
|
$application->findNamespace('f');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testFindNonAmbiguous()
|
||||||
|
{
|
||||||
|
$application = new Application();
|
||||||
|
$application->add(new \TestTiti());
|
||||||
|
$application->add(new \TestToto());
|
||||||
|
$this->assertEquals('test-toto', $application->find('test')->getName());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
|
* @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
|
||||||
* @expectedExceptionMessage There are no commands defined in the "bar" namespace.
|
* @expectedExceptionMessage There are no commands defined in the "bar" namespace.
|
||||||
|
21
src/Symfony/Component/Console/Tests/Fixtures/TestTiti.php
Normal file
21
src/Symfony/Component/Console/Tests/Fixtures/TestTiti.php
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class TestTiti extends Command
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setName('test-titi')
|
||||||
|
->setDescription('The test:titi command')
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$output->write('test-titi');
|
||||||
|
}
|
||||||
|
}
|
22
src/Symfony/Component/Console/Tests/Fixtures/TestToto.php
Normal file
22
src/Symfony/Component/Console/Tests/Fixtures/TestToto.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
use Symfony\Component\Console\Command\Command;
|
||||||
|
use Symfony\Component\Console\Input\InputInterface;
|
||||||
|
use Symfony\Component\Console\Output\OutputInterface;
|
||||||
|
|
||||||
|
class TestToto extends Command
|
||||||
|
{
|
||||||
|
protected function configure()
|
||||||
|
{
|
||||||
|
$this
|
||||||
|
->setName('test-toto')
|
||||||
|
->setDescription('The test-toto command')
|
||||||
|
->setAliases(array('test'))
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function execute(InputInterface $input, OutputInterface $output)
|
||||||
|
{
|
||||||
|
$output->write('test-toto');
|
||||||
|
}
|
||||||
|
}
|
@ -54,7 +54,7 @@ class CustomNormalizer implements NormalizerInterface, DenormalizerInterface, Se
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if the given class implements the NormalizableInterface.
|
* Checks if the given class implements the DenormalizableInterface.
|
||||||
*
|
*
|
||||||
* @param mixed $data Data to denormalize from
|
* @param mixed $data Data to denormalize from
|
||||||
* @param string $type The class to which the data should be denormalized
|
* @param string $type The class to which the data should be denormalized
|
||||||
|
Reference in New Issue
Block a user