From ea7419c6963293bdaa84240dee969ac2c9410c66 Mon Sep 17 00:00:00 2001 From: jurgenhaas <juergen.haas@lakedrops.com> Date: Wed, 6 Jul 2022 09:24:38 +0200 Subject: [PATCH] composer/plugin/dorgflow#6 Add support to keep files and directories that are not contained in the repository --- src/Handler.php | 60 ++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 49 insertions(+), 11 deletions(-) diff --git a/src/Handler.php b/src/Handler.php index 61c3fdc..3b817f5 100644 --- a/src/Handler.php +++ b/src/Handler.php @@ -2,14 +2,12 @@ namespace LakeDrops\DorgFlow; -use Exception; -use GitElephant\Command\ResetCommand; use GitElephant\Repository; use LakeDrops\Component\Composer\BaseHandler; use Symfony\Component\Filesystem\Filesystem; /** - * Class Handler. + * Handler class for the Dorgflow plugin. * * @package LakeDrops\DorgFlow */ @@ -50,10 +48,10 @@ class Handler extends BaseHandler { $installationManager = $this->composer->getInstallationManager(); foreach ([ - 'projects' => 'git.drupal.org:project', - 'drupalspoons' => 'gitlab.com:drupalspoons', - 'selfhosted' => FALSE, - ] as $type => $url) { + 'projects' => 'git.drupal.org:project', + 'drupalspoons' => 'gitlab.com:drupalspoons', + 'selfhosted' => FALSE, + ] as $type => $url) { if ($this->config->readValue($type) === NULL) { continue; } @@ -86,7 +84,9 @@ class Handler extends BaseHandler { } $path = $installationManager->getInstallPath($package); $this->io->write("- $project => $path", TRUE); + $this->keepObjects($project); $this->prepareWorkingDirectory($path, $projectname, $version, $fullUrl); + $this->restoreObjects($project); } } } @@ -112,11 +112,12 @@ class Handler extends BaseHandler { try { $origin = $repository->getRemote('origin', FALSE); - if ($origin && $origin->getFetchURL() === $uri) { + if ($origin->getFetchURL() === $uri) { // Already setup correctly. return; } - } catch (Exception $ex) { + } + catch (\Exception $ex) { // Ignore the exception and conitue setup. } @@ -177,12 +178,13 @@ class Handler extends BaseHandler { $repository = Repository::open($path); try { $origin = $repository->getRemote($remote, FALSE); - if ($origin && $origin->getFetchURL() === $uri) { + if ($origin->getFetchURL() === $uri) { // Already setup correctly. $this->io->write('Already available.'); return; } - } catch (Exception $ex) { + } + catch (\Exception $ex) { // Ignore the exception and conitue setup. } $repository->addRemote($remote, $uri); @@ -190,4 +192,40 @@ class Handler extends BaseHandler { $this->io->write('Successfully added issue fork.'); } + /** + * Move files and directories to keep to the /tmp directory. + * + * @param string $project + * The project name. + */ + private function keepObjects(string $project): void { + if ($objects = $this->config->readValue(['keep', $project])) { + $fs = new Filesystem(); + foreach ($objects as $id => $object) { + if (file_exists($object)) { + $this->io->write(' - keeping ' . $object); + $fs->rename($object, '/tmp/dorgflow-keep-' . $id, TRUE); + } + } + } + } + + /** + * Move files and directories to keep from the /tmp directory. + * + * @param string $project + * The project name. + */ + private function restoreObjects(string $project): void { + if ($objects = $this->config->readValue(['keep', $project])) { + $fs = new Filesystem(); + foreach ($objects as $id => $object) { + if (file_exists('/tmp/dorgflow-keep-' . $id)) { + $this->io->write(' - restoring ' . $object); + $fs->rename('/tmp/dorgflow-keep-' . $id, $object, TRUE); + } + } + } + } + } -- GitLab