-
Notifications
You must be signed in to change notification settings - Fork 0
/
CommandProvider.php
82 lines (69 loc) · 2.22 KB
/
CommandProvider.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
<?php
/*
* This file is part of the Installer package.
*
* (c) EXSyst
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace EXSyst\Installer;
use Composer\Command\BaseCommand;
use Composer\Plugin\Capability\CommandProvider as CommandProviderCapability;
use EXSyst\Installer\Symfony\Configurator\BundleConfigurator;
use EXSyst\Installer\Symfony\Configurator\DunglasActionConfigurator;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
/**
* @internal
*/
class CommandProvider implements CommandProviderCapability
{
public function getCommands()
{
return [new ConfigureCommand()];
}
}
/**
* @internal
*/
class ConfigureCommand extends BaseCommand
{
private $configurators;
protected function configure()
{
$this
->setName('configure')
->addArgument('package', InputArgument::REQUIRED, 'The package you want to configure');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$composer = $this->getComposer();
$repository = $composer->getRepositoryManager()->getLocalRepository();
$package = $repository->findPackage($input->getArgument('package'), '*');
if (null === $package) {
throw new \LogicException(sprintf('Package "%s" not found.', $input->getArgument('package')));
}
$io = $this->getIO();
$project = new Project($composer, $io, $package);
foreach ($this->getConfigurators() as $configurator) {
if ($configurator->supports($project)) {
$configurator->configure($project);
$io->write('');
return;
}
}
$io->write([sprintf('No configurator found for "%s".', $package->getName()), '']);
}
private function getConfigurators(): array
{
if (null === $this->configurators) {
$this->configurators = [
new DunglasActionConfigurator(),
new BundleConfigurator(),
];
}
return $this->configurators;
}
}