From fd8c605c1412d32d177ea0ef814132e8e77b25d1 Mon Sep 17 00:00:00 2001 From: Florian Merle Date: Fri, 22 Mar 2024 20:22:35 +0100 Subject: [PATCH] add link script --- link | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 link diff --git a/link b/link new file mode 100755 index 00000000..65896e67 --- /dev/null +++ b/link @@ -0,0 +1,67 @@ +#!/usr/bin/env php + did for symfony/symfony GitHub repository. + * + * @author Florian Merle + */ + +$copy = false !== $k = array_search('--copy', $argv, true); +$copy && array_splice($argv, $k, 1); +$rollback = false !== $k = array_search('--rollback', $argv, true); +$rollback && array_splice($argv, $k, 1); +$pathToProject = $argv[1] ?? getcwd(); + +if (!is_dir("$pathToProject/vendor/sylius")) { + echo 'Links dependencies of a project to a local clone of the main Sylius/SyliusGridBundle GitHub repository.'.PHP_EOL.PHP_EOL; + echo "Usage: $argv[0] /path/to/the/project".PHP_EOL; + echo ' Use `--copy` to copy dependencies instead of symlink'.PHP_EOL.PHP_EOL; + echo ' Use `--rollback` to rollback'.PHP_EOL.PHP_EOL; + echo "The directory \"$pathToProject\" does not exist or the dependencies are not installed, did you forget to run \"composer install\" in your project?".PHP_EOL; + exit(1); +} + +$filesystem = new Filesystem(); +$dir = "$pathToProject/vendor/sylius/grid-bundle"; +$dependency = 'sylius/grid-bundle'; + +if ($rollback) { + $filesystem->remove($dir); + echo "\"$dependency\" has been rollback. Do not forget to run \"composer install\" in your project \"$pathToProject\"".PHP_EOL; + exit(0); +} + +if (!$copy && is_link($dir)) { + echo "\"$dependency\" is already a symlink, skipping.".PHP_EOL; + exit(1); +} + +$dependencyDir = ('\\' === DIRECTORY_SEPARATOR || $copy) ? __DIR__ : $filesystem->makePathRelative(__DIR__, dirname(realpath($dir))); + +$filesystem->remove($dir); + +if ($copy) { + $filesystem->mirror($dependencyDir, $dir); + echo "\"$dependency\" has been copied.".PHP_EOL; +} else { + $filesystem->symlink($dependencyDir, $dir); + echo "\"$dependency\" has been linked to \"$dependencyDir\".".PHP_EOL; +} + +foreach (glob("$pathToProject/var/cache/*", GLOB_NOSORT) as $cacheDir) { + $filesystem->remove($cacheDir); +}