@@ -18,19 +18,22 @@ require __DIR__.'/src/Symfony/Component/Filesystem/Filesystem.php';
18
18
use Symfony \Component \Filesystem \Filesystem ;
19
19
20
20
/**
21
- * Links dependencies to components to a local clone of the main symfony/symfony GitHub repository.
21
+ * Links dependencies of a project to a local clone of the main symfony/symfony GitHub repository.
22
22
*
23
23
* @author Kévin Dunglas <dunglas@gmail.com>
24
24
*/
25
25
26
26
$ copy = false !== $ k = array_search ('--copy ' , $ argv , true );
27
27
$ copy && array_splice ($ argv , $ k , 1 );
28
+ $ rollback = false !== $ k = array_search ('--rollback ' , $ argv , true );
29
+ $ rollback && array_splice ($ argv , $ k , 1 );
28
30
$ pathToProject = $ argv [1 ] ?? getcwd ();
29
31
30
32
if (!is_dir ("$ pathToProject/vendor/symfony " )) {
31
- echo 'Link (or copy) dependencies to components to a local clone of the main symfony/symfony GitHub repository. ' .PHP_EOL .PHP_EOL ;
33
+ echo 'Links dependencies of a project to a local clone of the main symfony/symfony GitHub repository. ' .PHP_EOL .PHP_EOL ;
32
34
echo "Usage: $ argv [0 ] /path/to/the/project " .PHP_EOL ;
33
35
echo ' Use `--copy` to copy dependencies instead of symlink ' .PHP_EOL .PHP_EOL ;
36
+ echo ' Use `--rollback` to rollback ' .PHP_EOL .PHP_EOL ;
34
37
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 ;
35
38
exit (1 );
36
39
}
@@ -44,7 +47,6 @@ $directories = array_merge(...array_values(array_map(function ($part) {
44
47
}, $ braces )));
45
48
46
49
$ directories [] = __DIR__ .'/src/Symfony/Contracts ' ;
47
-
48
50
foreach ($ directories as $ dir ) {
49
51
if ($ filesystem ->exists ($ composer = "$ dir/composer.json " )) {
50
52
$ sfPackages [json_decode (file_get_contents ($ composer ))->name ] = $ dir ;
@@ -53,12 +55,19 @@ foreach ($directories as $dir) {
53
55
54
56
foreach (glob ("$ pathToProject/vendor/symfony/* " , GLOB_ONLYDIR | GLOB_NOSORT ) as $ dir ) {
55
57
$ package = 'symfony/ ' .basename ($ dir );
56
- if (! $ copy && is_link ( $ dir )) {
57
- echo "\" $ package\" is already a symlink, skipping. " . PHP_EOL ;
58
+
59
+ if (! isset ( $ sfPackages [ $ package])) {
58
60
continue ;
59
61
}
60
62
61
- if (!isset ($ sfPackages [$ package ])) {
63
+ if ($ rollback ) {
64
+ $ filesystem ->remove ($ dir );
65
+ echo "\"$ package \" has been rollback from \"$ sfPackages [$ package ]\". " .PHP_EOL ;
66
+ continue ;
67
+ }
68
+
69
+ if (!$ copy && is_link ($ dir )) {
70
+ echo "\"$ package \" is already a symlink, skipping. " .PHP_EOL ;
62
71
continue ;
63
72
}
64
73
@@ -78,3 +87,7 @@ foreach (glob("$pathToProject/vendor/symfony/*", GLOB_ONLYDIR | GLOB_NOSORT) as
78
87
foreach (glob ("$ pathToProject/var/cache/* " , GLOB_NOSORT ) as $ cacheDir ) {
79
88
$ filesystem ->remove ($ cacheDir );
80
89
}
90
+
91
+ if ($ rollback ) {
92
+ echo PHP_EOL ."Rollback done, do not forget to run \"composer install \" in your project \"$ pathToProject \". " .PHP_EOL ;
93
+ }
0 commit comments