277b23eeff6274163e22a192e04d1f1177805be4
[tine20] / scripts / packaging / composer / composerLockRewrite.php
1 <?php
2 /**
3  * @package     HelperScripts
4  * @subpackage  Composer
5  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
6  * @author      Paul Mehrer <p.mehrer@metaways.de>
7  * @copyright   Copyright (c) 2016 Metaways Infosystems GmbH (http://www.metaways.de)
8  */
9
10 if ( $_SERVER['argc'] < 2) {
11     usage();
12 }
13
14 $file = $_SERVER['argv'][1];
15 if ( !is_file($file) ) {
16     echo $file . ' is no file' . PHP_EOL;
17     usage();
18 }
19
20 print_r($_SERVER['argv']);
21
22 // second param may contain satis ip address / hostname
23 $host = (isset($_SERVER['argv'][2])) ? $_SERVER['argv'][2] : '79.99.84.34';
24
25 $file1 = dirname($file) . '/composer.json';
26 if ( !is_file($file1) ) {
27     echo $file1 . ' is no file' . PHP_EOL;
28     usage();
29 }
30
31 $filecontents = file_get_contents($file1);
32 if (false === $filecontents) {
33     echo 'could not get file content of ' . $file1 . PHP_EOL;
34     usage();
35 }
36
37 $jsonComposer = json_decode($filecontents);
38 if (null === $jsonComposer) {
39     echo 'failed to json decode file ' . $file1 . PHP_EOL;
40     exit(2);
41 }
42
43 $var = (object)array('type' => 'composer', 'url' => 'http://' . $host);
44 $var1 = (object)array('packagist' => false);
45
46 $jsonComposer->repositories = array($var, $var1);
47 // we need to replace "_empty_" with the empty string as this breaks autoloading
48 $jsonEncodedComposerJson = str_replace('_empty_', '', json_encode($jsonComposer, JSON_PRETTY_PRINT));
49 file_put_contents($file1, $jsonEncodedComposerJson);
50 unset($jsonComposer);
51 unset($file1);
52
53
54 $filecontents = file_get_contents($file);
55 if (false === $filecontents) {
56     echo 'could not get file content of ' . $file . PHP_EOL;
57     usage();
58 }
59
60
61 $jsonComposerLock = json_decode($filecontents);
62 if (null === $jsonComposerLock) {
63     echo 'failed to json decode file ' . $file . PHP_EOL;
64     exit(2);
65 }
66
67
68 $filecontents = file_get_contents('http://' . $host . '/packages.json');
69 if (false === $filecontents) {
70     echo 'could not get remote content of http://' . $host . '/packages.json' . PHP_EOL;
71     exit(3);
72 }
73
74
75 $jsonSatis = json_decode($filecontents, true);
76 if (null === $jsonSatis) {
77     echo 'failed to json decode remote content of http://' . $host . '/packages.json' . PHP_EOL;
78     exit(4);
79 }
80
81
82 if (isset($jsonSatis['includes']) && is_array($jsonSatis['includes'])) {
83     $tmp = '';
84     $tmp1 = $jsonSatis;
85     foreach ($jsonSatis['includes'] as $key => $val) {
86         $filecontents = file_get_contents('http://' . $host . '/' . $key);
87         if (false === $filecontents) {
88             echo 'could not get remote content of http://' . $host . '/' . $key . PHP_EOL;
89             exit(5);
90         }
91         $tmp = json_decode($filecontents, true);
92         if (null === $tmp) {
93             echo 'failed to json decode remote content of http://' . $host . '/' . $key . PHP_EOL;
94             exit(6);
95         }
96         $tmp1 = array_merge_recursive($tmp1, $tmp);
97     }
98     unset($tmp);
99     $jsonSatis = $tmp1;
100     unset($tmp1);
101 }
102 unset($filecontents);
103
104 loopArray($jsonComposerLock->packages);
105 loopArray($jsonComposerLock->{'packages-dev'});
106
107 function loopArray(array &$a)
108 {
109     global $jsonSatis;
110     foreach ($a as $package) {
111         if (!isset($jsonSatis['packages'][$package->name])) {
112             echo 'could not find package ' . $package->name . PHP_EOL;
113             continue;
114         }
115         if (!isset($jsonSatis['packages'][$package->name][$package->version])) {
116             echo 'could not find version ' . $package->version . '  for package ' . $package->name . PHP_EOL;
117             continue;
118         }
119         echo 'found version ' . $package->version . '  for package ' . $package->name . PHP_EOL;
120
121         $package->dist->type = $jsonSatis['packages'][$package->name][$package->version]['dist']['type'];
122         $package->dist->url = $jsonSatis['packages'][$package->name][$package->version]['dist']['url'];
123         $package->dist->reference = $jsonSatis['packages'][$package->name][$package->version]['dist']['reference'];
124         $package->dist->shasum = $jsonSatis['packages'][$package->name][$package->version]['dist']['shasum'];
125     }
126 }
127
128 file_put_contents($file, json_encode($jsonComposerLock, JSON_PRETTY_PRINT));
129
130
131 function usage()
132 {
133     echo __FILE__ . ' path/to/composer.lock [172.123.13.171]' . PHP_EOL;
134     exit(1);
135 }