From 79c4b8b6c12bea27e607d3050e17cff060664235 Mon Sep 17 00:00:00 2001
From: jurgenhaas <juergen@paragon-es.de>
Date: Tue, 22 Aug 2017 10:21:27 +0200
Subject: [PATCH] Initial code

---
 src/Handler.php | 27 +++++++++++++++++++++++++--
 1 file changed, 25 insertions(+), 2 deletions(-)

diff --git a/src/Handler.php b/src/Handler.php
index a30d99e..7403371 100644
--- a/src/Handler.php
+++ b/src/Handler.php
@@ -7,6 +7,7 @@ use Composer\Composer;
 use Composer\IO\IOInterface;
 use Composer\Script\Event as ScriptEvent;
 use GitElephant\Repository;
+use Symfony\Component\Filesystem\Filesystem;
 
 class Handler {
 
@@ -88,11 +89,33 @@ class Handler {
    */
   protected function prepareWorkingDirectory($path, $project, $version, $username) {
     list(, $projectname) = explode('/', $project);
-    $repo = $username . '@git.drupal.org:project/' . $projectname . '.git';
+    $uri = $username . '@git.drupal.org:project/' . $projectname . '.git';
 
     // Git Clone the repository into the working directory
     $repository = Repository::open($path);
-    $repository->cloneFrom($repo, '.');
+    $repository->init();
+
+    $originExists = FALSE;
+    /** @var \GitElephant\Objects\Remote $remote */
+    foreach ($repository->getRemotes() as $remote) {
+      if ($remote->getName() == 'origin') {
+        if ($remote->getFetchURL() != $uri) {
+          $remote->setFetchURL($uri);
+        }
+        $originExists = TRUE;
+        break;
+      }
+    }
+
+    if (!$originExists) {
+      $fs = new Filesystem();
+      $fs->remove($path);
+      $fs->mkdir($path);
+      $repository->init();
+      $repository->addRemote('origin', $uri);
+    }
+
+    $repository->fetch();
     $repository->checkout($version);
   }
 
-- 
GitLab