-
-
Notifications
You must be signed in to change notification settings - Fork 132
/
link
executable file
·67 lines (54 loc) · 2.31 KB
/
link
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#!/usr/bin/env php
<?php
if (!file_exists(__DIR__.'/vendor/autoload.php')) {
echo "Run `composer install` before you run the `link` script.\n";
exit(1);
}
require __DIR__.'/vendor/autoload.php';
use Symfony\Component\Filesystem\Filesystem;
/**
* Links dependencies to components to a local clone of the main async-aws/aws GitHub repository.
* Inspired by symfony/symfony/link
*
* @author Kévin Dunglas <[email protected]>
*/
$copy = false !== $k = array_search('--copy', $argv, true);
$copy && array_splice($argv, $k, 1);
$pathToProject = $argv[1] ?? getcwd();
if (!is_dir("$pathToProject/vendor/async-aws")) {
echo 'Link (or copy) dependencies to components to a local clone of the main async-aws/aws 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 "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);
}
$packages = array();
$filesystem = new Filesystem();
$braces = array('.', 'Integration/*', 'Service');
$directories = array_merge(...array_values(array_map(function ($part) {
return glob(__DIR__.'/src/'.$part.'/*', GLOB_ONLYDIR | GLOB_NOSORT);
}, $braces)));
foreach ($directories as $dir) {
if ($filesystem->exists($composer = "$dir/composer.json")) {
$packages[json_decode(file_get_contents($composer))->name] = $dir;
}
}
foreach (glob("$pathToProject/vendor/async-aws/*", GLOB_ONLYDIR | GLOB_NOSORT) as $dir) {
$package = 'async-aws/'.basename($dir);
if (!$copy && is_link($dir)) {
echo "\"$package\" is already a symlink, skipping.".PHP_EOL;
continue;
}
if (!isset($packages[$package])) {
continue;
}
$packageDir = ('\\' === DIRECTORY_SEPARATOR || $copy) ? $packages[$package] : $filesystem->makePathRelative($packages[$package], dirname(realpath($dir)));
$filesystem->remove($dir);
if ($copy) {
$filesystem->mirror($packageDir, $dir);
echo "\"$package\" has been copied from \"$packages[$package]\".".PHP_EOL;
} else {
$filesystem->symlink(rtrim($packageDir, '/'), $dir);
echo "\"$package\" has been linked to \"$packages[$package]\".".PHP_EOL;
}
}