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