bug #25030 [Console] Fix ability to disable lazy commands (chalasr)
This PR was merged into the 3.4 branch.
Discussion
----------
[Console] Fix ability to disable lazy commands
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | n/a
| License | MIT
| Doc PR | n/a
Properly throw when running them and don't show them in the list, as for non lazy ones.
Commits
-------
6787d8e
[Console] Fix disabling lazy commands
This commit is contained in:
commit
fa7dd8ebbe
@ -455,15 +455,12 @@ class Application
|
|||||||
{
|
{
|
||||||
$this->init();
|
$this->init();
|
||||||
|
|
||||||
if (isset($this->commands[$name])) {
|
if (!$this->has($name)) {
|
||||||
$command = $this->commands[$name];
|
|
||||||
} elseif ($this->commandLoader && $this->commandLoader->has($name)) {
|
|
||||||
$command = $this->commandLoader->get($name);
|
|
||||||
$this->add($command);
|
|
||||||
} else {
|
|
||||||
throw new CommandNotFoundException(sprintf('The command "%s" does not exist.', $name));
|
throw new CommandNotFoundException(sprintf('The command "%s" does not exist.', $name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$command = $this->commands[$name];
|
||||||
|
|
||||||
if ($this->wantHelps) {
|
if ($this->wantHelps) {
|
||||||
$this->wantHelps = false;
|
$this->wantHelps = false;
|
||||||
|
|
||||||
@ -487,7 +484,7 @@ class Application
|
|||||||
{
|
{
|
||||||
$this->init();
|
$this->init();
|
||||||
|
|
||||||
return isset($this->commands[$name]) || ($this->commandLoader && $this->commandLoader->has($name));
|
return isset($this->commands[$name]) || ($this->commandLoader && $this->commandLoader->has($name) && $this->add($this->commandLoader->get($name)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -649,7 +646,7 @@ class Application
|
|||||||
|
|
||||||
$commands = $this->commands;
|
$commands = $this->commands;
|
||||||
foreach ($this->commandLoader->getNames() as $name) {
|
foreach ($this->commandLoader->getNames() as $name) {
|
||||||
if (!isset($commands[$name])) {
|
if (!isset($commands[$name]) && $this->has($name)) {
|
||||||
$commands[$name] = $this->get($name);
|
$commands[$name] = $this->get($name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -666,7 +663,7 @@ class Application
|
|||||||
|
|
||||||
if ($this->commandLoader) {
|
if ($this->commandLoader) {
|
||||||
foreach ($this->commandLoader->getNames() as $name) {
|
foreach ($this->commandLoader->getNames() as $name) {
|
||||||
if (!isset($commands[$name]) && $namespace === $this->extractNamespace($name, substr_count($namespace, ':') + 1)) {
|
if (!isset($commands[$name]) && $namespace === $this->extractNamespace($name, substr_count($namespace, ':') + 1) && $this->has($name)) {
|
||||||
$commands[$name] = $this->get($name);
|
$commands[$name] = $this->get($name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1532,6 +1532,30 @@ class ApplicationTest extends TestCase
|
|||||||
$this->assertSame(array('lazy:alias', 'lazy:alias2'), $command->getAliases());
|
$this->assertSame(array('lazy:alias', 'lazy:alias2'), $command->getAliases());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \Symfony\Component\Console\Exception\CommandNotFoundException
|
||||||
|
*/
|
||||||
|
public function testGetDisabledLazyCommand()
|
||||||
|
{
|
||||||
|
$application = new Application();
|
||||||
|
$application->setCommandLoader(new FactoryCommandLoader(array('disabled' => function () { return new DisabledCommand(); })));
|
||||||
|
$application->get('disabled');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testHasReturnsFalseForDisabledLazyCommand()
|
||||||
|
{
|
||||||
|
$application = new Application();
|
||||||
|
$application->setCommandLoader(new FactoryCommandLoader(array('disabled' => function () { return new DisabledCommand(); })));
|
||||||
|
$this->assertFalse($application->has('disabled'));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testAllExcludesDisabledLazyCommand()
|
||||||
|
{
|
||||||
|
$application = new Application();
|
||||||
|
$application->setCommandLoader(new FactoryCommandLoader(array('disabled' => function () { return new DisabledCommand(); })));
|
||||||
|
$this->assertArrayNotHasKey('disabled', $application->all());
|
||||||
|
}
|
||||||
|
|
||||||
protected function getDispatcher($skipCommand = false)
|
protected function getDispatcher($skipCommand = false)
|
||||||
{
|
{
|
||||||
$dispatcher = new EventDispatcher();
|
$dispatcher = new EventDispatcher();
|
||||||
@ -1634,3 +1658,11 @@ class LazyCommand extends Command
|
|||||||
$output->writeln('lazy-command called');
|
$output->writeln('lazy-command called');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class DisabledCommand extends Command
|
||||||
|
{
|
||||||
|
public function isEnabled()
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user