From a671aecbecd287e0fa15aaa8d72513389beea6a0 Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen@paragon-es.de> Date: Tue, 22 Aug 2017 09:45:54 +0200 Subject: [PATCH] Initial code --- composer.json | 11 ++++---- src/Handler.php | 75 ++++++++++++++++++++++++++++++++++++++++--------- src/Plugin.php | 20 ++++++------- 3 files changed, 75 insertions(+), 31 deletions(-) diff --git a/composer.json b/composer.json index f8ed414..e7646ea 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,9 @@ { - "name": "lakedrops/composer-dev-environment", + "name": "lakedrops/dorgflow", "description": "Composer Plugin for development environments", "type": "composer-plugin", "keywords": ["Development"], - "homepage": "https://gitlab.paragon-es.de/lakedrops/composer-dev-environment", + "homepage": "https://gitlab.paragon-es.de/lakedrops/dorgflow", "license": "GPL-2.0+", "authors": [ { @@ -20,8 +20,8 @@ } ], "support": { - "issues": "https://gitlab.paragon-es.de/lakedrops/composer-dev-environment/issues", - "source": "https://gitlab.paragon-es.de/lakedrops/composer-dev-environment/tree/master" + "issues": "https://gitlab.paragon-es.de/lakedrops/dorgflow/issues", + "source": "https://gitlab.paragon-es.de/lakedrops/dorgflow/tree/master" }, "require": { "composer-plugin-api": "^1.0.0", @@ -33,10 +33,11 @@ } }, "extra": { - "class": "LakeDrops\\ComposerDevEnvironment\\Plugin" + "class": "LakeDrops\\DorgFlow\\Plugin" }, "require-dev": { "composer/composer": "dev-master", + "cypresslab/gitelephant": "~1.0", "phpunit/phpunit": "^4.4.0" } } diff --git a/src/Handler.php b/src/Handler.php index 8d86ca6..f1bd431 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -1,16 +1,12 @@ <?php -/** - * @file - * Contains \LakeDrops\ComposerDevEnvironment\Handler. - */ - -namespace LakeDrops\ComposerDevEnvironment; +namespace LakeDrops\DorgFlow; use Composer\Package\PackageInterface; use Composer\Composer; use Composer\IO\IOInterface; use Composer\Script\Event as ScriptEvent; +use GitElephant\Repository; class Handler { @@ -24,11 +20,6 @@ class Handler { */ protected $io; - /** - * @var PackageInterface - */ - protected $drupalCorePackage; - /** * Handler constructor. * @@ -41,12 +32,68 @@ class Handler { } /** - * Post project create event to execute the scaffolding. + * Retrieve a package from the current composer process. + * + * @param string $name + * Name of the package to get from the current composer installation. + * + * @return PackageInterface + */ + protected function getPackage($name) { + return $this->composer->getRepositoryManager()->getLocalRepository()->findPackage($name, '*'); + } + + /** + * Post install/update event to prepare projects for development. * * @param ScriptEvent $event */ - public function test($event) { - print('HALLO, here I am' . PHP_EOL); + public function prepareDevProjects($event) { + + // We only do the fancy stuff for developers + if (!$event->isDevMode()) { + return; + } + + $options = $this->getOptions(); + $installationManager = $this->composer->getInstallationManager(); + + foreach ($options['projects'] as $project => $version) { + $package = $this->getPackage($project); + if (empty($package)) { + continue; + } + + $path = $installationManager->getInstallPath($package); + $this->prepareWorkingDirectory($path, $project, $version, $options['username']); + } + } + + /** + * Retrieve excludes from optional "extra" configuration. + * + * @return array + */ + protected function getOptions() { + $extra = $this->composer->getPackage()->getExtra() + ['dorgflow' => []]; + $options = $extra['dorgflow'] + [ + 'projects' => [], + 'username' => '', + ]; + return $options; + } + + /** + * @inheritDoc + */ + protected function prepareWorkingDirectory($path, $project, $version, $username) { + list(, $projectname) = explode('/', $project); + $repo = $username . '@git.drupal.org/project/' . $projectname . '.git'; + + // Git Clone the repository into the working directory + $repository = Repository::open($path); + $repository->cloneFrom($repo, '.'); + $repository->checkout($version); } } diff --git a/src/Plugin.php b/src/Plugin.php index a60a9e6..e1745fd 100644 --- a/src/Plugin.php +++ b/src/Plugin.php @@ -1,11 +1,6 @@ <?php -/** - * @file - * Contains LakeDrops\ComposerDevEnvironment\Plugin. - */ - -namespace LakeDrops\ComposerDevEnvironment; +namespace LakeDrops\DorgFlow; use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; @@ -14,12 +9,12 @@ use Composer\Plugin\PluginInterface; use Composer\Script\ScriptEvents; /** - * Composer plugin for handling drupal scaffold. + * Composer plugin for preparing Drupal project for development with dorgflow. */ class Plugin implements PluginInterface, EventSubscriberInterface { /** - * @var \LakeDrops\ComposerDevEnvironment\Handler + * @var \LakeDrops\DorgFlow\Handler */ protected $handler; @@ -35,17 +30,18 @@ class Plugin implements PluginInterface, EventSubscriberInterface { */ public static function getSubscribedEvents() { return array( - ScriptEvents::PRE_UPDATE_CMD => 'test', + ScriptEvents::POST_INSTALL_CMD => 'prepareDevProjects', + ScriptEvents::POST_UPDATE_CMD => 'prepareDevProjects', ); } /** - * Post create project event callback. + * Post install/update event callback. * * @param \Composer\Script\Event $event */ - public function test($event) { - $this->handler->test($event); + public function prepareDevProjects($event) { + $this->handler->prepareDevProjects($event); } } -- GitLab