forked from mertyildiran/laraup
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcomposer.php
90 lines (72 loc) · 2.77 KB
/
composer.php
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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?php
$publishings = [
'cartalyst/sentry' => "php artisan vendor:publish --provider=\"Cartalyst\Sentry\SentryServiceProvider\"",
'barryvdh/laravel-ide-helper' => "php artisan vendor:publish --provider=\"Barryvdh\LaravelIdeHelper\IdeHelperServiceProvider\" --tag=config",
'maatwebsite/excel' => "php artisan vendor:publish --provider=\"Maatwebsite\Excel\ExcelServiceProvider\""
];
$package_replacements = [
'cartalyst/sentry' => 'mertyildiran/sentry:dev-master',
'*/l4shell' => 'mertyildiran/l5shell:dev-master',
'*/kmd-logviewer|*/logviewer' => 'rap2hpoutre/laravel-log-viewer',
'lucadegasperi/oauth2-server-laravel' => 'mertyildiran/oauth2-server-laravel:dev-master'
];
$old_project_path = $argv[1];
$new_project_path = $argv[2];
$old_composer_json_file_path = $old_project_path.'/composer.json';
$old_composer_json_content = file_get_contents($old_composer_json_file_path);
$new_composer_json_file_path = $new_project_path.'/composer.json';
$new_composer_json_content = file_get_contents($new_composer_json_file_path);
$old_composer_array = json_decode($old_composer_json_content, true);
$new_composer_array = json_decode($new_composer_json_content, true);
$key = 'repositories';
if (array_key_exists($key, $old_composer_array)) {
$new_composer_array[$key] = $old_composer_array[$key];
}
file_put_contents($new_composer_json_file_path, json_encode($new_composer_array, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES));
$require = $old_composer_array['require'];
$require_dev = $old_composer_array['require-dev'];
$commands_to_execute = [
"cd ".$new_project_path." && composer require",
"cd ".$new_project_path." && composer require --dev"
];
foreach ($require as $package => $version) {
evaluatePackage($package, 0);
}
foreach ($require_dev as $package => $version) {
evaluatePackage($package, 1);
}
function evaluatePackage($package, $dev)
{
global $package_replacements;
global $commands_to_execute;
if (in_array($package, ['php', 'laravel/framework'])) {
return;
}
$match = getFirstWildcardMatch($package, $package_replacements);
if (! is_null($match)) {
executeInstall($package, $commands_to_execute[$dev]." ".$match);
} else {
executeInstall($package, $commands_to_execute[$dev]." ".$package);
}
}
function executeInstall($package, $command)
{
global $publishings;
shell_exec($command);
$match = getFirstWildcardMatch($package, $publishings);
if (! is_null($match)) {
shell_exec($match);
}
}
function getFirstWildcardMatch($package, $array)
{
foreach (array_keys($array) as $pattern) {
foreach (explode('|', $pattern) as $wildcard) {
if (fnmatch($wildcard, $package)) {
return $array[$pattern];
}
}
}
return NULL;
}
?>