Rev 927 | Rev 930 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
597 | daniel-mar | 1 | <?php |
2 | |||
3 | |||
874 | daniel-mar | 4 | |
5 | |||
6 | |||
7 | |||
8 | |||
9 | |||
10 | |||
11 | |||
12 | |||
597 | daniel-mar | 13 | namespace Composer; |
14 | |||
15 | use Composer\Autoload\ClassLoader; |
||
16 | use Composer\Semver\VersionParser; |
||
17 | |||
874 | daniel-mar | 18 | |
19 | |||
20 | |||
21 | |||
22 | |||
23 | |||
24 | |||
597 | daniel-mar | 25 | class InstalledVersions |
26 | { |
||
874 | daniel-mar | 27 | private static $installed = array ( |
28 | 'root' => |
||
29 | array ( |
||
30 | 'pretty_version' => '2.0', |
||
31 | 'version' => '2.0.0.0', |
||
32 | 'aliases' => |
||
33 | array ( |
||
34 | ), |
||
35 | 'reference' => NULL, |
||
36 | 'name' => 'danielmarschall/oidplus', |
||
37 | ), |
||
38 | 'versions' => |
||
39 | array ( |
||
40 | 'components/jquery' => |
||
41 | array ( |
||
42 | 'pretty_version' => '3.6.0', |
||
43 | 'version' => '3.6.0.0', |
||
44 | 'aliases' => |
||
45 | array ( |
||
46 | ), |
||
47 | 'reference' => '6cf38ee1fd04b6adf8e7dda161283aa35be818c3', |
||
48 | ), |
||
49 | 'components/jqueryui' => |
||
50 | array ( |
||
51 | 'pretty_version' => '1.12.1', |
||
52 | 'version' => '1.12.1.0', |
||
53 | 'aliases' => |
||
54 | array ( |
||
55 | ), |
||
56 | 'reference' => '44ecf3794cc56b65954cc19737234a3119d036cc', |
||
57 | ), |
||
58 | 'danielmarschall/fileformats' => |
||
59 | array ( |
||
60 | 'pretty_version' => 'dev-master', |
||
61 | 'version' => 'dev-master', |
||
62 | 'aliases' => |
||
63 | array ( |
||
64 | |||
65 | ), |
||
66 | 'reference' => '880e97b497710dc14ee8f38b4e48250ce49202ee', |
||
67 | ), |
||
68 | 'danielmarschall/oidplus' => |
||
69 | array ( |
||
70 | 'pretty_version' => '2.0', |
||
71 | 'version' => '2.0.0.0', |
||
72 | 'aliases' => |
||
73 | array ( |
||
74 | ), |
||
75 | 'reference' => NULL, |
||
76 | ), |
||
77 | 'danielmarschall/php_utils' => |
||
78 | array ( |
||
79 | 'pretty_version' => 'dev-master', |
||
80 | 'version' => 'dev-master', |
||
81 | 'aliases' => |
||
82 | array ( |
||
83 | |||
84 | ), |
||
927 | daniel-mar | 85 | 'reference' => 'a13f0e04b3a8a1f4d45f111286190ac8ce723500', |
874 | daniel-mar | 86 | ), |
87 | 'danielmarschall/uuid_mac_utils' => |
||
88 | array ( |
||
89 | 'pretty_version' => 'dev-master', |
||
90 | 'version' => 'dev-master', |
||
91 | 'aliases' => |
||
92 | array ( |
||
93 | |||
94 | ), |
||
95 | 'reference' => '31174ea5dc3398645f70bc40f5162aa5b73f5b52', |
||
96 | ), |
||
97 | 'danielmarschall/vnag' => |
||
98 | array ( |
||
99 | 'pretty_version' => 'dev-master', |
||
100 | 'version' => 'dev-master', |
||
101 | 'aliases' => |
||
102 | array ( |
||
103 | |||
104 | ), |
||
929 | daniel-mar | 105 | 'reference' => '7cf969d7dd3b128cc63713165fee87c81becd8d3', |
874 | daniel-mar | 106 | ), |
107 | 'dcodeio/bcrypt.js' => |
||
108 | array ( |
||
109 | 'pretty_version' => 'master', |
||
110 | 'version' => 'dev-master', |
||
111 | 'aliases' => |
||
112 | array ( |
||
113 | ), |
||
114 | 'reference' => 'master', |
||
115 | ), |
||
116 | 'emn178/js-sha3' => |
||
117 | array ( |
||
118 | 'pretty_version' => 'master', |
||
119 | 'version' => 'dev-master', |
||
120 | 'aliases' => |
||
121 | array ( |
||
122 | ), |
||
123 | 'reference' => 'master', |
||
124 | ), |
||
125 | 'firebase/php-jwt' => |
||
126 | array ( |
||
127 | 'pretty_version' => 'v5.5.1', |
||
128 | 'version' => '5.5.1.0', |
||
129 | 'aliases' => |
||
130 | array ( |
||
131 | ), |
||
132 | 'reference' => '83b609028194aa042ea33b5af2d41a7427de80e6', |
||
133 | ), |
||
134 | 'gedmarc/layout' => |
||
135 | array ( |
||
136 | 'pretty_version' => 'master', |
||
137 | 'version' => 'dev-master', |
||
138 | 'aliases' => |
||
139 | array ( |
||
140 | ), |
||
141 | 'reference' => 'master', |
||
142 | ), |
||
143 | 'matthiasmullie/minify' => |
||
144 | array ( |
||
925 | daniel-mar | 145 | 'pretty_version' => '1.3.69', |
146 | 'version' => '1.3.69.0', |
||
874 | daniel-mar | 147 | 'aliases' => |
148 | array ( |
||
149 | ), |
||
925 | daniel-mar | 150 | 'reference' => 'a61c949cccd086808063611ef9698eabe42ef22f', |
874 | daniel-mar | 151 | ), |
152 | 'matthiasmullie/path-converter' => |
||
153 | array ( |
||
154 | 'pretty_version' => '1.1.3', |
||
155 | 'version' => '1.1.3.0', |
||
156 | 'aliases' => |
||
157 | array ( |
||
158 | ), |
||
159 | 'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9', |
||
160 | ), |
||
161 | 'n-other/php-sha3' => |
||
162 | array ( |
||
163 | 'pretty_version' => 'dev-master', |
||
164 | 'version' => 'dev-master', |
||
165 | 'aliases' => |
||
166 | array ( |
||
167 | |||
168 | ), |
||
169 | 'reference' => '54ee3b90986e88286d333319e6340b90bde4f71a', |
||
170 | ), |
||
171 | 'paragonie/constant_time_encoding' => |
||
172 | array ( |
||
173 | 'pretty_version' => 'v2.6.3', |
||
174 | 'version' => '2.6.3.0', |
||
175 | 'aliases' => |
||
176 | array ( |
||
177 | ), |
||
178 | 'reference' => '58c3f47f650c94ec05a151692652a868995d2938', |
||
179 | ), |
||
180 | 'paragonie/random_compat' => |
||
181 | array ( |
||
182 | 'pretty_version' => 'v9.99.100', |
||
183 | 'version' => '9.99.100.0', |
||
184 | 'aliases' => |
||
185 | array ( |
||
186 | ), |
||
187 | 'reference' => '996434e5492cb4c3edcb9168db6fbb1359ef965a', |
||
188 | ), |
||
189 | 'phpseclib/phpseclib' => |
||
190 | array ( |
||
191 | 'pretty_version' => '3.0.14', |
||
192 | 'version' => '3.0.14.0', |
||
193 | 'aliases' => |
||
194 | array ( |
||
195 | ), |
||
196 | 'reference' => '2f0b7af658cbea265cbb4a791d6c29a6613f98ef', |
||
197 | ), |
||
198 | 'script47/bs5-utils' => |
||
199 | array ( |
||
200 | 'pretty_version' => 'master', |
||
201 | 'version' => 'dev-master', |
||
202 | 'aliases' => |
||
203 | array ( |
||
204 | ), |
||
205 | 'reference' => 'master', |
||
206 | ), |
||
207 | 'spamspan/spamspan' => |
||
208 | array ( |
||
209 | 'pretty_version' => 'master', |
||
210 | 'version' => 'dev-master', |
||
211 | 'aliases' => |
||
212 | array ( |
||
213 | ), |
||
214 | 'reference' => 'master', |
||
215 | ), |
||
216 | 'symfony/polyfill-mbstring' => |
||
217 | array ( |
||
218 | 'pretty_version' => 'v1.19.0', |
||
219 | 'version' => '1.19.0.0', |
||
220 | 'aliases' => |
||
221 | array ( |
||
222 | ), |
||
223 | 'reference' => 'b5f7b932ee6fa802fc792eabd77c4c88084517ce', |
||
224 | ), |
||
225 | 'tinymce/tinymce' => |
||
226 | array ( |
||
227 | 'pretty_version' => '5.x-dev', |
||
228 | 'version' => '5.9999999.9999999.9999999-dev', |
||
229 | 'aliases' => |
||
230 | array ( |
||
231 | ), |
||
232 | 'reference' => 'c91227ab933d664c3ce2ea4ec68257f2282437ed', |
||
233 | ), |
||
234 | 'twbs/bootstrap' => |
||
235 | array ( |
||
922 | daniel-mar | 236 | 'pretty_version' => '5.2.0', |
237 | 'version' => '5.2.0.0', |
||
874 | daniel-mar | 238 | 'aliases' => |
239 | array ( |
||
240 | ), |
||
922 | daniel-mar | 241 | 'reference' => 'edf9c40956d19e6ab3f9151bfe0dfac6be06fa21', |
874 | daniel-mar | 242 | ), |
243 | 'tweeb/tinymce-i18n' => |
||
244 | array ( |
||
245 | 'pretty_version' => '2.0.4', |
||
246 | 'version' => '2.0.4.0', |
||
247 | 'aliases' => |
||
248 | array ( |
||
249 | ), |
||
250 | 'reference' => '058da08d6e61dc4e0279de6509bb6969a62f68e5', |
||
251 | ), |
||
252 | 'twitter/bootstrap' => |
||
253 | array ( |
||
254 | 'replaced' => |
||
255 | array ( |
||
922 | daniel-mar | 256 | |
874 | daniel-mar | 257 | ), |
258 | ), |
||
259 | 'vakata/jstree' => |
||
260 | array ( |
||
261 | 'pretty_version' => '3.3.12', |
||
262 | 'version' => '3.3.12.0', |
||
263 | 'aliases' => |
||
264 | array ( |
||
265 | ), |
||
266 | 'reference' => '7a03954015eaea2467956dc05e6be78f4d1a1ff0', |
||
267 | ), |
||
268 | ), |
||
269 | ); |
||
270 | private static $canGetVendors; |
||
271 | private static $installedByVendor = array(); |
||
597 | daniel-mar | 272 | |
273 | |||
274 | |||
275 | |||
276 | |||
277 | |||
278 | |||
874 | daniel-mar | 279 | public static function getInstalledPackages() |
280 | { |
||
281 | $packages = array(); |
||
282 | foreach (self::getInstalled() as $installed) { |
||
283 | $packages[] = array_keys($installed['versions']); |
||
284 | } |
||
597 | daniel-mar | 285 | |
874 | daniel-mar | 286 | if (1 === \count($packages)) { |
287 | return $packages[0]; |
||
288 | } |
||
597 | daniel-mar | 289 | |
874 | daniel-mar | 290 | return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); |
291 | } |
||
597 | daniel-mar | 292 | |
293 | |||
294 | |||
295 | |||
296 | |||
297 | |||
298 | |||
299 | |||
300 | |||
874 | daniel-mar | 301 | public static function isInstalled($packageName) |
302 | { |
||
303 | foreach (self::getInstalled() as $installed) { |
||
304 | if (isset($installed['versions'][$packageName])) { |
||
305 | return true; |
||
306 | } |
||
307 | } |
||
597 | daniel-mar | 308 | |
874 | daniel-mar | 309 | return false; |
310 | } |
||
597 | daniel-mar | 311 | |
312 | |||
313 | |||
314 | |||
315 | |||
316 | |||
317 | |||
318 | |||
319 | |||
320 | |||
321 | |||
322 | |||
323 | |||
324 | |||
874 | daniel-mar | 325 | public static function satisfies(VersionParser $parser, $packageName, $constraint) |
326 | { |
||
327 | $constraint = $parser->parseConstraints($constraint); |
||
328 | $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); |
||
597 | daniel-mar | 329 | |
874 | daniel-mar | 330 | return $provided->matches($constraint); |
331 | } |
||
597 | daniel-mar | 332 | |
333 | |||
334 | |||
335 | |||
336 | |||
337 | |||
338 | |||
339 | |||
340 | |||
874 | daniel-mar | 341 | |
342 | public static function getVersionRanges($packageName) |
||
343 | { |
||
344 | foreach (self::getInstalled() as $installed) { |
||
345 | if (!isset($installed['versions'][$packageName])) { |
||
346 | continue; |
||
597 | daniel-mar | 347 | } |
874 | daniel-mar | 348 | |
349 | $ranges = array(); |
||
350 | if (isset($installed['versions'][$packageName]['pretty_version'])) { |
||
351 | $ranges[] = $installed['versions'][$packageName]['pretty_version']; |
||
352 | } |
||
353 | if (array_key_exists('aliases', $installed['versions'][$packageName])) { |
||
354 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); |
||
355 | } |
||
356 | if (array_key_exists('replaced', $installed['versions'][$packageName])) { |
||
357 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); |
||
358 | } |
||
359 | if (array_key_exists('provided', $installed['versions'][$packageName])) { |
||
360 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); |
||
361 | } |
||
362 | |||
363 | return implode(' || ', $ranges); |
||
364 | } |
||
365 | |||
366 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
367 | } |
||
368 | |||
369 | |||
370 | |||
371 | |||
372 | |||
373 | public static function getVersion($packageName) |
||
374 | { |
||
375 | foreach (self::getInstalled() as $installed) { |
||
376 | if (!isset($installed['versions'][$packageName])) { |
||
377 | continue; |
||
378 | } |
||
379 | |||
380 | if (!isset($installed['versions'][$packageName]['version'])) { |
||
381 | return null; |
||
382 | } |
||
383 | |||
384 | return $installed['versions'][$packageName]['version']; |
||
385 | } |
||
386 | |||
387 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
388 | } |
||
389 | |||
390 | |||
391 | |||
392 | |||
393 | |||
394 | public static function getPrettyVersion($packageName) |
||
395 | { |
||
396 | foreach (self::getInstalled() as $installed) { |
||
397 | if (!isset($installed['versions'][$packageName])) { |
||
398 | continue; |
||
399 | } |
||
400 | |||
401 | if (!isset($installed['versions'][$packageName]['pretty_version'])) { |
||
402 | return null; |
||
403 | } |
||
404 | |||
405 | return $installed['versions'][$packageName]['pretty_version']; |
||
406 | } |
||
407 | |||
408 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
409 | } |
||
410 | |||
411 | |||
412 | |||
413 | |||
414 | |||
415 | public static function getReference($packageName) |
||
416 | { |
||
417 | foreach (self::getInstalled() as $installed) { |
||
418 | if (!isset($installed['versions'][$packageName])) { |
||
419 | continue; |
||
420 | } |
||
421 | |||
422 | if (!isset($installed['versions'][$packageName]['reference'])) { |
||
423 | return null; |
||
424 | } |
||
425 | |||
426 | return $installed['versions'][$packageName]['reference']; |
||
427 | } |
||
428 | |||
429 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
430 | } |
||
431 | |||
432 | |||
433 | |||
434 | |||
435 | |||
436 | public static function getRootPackage() |
||
437 | { |
||
438 | $installed = self::getInstalled(); |
||
439 | |||
440 | return $installed[0]['root']; |
||
441 | } |
||
442 | |||
443 | |||
444 | |||
445 | |||
446 | |||
447 | |||
448 | |||
449 | |||
450 | public static function getRawData() |
||
451 | { |
||
452 | @trigger_error('getRawData only returns the first dataset loaded, which may not be what you expect. Use getAllRawData() instead which returns all datasets for all autoloaders present in the process.', E_USER_DEPRECATED); |
||
453 | |||
454 | return self::$installed; |
||
455 | } |
||
456 | |||
457 | |||
458 | |||
459 | |||
460 | |||
461 | |||
462 | |||
463 | public static function getAllRawData() |
||
464 | { |
||
465 | return self::getInstalled(); |
||
466 | } |
||
467 | |||
468 | |||
469 | |||
470 | |||
471 | |||
472 | |||
473 | |||
474 | |||
475 | |||
476 | |||
477 | |||
478 | |||
479 | |||
480 | |||
481 | |||
482 | |||
483 | |||
484 | |||
485 | |||
486 | public static function reload($data) |
||
487 | { |
||
488 | self::$installed = $data; |
||
489 | self::$installedByVendor = array(); |
||
490 | } |
||
491 | |||
492 | |||
493 | |||
494 | |||
495 | |||
496 | private static function getInstalled() |
||
497 | { |
||
498 | if (null === self::$canGetVendors) { |
||
499 | self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); |
||
500 | } |
||
501 | |||
502 | $installed = array(); |
||
503 | |||
504 | if (self::$canGetVendors) { |
||
505 | foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { |
||
506 | if (isset(self::$installedByVendor[$vendorDir])) { |
||
507 | $installed[] = self::$installedByVendor[$vendorDir]; |
||
508 | } elseif (is_file($vendorDir.'/composer/installed.php')) { |
||
509 | $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; |
||
510 | } |
||
511 | } |
||
512 | } |
||
513 | |||
514 | $installed[] = self::$installed; |
||
515 | |||
516 | return $installed; |
||
517 | } |
||
518 | } |