diff --git a/src/Handler.php b/src/Handler.php index a30d99e46e78195c1b3a34b4456c2ad85c83c8b1..740337189bc7b6f915772f8259a1471b2e3f7dfc 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); }