diff --git a/composer.json b/composer.json index cf50bfe2b58b2abc4caac32aa4f73b47d19ec3ce..972b328887c501b36801e14cabad3587ad300760 100644 --- a/composer.json +++ b/composer.json @@ -24,10 +24,9 @@ "source": "https://gitlab.lakedrops.com/composer/plugin/dorgflow/tree/master" }, "require": { + "php": ">=7.0", "composer-plugin-api": "^1.0.0", - "cypresslab/gitelephant": "~1.0", - "lakedrops/composer-json-utils": "^1.1.0", - "php": ">=5.6" + "lakedrops/composer-json-utils": "^1.3.1" }, "require-dev": { "composer/composer": "^1.5.0", @@ -41,14 +40,6 @@ } }, "extra": { - "class": "LakeDrops\\DorgFlow\\Plugin", - "lakedrops": { - "scripts": { - "dorgflow": { - "callback": "LakeDrops\\DorgFlow\\Plugin::prepare", - "description": "Prepare drupal.org projects for dorgflow utility." - } - } - } + "class": "LakeDrops\\DorgFlow\\Plugin" } } diff --git a/src/CommandProvider.php b/src/CommandProvider.php new file mode 100644 index 0000000000000000000000000000000000000000..f34e7b034a41c334a7f3dc150433a3a6fc3dce96 --- /dev/null +++ b/src/CommandProvider.php @@ -0,0 +1,20 @@ +<?php + +namespace LakeDrops\DorgFlow; + +use Composer\Plugin\Capability\CommandProvider as CommandProviderCapability; +use Composer\Command\BaseCommand; + +class CommandProvider implements CommandProviderCapability { + + /** + * Retrieves an array of commands + * + * @return BaseCommand[] + */ + public function getCommands(): array { + return [ + new PrepareCommand(), + ]; + } +} diff --git a/src/Handler.php b/src/Handler.php index 0df234091a57d12ba333712554f13243fad67ea7..8b1ed8f53c4eb8089217b7df6c348ed98dd63a5a 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -2,7 +2,6 @@ namespace LakeDrops\DorgFlow; -use Composer\Script\Event; use GitElephant\Repository; use LakeDrops\Component\Composer\BaseHandler; use Symfony\Component\Filesystem\Filesystem; @@ -16,14 +15,11 @@ class Handler extends BaseHandler { /** * Post install/update event to prepare projects for development. - * - * @param \Composer\Script\Event $event - * The event that triggered the call of this function. */ - public function prepareDevProjects(Event $event) { + public function prepareDevProjects() { // We only do the fancy stuff for developers. - if (!$event->isDevMode()) { + if (!$this->isDevMode()) { return; } @@ -36,7 +32,7 @@ class Handler extends BaseHandler { $installationManager = $this->composer->getInstallationManager(); foreach ($options['projects'] as $project => $version) { $package = $this->getPackage($project); - if (empty($package)) { + if ($package === NULL) { continue; } @@ -52,7 +48,7 @@ class Handler extends BaseHandler { * @return array * The options. */ - protected function getOptions() { + protected function getOptions(): array { $extra = $this->composer->getPackage()->getExtra() + ['dorgflow' => []]; return $extra['dorgflow'] + [ 'projects' => [], @@ -79,7 +75,7 @@ class Handler extends BaseHandler { try { $origin = $repository->getRemote('origin', FALSE); - if ($origin && $origin->getFetchURL() == $uri) { + if ($origin && $origin->getFetchURL() === $uri) { // Already setup correctly. return; } @@ -97,7 +93,7 @@ class Handler extends BaseHandler { $repository->fetch(); $repository->checkout($version); $repository->getCaller()->execute('branch --set-upstream-to origin/' . $version . ' ' . $version); - $this->io->write(" - completed", TRUE); + $this->io->write(' - completed', TRUE); } } diff --git a/src/Plugin.php b/src/Plugin.php index b99f1261790cde9a8f1ff5b35b742a0f166f9c03..ebd0dae67ad712291a1dad1be094fa3f208f44cf 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -21,7 +21,16 @@ class Plugin extends BasePlugin { /** * {@inheritdoc} */ - public static function getSubscribedEvents() { + public function getCapabilities(): array { + return [ + \Composer\Plugin\Capability\CommandProvider::class => CommandProvider::class, + ]; + } + + /** + * {@inheritdoc} + */ + public static function getSubscribedEvents(): array { return array( ScriptEvents::POST_INSTALL_CMD => 'prepareDevProjects', ScriptEvents::POST_UPDATE_CMD => 'prepareDevProjects', @@ -35,18 +44,11 @@ class Plugin extends BasePlugin { * The event that triggered the call of this function. */ public function prepareDevProjects(Event $event) { - $this->handler->prepareDevProjects($event); - } - - /** - * Script callback for putting in composer scripts to prepare the project. - * - * @param \Composer\Script\Event $event - * The event that triggered the call of this function. - */ - public static function prepare(Event $event) { - $handler = new Handler($event->getComposer(), $event->getIO()); - $handler->prepareDevProjects($event); + /** @var Handler $handler */ + $handler = $this->handler; + $handler + ->setEvent($event) + ->prepareDevProjects(); } } diff --git a/src/PrepareCommand.php b/src/PrepareCommand.php new file mode 100644 index 0000000000000000000000000000000000000000..3a0c2d40c3f40f55a3a310aed8b2048884e37fd5 --- /dev/null +++ b/src/PrepareCommand.php @@ -0,0 +1,36 @@ +<?php + +namespace LakeDrops\DorgFlow; + +use LakeDrops\Component\Composer\BaseCommand; +use Symfony\Component\Console\Input\InputInterface; +use Symfony\Component\Console\Output\OutputInterface; + +class PrepareCommand extends BaseCommand { + + /** + * {@inheritdoc} + */ + protected function configure() { + $this->setName('lakedrops:dorgflow'); + $this->setDescription('Prepare drupal.org projects for dorgflow utility.'); + } + + /** + * {@inheritdoc} + */ + public function getHandlerClass() { + return Handler::class; + } + + /** + * {@inheritdoc} + */ + protected function execute(InputInterface $input, OutputInterface $output) { + parent::execute($input, $output); + /** @var Handler $handler */ + $handler = $this->handler; + $handler->prepareDevProjects(); + } + +}