Skip to content
Snippets Groups Projects
Commit a671aecb authored by jurgenhaas's avatar jurgenhaas
Browse files

Initial code

parent 548bb707
Branches
Tags
No related merge requests found
{
"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"
}
}
<?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);
}
}
<?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);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment