From ca6c6b256cb37eff371b0f7cfb19ba58350fb8f8 Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen@paragon-es.de>
Date: Tue, 9 Jun 2020 10:02:59 +0200
Subject: [PATCH] Add support for drupalspoons

---
 .gitignore              |  1 +
 composer.json           |  8 ++++----
 src/CommandProvider.php |  5 +----
 src/Handler.php         | 44 ++++++++++++++++++++++++-----------------
 src/PrepareCommand.php  |  6 ++++--
 5 files changed, 36 insertions(+), 28 deletions(-)

diff --git a/.gitignore b/.gitignore
index 7579f74..b434878 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,3 @@
 vendor
+.env
 composer.lock
diff --git a/composer.json b/composer.json
index 7a1d210..17d0d4e 100644
--- a/composer.json
+++ b/composer.json
@@ -24,14 +24,14 @@
         "source": "https://gitlab.lakedrops.com/composer/plugin/dorgflow/tree/master"
     },
     "require": {
-        "php": ">=7.0",
+        "php": ">=7.2",
         "composer-plugin-api": "^1.0.0",
         "cypresslab/gitelephant": "^2.0|^4.0",
-        "lakedrops/composer-json-utils": "^1.3.2"
+        "lakedrops/composer-json-utils": "^1.5"
     },
     "require-dev": {
-        "composer/composer": "^1.5.0",
-        "phpunit/phpunit": "^4.8.0"
+        "composer/composer": "^1.10",
+        "phpunit/phpunit": "^8.4"
     },
     "minimum-stability": "dev",
     "prefer-stable": true,
diff --git a/src/CommandProvider.php b/src/CommandProvider.php
index f34e7b0..8518e8b 100644
--- a/src/CommandProvider.php
+++ b/src/CommandProvider.php
@@ -3,14 +3,11 @@
 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[]
+   * {@inheritdoc}
    */
   public function getCommands(): array {
     return [
diff --git a/src/Handler.php b/src/Handler.php
index bc75eaf..eabba98 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -2,6 +2,7 @@
 
 namespace LakeDrops\DorgFlow;
 
+use Exception;
 use GitElephant\Repository;
 use LakeDrops\Component\Composer\BaseHandler;
 use Symfony\Component\Filesystem\Filesystem;
@@ -23,22 +24,26 @@ class Handler extends BaseHandler {
       return;
     }
 
-    $options = $this->getOptions();
-    if (empty($options['projects'])) {
-      return;
-    }
-
-    $this->io->write('Dorgflow: Preparing drupal.org packages for development', TRUE);
     $installationManager = $this->composer->getInstallationManager();
-    foreach ($options['projects'] as $project => $version) {
-      $package = $this->getPackage($project);
-      if ($package === NULL) {
+    $options = $this->getOptions();
+    foreach ([
+               'projects' => 'git.drupal.org:project',
+               'drupalspoons' => 'gitlab.com:drupalspoons',
+             ] as $type => $url) {
+      if (empty($options[$type])) {
         continue;
       }
+      $this->io->write('Dorgflow: Preparing ' . $url . ' packages for development', TRUE);
+      foreach ($options[$type] as $project => $version) {
+        $package = $this->getPackage($project);
+        if ($package === NULL) {
+          continue;
+        }
 
-      $path = $installationManager->getInstallPath($package);
-      $this->io->write("- $project => $path", TRUE);
-      $this->prepareWorkingDirectory($path, $project, $version);
+        $path = $installationManager->getInstallPath($package);
+        $this->io->write("- $project => $path", TRUE);
+        $this->prepareWorkingDirectory($path, $project, $version, $url);
+      }
     }
   }
 
@@ -51,8 +56,9 @@ class Handler extends BaseHandler {
   protected function getOptions(): array {
     $extra = $this->composer->getPackage()->getExtra() + ['dorgflow' => []];
     return $extra['dorgflow'] + [
-      'projects' => [],
-    ];
+        'projects' => [],
+        'drupalspoons' => [],
+      ];
   }
 
   /**
@@ -64,10 +70,12 @@ class Handler extends BaseHandler {
    *   Name of the project.
    * @param string $version
    *   Version to checkout.
+   * @param string $url
+   *   Base URL to checkout from.
    */
-  protected function prepareWorkingDirectory($path, $project, $version) {
-    list(, $projectname) = explode('/', $project);
-    $uri = 'git@git.drupal.org:project/' . $projectname . '.git';
+  protected function prepareWorkingDirectory($path, $project, $version, $url) {
+    [, $projectname] = explode('/', $project);
+    $uri = 'git@' . $url . '/' . $projectname . '.git';
 
     // Git Clone the repository into the working directory.
     $repository = Repository::open($path);
@@ -80,7 +88,7 @@ class Handler extends BaseHandler {
         return;
       }
     }
-    catch (\Exception $ex) {
+    catch (Exception $ex) {
       // Ignore the exception and conitue setup.
     }
 
diff --git a/src/PrepareCommand.php b/src/PrepareCommand.php
index 3a0c2d4..19eeea3 100644
--- a/src/PrepareCommand.php
+++ b/src/PrepareCommand.php
@@ -12,8 +12,10 @@ class PrepareCommand extends BaseCommand {
    * {@inheritdoc}
    */
   protected function configure() {
-    $this->setName('lakedrops:dorgflow');
-    $this->setDescription('Prepare drupal.org projects for dorgflow utility.');
+    parent::configure();
+    $this
+      ->setName('lakedrops:dorgflow')
+      ->setDescription('Prepare drupal.org projects for dorgflow utility.');
   }
 
   /**
-- 
GitLab