Rev 637 | Rev 663 | 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 ( |
||
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 ( |
||
637 | daniel-mar | 42 | 'pretty_version' => '3.6.0', |
43 | 'version' => '3.6.0.0', |
||
597 | daniel-mar | 44 | 'aliases' => |
45 | array ( |
||
46 | ), |
||
637 | daniel-mar | 47 | 'reference' => '6cf38ee1fd04b6adf8e7dda161283aa35be818c3', |
597 | daniel-mar | 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 ( |
||
621 | daniel-mar | 60 | 'pretty_version' => 'dev-master', |
597 | daniel-mar | 61 | 'version' => 'dev-master', |
62 | 'aliases' => |
||
63 | array ( |
||
621 | daniel-mar | 64 | |
597 | daniel-mar | 65 | ), |
637 | daniel-mar | 66 | 'reference' => 'acfeaf40523a3a3cd0b6dbf18f3dc2349a3bec25', |
597 | daniel-mar | 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 | ), |
||
603 | daniel-mar | 77 | 'danielmarschall/php_utils' => |
78 | array ( |
||
621 | daniel-mar | 79 | 'pretty_version' => 'dev-master', |
603 | daniel-mar | 80 | 'version' => 'dev-master', |
81 | 'aliases' => |
||
82 | array ( |
||
621 | daniel-mar | 83 | |
603 | daniel-mar | 84 | ), |
661 | daniel-mar | 85 | 'reference' => 'f5e662c1d9af308613277de02adbf109ca1fa368', |
603 | daniel-mar | 86 | ), |
602 | daniel-mar | 87 | 'danielmarschall/uuid_mac_utils' => |
88 | array ( |
||
621 | daniel-mar | 89 | 'pretty_version' => 'dev-master', |
602 | daniel-mar | 90 | 'version' => 'dev-master', |
91 | 'aliases' => |
||
92 | array ( |
||
621 | daniel-mar | 93 | |
602 | daniel-mar | 94 | ), |
621 | daniel-mar | 95 | 'reference' => '7b292091da6fd9ab93b06be767754ee668ff457c', |
602 | daniel-mar | 96 | ), |
597 | daniel-mar | 97 | 'danielmarschall/vnag' => |
98 | array ( |
||
621 | daniel-mar | 99 | 'pretty_version' => 'dev-master', |
597 | daniel-mar | 100 | 'version' => 'dev-master', |
101 | 'aliases' => |
||
102 | array ( |
||
621 | daniel-mar | 103 | |
597 | daniel-mar | 104 | ), |
637 | daniel-mar | 105 | 'reference' => '4f729d8b09e4750c1b9ae762519d50ad8d25609a', |
597 | 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 ( |
||
637 | daniel-mar | 127 | 'pretty_version' => 'v5.4.0', |
128 | 'version' => '5.4.0.0', |
||
597 | daniel-mar | 129 | 'aliases' => |
130 | array ( |
||
131 | ), |
||
637 | daniel-mar | 132 | 'reference' => 'd2113d9b2e0e349796e72d2a63cf9319100382d2', |
597 | daniel-mar | 133 | ), |
134 | 'gedmarc/layout' => |
||
135 | array ( |
||
136 | 'pretty_version' => 'master', |
||
137 | 'version' => 'dev-master', |
||
138 | 'aliases' => |
||
139 | array ( |
||
140 | ), |
||
141 | 'reference' => 'master', |
||
142 | ), |
||
143 | 'google/recaptcha' => |
||
144 | array ( |
||
621 | daniel-mar | 145 | 'pretty_version' => 'dev-master', |
146 | 'version' => 'dev-master', |
||
597 | daniel-mar | 147 | 'aliases' => |
148 | array ( |
||
621 | daniel-mar | 149 | |
597 | daniel-mar | 150 | ), |
621 | daniel-mar | 151 | 'reference' => 'f911286ad361c9fba1b422c07f040852c0c193a3', |
597 | daniel-mar | 152 | ), |
153 | 'matthiasmullie/minify' => |
||
154 | array ( |
||
155 | 'pretty_version' => '1.3.66', |
||
156 | 'version' => '1.3.66.0', |
||
157 | 'aliases' => |
||
158 | array ( |
||
159 | ), |
||
160 | 'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6', |
||
161 | ), |
||
162 | 'matthiasmullie/path-converter' => |
||
163 | array ( |
||
164 | 'pretty_version' => '1.1.3', |
||
165 | 'version' => '1.1.3.0', |
||
166 | 'aliases' => |
||
167 | array ( |
||
168 | ), |
||
169 | 'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9', |
||
170 | ), |
||
171 | 'mikemcl/bignumber.js' => |
||
172 | array ( |
||
173 | 'pretty_version' => 'master', |
||
174 | 'version' => 'dev-master', |
||
175 | 'aliases' => |
||
176 | array ( |
||
177 | ), |
||
178 | 'reference' => 'master', |
||
179 | ), |
||
180 | 'n-other/php-sha3' => |
||
181 | array ( |
||
182 | 'pretty_version' => 'dev-master', |
||
183 | 'version' => 'dev-master', |
||
184 | 'aliases' => |
||
185 | array ( |
||
186 | |||
187 | ), |
||
188 | 'reference' => '54ee3b90986e88286d333319e6340b90bde4f71a', |
||
189 | ), |
||
190 | 'spamspan/spamspan' => |
||
191 | array ( |
||
192 | 'pretty_version' => 'master', |
||
193 | 'version' => 'dev-master', |
||
194 | 'aliases' => |
||
195 | array ( |
||
196 | ), |
||
197 | 'reference' => 'master', |
||
198 | ), |
||
199 | 'symfony/polyfill-mbstring' => |
||
200 | array ( |
||
201 | 'pretty_version' => 'v1.19.0', |
||
202 | 'version' => '1.19.0.0', |
||
203 | 'aliases' => |
||
204 | array ( |
||
205 | ), |
||
206 | 'reference' => 'b5f7b932ee6fa802fc792eabd77c4c88084517ce', |
||
207 | ), |
||
208 | 'tinymce/tinymce' => |
||
209 | array ( |
||
637 | daniel-mar | 210 | 'pretty_version' => '5.9.2', |
211 | 'version' => '5.9.2.0', |
||
597 | daniel-mar | 212 | 'aliases' => |
213 | array ( |
||
214 | ), |
||
637 | daniel-mar | 215 | 'reference' => '48c665ad12ba0e4d8068ba0784026c7488aa4746', |
597 | daniel-mar | 216 | ), |
217 | 'twbs/bootstrap' => |
||
218 | array ( |
||
637 | daniel-mar | 219 | 'pretty_version' => 'v5.1.1', |
220 | 'version' => '5.1.1.0', |
||
597 | daniel-mar | 221 | 'aliases' => |
222 | array ( |
||
223 | ), |
||
637 | daniel-mar | 224 | 'reference' => '0d81d3cbc14dfcdca8a868e3f25189a4f1ab273c', |
597 | daniel-mar | 225 | ), |
226 | 'tweeb/tinymce-i18n' => |
||
227 | array ( |
||
228 | 'pretty_version' => '2.0.3', |
||
229 | 'version' => '2.0.3.0', |
||
230 | 'aliases' => |
||
231 | array ( |
||
232 | ), |
||
233 | 'reference' => '9be0b61d0d91bba1f9a5c34f4830752b5da987ef', |
||
234 | ), |
||
235 | 'twitter/bootstrap' => |
||
236 | array ( |
||
237 | 'replaced' => |
||
238 | array ( |
||
637 | daniel-mar | 239 | |
597 | daniel-mar | 240 | ), |
241 | ), |
||
242 | 'vakata/jstree' => |
||
243 | array ( |
||
637 | daniel-mar | 244 | 'pretty_version' => '3.3.12', |
245 | 'version' => '3.3.12.0', |
||
597 | daniel-mar | 246 | 'aliases' => |
247 | array ( |
||
248 | ), |
||
637 | daniel-mar | 249 | 'reference' => '7a03954015eaea2467956dc05e6be78f4d1a1ff0', |
597 | daniel-mar | 250 | ), |
251 | ), |
||
252 | ); |
||
253 | private static $canGetVendors; |
||
254 | private static $installedByVendor = array(); |
||
255 | |||
256 | |||
257 | |||
258 | |||
259 | |||
260 | |||
261 | |||
262 | public static function getInstalledPackages() |
||
263 | { |
||
264 | $packages = array(); |
||
265 | foreach (self::getInstalled() as $installed) { |
||
266 | $packages[] = array_keys($installed['versions']); |
||
267 | } |
||
268 | |||
269 | if (1 === \count($packages)) { |
||
270 | return $packages[0]; |
||
271 | } |
||
272 | |||
273 | return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); |
||
274 | } |
||
275 | |||
276 | |||
277 | |||
278 | |||
279 | |||
280 | |||
281 | |||
282 | |||
283 | |||
284 | public static function isInstalled($packageName) |
||
285 | { |
||
286 | foreach (self::getInstalled() as $installed) { |
||
287 | if (isset($installed['versions'][$packageName])) { |
||
288 | return true; |
||
289 | } |
||
290 | } |
||
291 | |||
292 | return false; |
||
293 | } |
||
294 | |||
295 | |||
296 | |||
297 | |||
298 | |||
299 | |||
300 | |||
301 | |||
302 | |||
303 | |||
304 | |||
305 | |||
306 | |||
307 | |||
308 | public static function satisfies(VersionParser $parser, $packageName, $constraint) |
||
309 | { |
||
310 | $constraint = $parser->parseConstraints($constraint); |
||
311 | $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); |
||
312 | |||
313 | return $provided->matches($constraint); |
||
314 | } |
||
315 | |||
316 | |||
317 | |||
318 | |||
319 | |||
320 | |||
321 | |||
322 | |||
323 | |||
324 | |||
325 | public static function getVersionRanges($packageName) |
||
326 | { |
||
327 | foreach (self::getInstalled() as $installed) { |
||
328 | if (!isset($installed['versions'][$packageName])) { |
||
329 | continue; |
||
330 | } |
||
331 | |||
332 | $ranges = array(); |
||
333 | if (isset($installed['versions'][$packageName]['pretty_version'])) { |
||
334 | $ranges[] = $installed['versions'][$packageName]['pretty_version']; |
||
335 | } |
||
336 | if (array_key_exists('aliases', $installed['versions'][$packageName])) { |
||
337 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); |
||
338 | } |
||
339 | if (array_key_exists('replaced', $installed['versions'][$packageName])) { |
||
340 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); |
||
341 | } |
||
342 | if (array_key_exists('provided', $installed['versions'][$packageName])) { |
||
343 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); |
||
344 | } |
||
345 | |||
346 | return implode(' || ', $ranges); |
||
347 | } |
||
348 | |||
349 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
350 | } |
||
351 | |||
352 | |||
353 | |||
354 | |||
355 | |||
356 | public static function getVersion($packageName) |
||
357 | { |
||
358 | foreach (self::getInstalled() as $installed) { |
||
359 | if (!isset($installed['versions'][$packageName])) { |
||
360 | continue; |
||
361 | } |
||
362 | |||
363 | if (!isset($installed['versions'][$packageName]['version'])) { |
||
364 | return null; |
||
365 | } |
||
366 | |||
367 | return $installed['versions'][$packageName]['version']; |
||
368 | } |
||
369 | |||
370 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
371 | } |
||
372 | |||
373 | |||
374 | |||
375 | |||
376 | |||
377 | public static function getPrettyVersion($packageName) |
||
378 | { |
||
379 | foreach (self::getInstalled() as $installed) { |
||
380 | if (!isset($installed['versions'][$packageName])) { |
||
381 | continue; |
||
382 | } |
||
383 | |||
384 | if (!isset($installed['versions'][$packageName]['pretty_version'])) { |
||
385 | return null; |
||
386 | } |
||
387 | |||
388 | return $installed['versions'][$packageName]['pretty_version']; |
||
389 | } |
||
390 | |||
391 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
392 | } |
||
393 | |||
394 | |||
395 | |||
396 | |||
397 | |||
398 | public static function getReference($packageName) |
||
399 | { |
||
400 | foreach (self::getInstalled() as $installed) { |
||
401 | if (!isset($installed['versions'][$packageName])) { |
||
402 | continue; |
||
403 | } |
||
404 | |||
405 | if (!isset($installed['versions'][$packageName]['reference'])) { |
||
406 | return null; |
||
407 | } |
||
408 | |||
409 | return $installed['versions'][$packageName]['reference']; |
||
410 | } |
||
411 | |||
412 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
413 | } |
||
414 | |||
415 | |||
416 | |||
417 | |||
418 | |||
419 | public static function getRootPackage() |
||
420 | { |
||
421 | $installed = self::getInstalled(); |
||
422 | |||
423 | return $installed[0]['root']; |
||
424 | } |
||
425 | |||
426 | |||
427 | |||
428 | |||
429 | |||
430 | |||
431 | |||
432 | |||
433 | public static function getRawData() |
||
434 | { |
||
435 | @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); |
||
436 | |||
437 | return self::$installed; |
||
438 | } |
||
439 | |||
440 | |||
441 | |||
442 | |||
443 | |||
444 | |||
445 | |||
446 | public static function getAllRawData() |
||
447 | { |
||
448 | return self::getInstalled(); |
||
449 | } |
||
450 | |||
451 | |||
452 | |||
453 | |||
454 | |||
455 | |||
456 | |||
457 | |||
458 | |||
459 | |||
460 | |||
461 | |||
462 | |||
463 | |||
464 | |||
465 | |||
466 | |||
467 | |||
468 | |||
469 | public static function reload($data) |
||
470 | { |
||
471 | self::$installed = $data; |
||
472 | self::$installedByVendor = array(); |
||
473 | } |
||
474 | |||
475 | |||
476 | |||
477 | |||
478 | |||
479 | private static function getInstalled() |
||
480 | { |
||
481 | if (null === self::$canGetVendors) { |
||
482 | self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); |
||
483 | } |
||
484 | |||
485 | $installed = array(); |
||
486 | |||
487 | if (self::$canGetVendors) { |
||
488 | foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { |
||
489 | if (isset(self::$installedByVendor[$vendorDir])) { |
||
490 | $installed[] = self::$installedByVendor[$vendorDir]; |
||
491 | } elseif (is_file($vendorDir.'/composer/installed.php')) { |
||
492 | $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; |
||
493 | } |
||
494 | } |
||
495 | } |
||
496 | |||
497 | $installed[] = self::$installed; |
||
498 | |||
499 | return $installed; |
||
500 | } |
||
501 | } |