[Console] removed the special treatment of aliases in Application

This commit is contained in:
Fabien Potencier 2011-06-07 18:14:15 +02:00
parent facff73049
commit 7d3e20d87d

View File

@ -47,7 +47,6 @@ use Symfony\Component\Console\Helper\DialogHelper;
class Application
{
private $commands;
private $aliases;
private $wantHelps = false;
private $runningCommand;
private $name;
@ -72,7 +71,6 @@ class Application
$this->catchExceptions = true;
$this->autoExit = true;
$this->commands = array();
$this->aliases = array();
$this->helperSet = new HelperSet(array(
new FormatterHelper(),
new DialogHelper(),
@ -390,7 +388,7 @@ class Application
$this->commands[$command->getName()] = $command;
foreach ($command->getAliases() as $alias) {
$this->aliases[$alias] = $command;
$this->commands[$alias] = $command;
}
return $command;
@ -409,11 +407,11 @@ class Application
*/
public function get($name)
{
if (!isset($this->commands[$name]) && !isset($this->aliases[$name])) {
if (!isset($this->commands[$name])) {
throw new \InvalidArgumentException(sprintf('The command "%s" does not exist.', $name));
}
$command = isset($this->commands[$name]) ? $this->commands[$name] : $this->aliases[$name];
$command = $this->commands[$name];
if ($this->wantHelps) {
$this->wantHelps = false;
@ -438,7 +436,7 @@ class Application
*/
public function has($name)
{
return isset($this->commands[$name]) || isset($this->aliases[$name]);
return isset($this->commands[$name]);
}
/**
@ -452,18 +450,14 @@ class Application
{
$namespaces = array();
foreach ($this->commands as $command) {
if ($namespace = $this->extractNamespace($command->getName())) {
$namespaces[] = $namespace;
}
$namespaces[] = $this->extractNamespace($command->getName());
foreach ($command->getAliases() as $alias) {
if ($namespace = $this->extractNamespace($alias)) {
$namespaces[] = $namespace;
}
$namespaces[] = $this->extractNamespace($alias);
}
}
return array_unique($namespaces);
return array_unique(array_filter($namespaces));
}
/**
@ -532,7 +526,7 @@ class Application
}
}
$abbrevs = static::getAbbreviations($commands);
$abbrevs = static::getAbbreviations(array_unique($commands));
if (isset($abbrevs[$searchName]) && 1 == count($abbrevs[$searchName])) {
return $this->get($abbrevs[$searchName][0]);
}
@ -544,7 +538,16 @@ class Application
}
// aliases
$abbrevs = static::getAbbreviations(array_keys($this->aliases));
$aliases = array();
foreach ($this->commands as $command) {
foreach ($command->getAliases() as $alias) {
if ($this->extractNamespace($alias) == $namespace) {
$aliases[] = $alias;
}
}
}
$abbrevs = static::getAbbreviations(array_unique($aliases));
if (!isset($abbrevs[$searchName])) {
throw new \InvalidArgumentException(sprintf('Command "%s" is not defined.', $name));
}
@ -642,10 +645,8 @@ class Application
$messages[] = '<comment>'.$space.'</comment>';
}
foreach ($commands as $command) {
$aliases = $command->getAliases() ? '<comment> ('.implode(', ', $command->getAliases()).')</comment>' : '';
$messages[] = sprintf(" <info>%-${width}s</info> %s%s", $command->getName(), $command->getDescription(), $aliases);
foreach ($commands as $name => $command) {
$messages[] = sprintf(" <info>%-${width}s</info> %s", $name, $command->getDescription());
}
}
@ -685,11 +686,11 @@ class Application
$namespaceArrayXML->setAttribute('id', $space);
}
foreach ($commands as $command) {
foreach ($commands as $name => $command) {
if (!$namespace) {
$commandXML = $dom->createElement('command');
$namespaceArrayXML->appendChild($commandXML);
$commandXML->appendChild($dom->createTextNode($command->getName()));
$commandXML->appendChild($dom->createTextNode($name));
}
$node = $command->asXml(true)->getElementsByTagName('command')->item(0);
@ -793,15 +794,11 @@ class Application
{
$namespacedCommands = array();
foreach ($commands as $name => $command) {
$key = $this->extractNamespace($command->getName());
$key = $this->extractNamespace($name, 1);
if (!$key) {
$key = '_global';
}
if (!isset($namespacedCommands[$key])) {
$namespacedCommands[$key] = array();
}
$namespacedCommands[$key][$name] = $command;
}
ksort($namespacedCommands);
@ -825,12 +822,11 @@ class Application
return sprintf('%s, %s%s', $abbrevs[0], $abbrevs[1], count($abbrevs) > 2 ? sprintf(' and %d more', count($abbrevs) - 2) : '');
}
private function extractNamespace($name)
private function extractNamespace($name, $limit = null)
{
if (false !== $pos = strrpos($name, ':')) {
return substr($name, 0, $pos);
}
$parts = explode(':', $name);
array_pop($parts);
return '';
return implode(':', null === $limit ? $parts : array_slice($parts, 0, $limit));
}
}