Rev 732 | Rev 759 | 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 ( |
||
752 | daniel-mar | 28 | 'root' => |
597 | daniel-mar | 29 | array ( |
30 | 'pretty_version' => '2.0', |
||
31 | 'version' => '2.0.0.0', |
||
752 | daniel-mar | 32 | 'aliases' => |
597 | daniel-mar | 33 | array ( |
34 | ), |
||
35 | 'reference' => NULL, |
||
36 | 'name' => 'danielmarschall/oidplus', |
||
37 | ), |
||
752 | daniel-mar | 38 | 'versions' => |
597 | daniel-mar | 39 | array ( |
752 | 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', |
||
752 | daniel-mar | 44 | 'aliases' => |
597 | daniel-mar | 45 | array ( |
46 | ), |
||
637 | daniel-mar | 47 | 'reference' => '6cf38ee1fd04b6adf8e7dda161283aa35be818c3', |
597 | daniel-mar | 48 | ), |
752 | daniel-mar | 49 | 'components/jqueryui' => |
597 | daniel-mar | 50 | array ( |
51 | 'pretty_version' => '1.12.1', |
||
52 | 'version' => '1.12.1.0', |
||
752 | daniel-mar | 53 | 'aliases' => |
597 | daniel-mar | 54 | array ( |
55 | ), |
||
56 | 'reference' => '44ecf3794cc56b65954cc19737234a3119d036cc', |
||
57 | ), |
||
752 | 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', |
752 | 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 | ), |
752 | daniel-mar | 68 | 'danielmarschall/oidplus' => |
597 | daniel-mar | 69 | array ( |
70 | 'pretty_version' => '2.0', |
||
71 | 'version' => '2.0.0.0', |
||
752 | daniel-mar | 72 | 'aliases' => |
597 | daniel-mar | 73 | array ( |
74 | ), |
||
75 | 'reference' => NULL, |
||
76 | ), |
||
752 | 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', |
752 | daniel-mar | 81 | 'aliases' => |
603 | daniel-mar | 82 | array ( |
621 | daniel-mar | 83 | |
603 | daniel-mar | 84 | ), |
732 | daniel-mar | 85 | 'reference' => '0f6f43b78e7ffef69e23710e9e006c33d3d732bc', |
603 | daniel-mar | 86 | ), |
752 | 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', |
752 | daniel-mar | 91 | 'aliases' => |
602 | daniel-mar | 92 | array ( |
621 | daniel-mar | 93 | |
602 | daniel-mar | 94 | ), |
728 | daniel-mar | 95 | 'reference' => 'f99346b5382b1debcdb84c4541941151f700c1be', |
602 | daniel-mar | 96 | ), |
752 | 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', |
752 | daniel-mar | 101 | 'aliases' => |
597 | daniel-mar | 102 | array ( |
621 | daniel-mar | 103 | |
597 | daniel-mar | 104 | ), |
732 | daniel-mar | 105 | 'reference' => '4cee6e674e6628b4deeb0327ab65109da4f28f4d', |
597 | daniel-mar | 106 | ), |
752 | daniel-mar | 107 | 'dcodeio/bcrypt.js' => |
597 | daniel-mar | 108 | array ( |
109 | 'pretty_version' => 'master', |
||
110 | 'version' => 'dev-master', |
||
752 | daniel-mar | 111 | 'aliases' => |
597 | daniel-mar | 112 | array ( |
113 | ), |
||
114 | 'reference' => 'master', |
||
115 | ), |
||
752 | daniel-mar | 116 | 'emn178/js-sha3' => |
597 | daniel-mar | 117 | array ( |
118 | 'pretty_version' => 'master', |
||
119 | 'version' => 'dev-master', |
||
752 | daniel-mar | 120 | 'aliases' => |
597 | daniel-mar | 121 | array ( |
122 | ), |
||
123 | 'reference' => 'master', |
||
124 | ), |
||
752 | 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', |
||
752 | daniel-mar | 129 | 'aliases' => |
597 | daniel-mar | 130 | array ( |
131 | ), |
||
679 | daniel-mar | 132 | 'reference' => '83b609028194aa042ea33b5af2d41a7427de80e6', |
597 | daniel-mar | 133 | ), |
752 | daniel-mar | 134 | 'gedmarc/layout' => |
597 | daniel-mar | 135 | array ( |
136 | 'pretty_version' => 'master', |
||
137 | 'version' => 'dev-master', |
||
752 | daniel-mar | 138 | 'aliases' => |
597 | daniel-mar | 139 | array ( |
140 | ), |
||
141 | 'reference' => 'master', |
||
142 | ), |
||
752 | daniel-mar | 143 | 'matthiasmullie/minify' => |
597 | daniel-mar | 144 | array ( |
145 | 'pretty_version' => '1.3.66', |
||
146 | 'version' => '1.3.66.0', |
||
752 | daniel-mar | 147 | 'aliases' => |
597 | daniel-mar | 148 | array ( |
149 | ), |
||
150 | 'reference' => '45fd3b0f1dfa2c965857c6d4a470bea52adc31a6', |
||
151 | ), |
||
752 | daniel-mar | 152 | 'matthiasmullie/path-converter' => |
597 | daniel-mar | 153 | array ( |
154 | 'pretty_version' => '1.1.3', |
||
155 | 'version' => '1.1.3.0', |
||
752 | daniel-mar | 156 | 'aliases' => |
597 | daniel-mar | 157 | array ( |
158 | ), |
||
159 | 'reference' => 'e7d13b2c7e2f2268e1424aaed02085518afa02d9', |
||
160 | ), |
||
752 | daniel-mar | 161 | 'n-other/php-sha3' => |
597 | daniel-mar | 162 | array ( |
163 | 'pretty_version' => 'dev-master', |
||
164 | 'version' => 'dev-master', |
||
752 | daniel-mar | 165 | 'aliases' => |
597 | daniel-mar | 166 | array ( |
167 | |||
168 | ), |
||
169 | 'reference' => '54ee3b90986e88286d333319e6340b90bde4f71a', |
||
170 | ), |
||
752 | daniel-mar | 171 | 'spamspan/spamspan' => |
597 | daniel-mar | 172 | array ( |
173 | 'pretty_version' => 'master', |
||
174 | 'version' => 'dev-master', |
||
752 | daniel-mar | 175 | 'aliases' => |
597 | daniel-mar | 176 | array ( |
177 | ), |
||
178 | 'reference' => 'master', |
||
179 | ), |
||
752 | daniel-mar | 180 | 'symfony/polyfill-mbstring' => |
597 | daniel-mar | 181 | array ( |
182 | 'pretty_version' => 'v1.19.0', |
||
183 | 'version' => '1.19.0.0', |
||
752 | daniel-mar | 184 | 'aliases' => |
597 | daniel-mar | 185 | array ( |
186 | ), |
||
187 | 'reference' => 'b5f7b932ee6fa802fc792eabd77c4c88084517ce', |
||
188 | ), |
||
752 | daniel-mar | 189 | 'tinymce/tinymce' => |
597 | daniel-mar | 190 | array ( |
679 | daniel-mar | 191 | 'pretty_version' => '5.10.2', |
192 | 'version' => '5.10.2.0', |
||
752 | daniel-mar | 193 | 'aliases' => |
597 | daniel-mar | 194 | array ( |
195 | ), |
||
679 | daniel-mar | 196 | 'reference' => 'ef9962f1d40abbb80a4fd4f023151fd28f891a6c', |
597 | daniel-mar | 197 | ), |
752 | daniel-mar | 198 | 'twbs/bootstrap' => |
597 | daniel-mar | 199 | array ( |
679 | daniel-mar | 200 | 'pretty_version' => 'v5.1.3', |
201 | 'version' => '5.1.3.0', |
||
752 | daniel-mar | 202 | 'aliases' => |
597 | daniel-mar | 203 | array ( |
204 | ), |
||
679 | daniel-mar | 205 | 'reference' => '1a6fdfae6be09b09eaced8f0e442ca6f7680a61e', |
597 | daniel-mar | 206 | ), |
752 | daniel-mar | 207 | 'tweeb/tinymce-i18n' => |
597 | daniel-mar | 208 | array ( |
209 | 'pretty_version' => '2.0.3', |
||
210 | 'version' => '2.0.3.0', |
||
752 | daniel-mar | 211 | 'aliases' => |
597 | daniel-mar | 212 | array ( |
213 | ), |
||
214 | 'reference' => '9be0b61d0d91bba1f9a5c34f4830752b5da987ef', |
||
215 | ), |
||
752 | daniel-mar | 216 | 'twitter/bootstrap' => |
597 | daniel-mar | 217 | array ( |
752 | daniel-mar | 218 | 'replaced' => |
597 | daniel-mar | 219 | array ( |
679 | daniel-mar | 220 | |
597 | daniel-mar | 221 | ), |
222 | ), |
||
752 | daniel-mar | 223 | 'vakata/jstree' => |
597 | daniel-mar | 224 | array ( |
637 | daniel-mar | 225 | 'pretty_version' => '3.3.12', |
226 | 'version' => '3.3.12.0', |
||
752 | daniel-mar | 227 | 'aliases' => |
597 | daniel-mar | 228 | array ( |
229 | ), |
||
637 | daniel-mar | 230 | 'reference' => '7a03954015eaea2467956dc05e6be78f4d1a1ff0', |
597 | daniel-mar | 231 | ), |
232 | ), |
||
233 | ); |
||
234 | private static $canGetVendors; |
||
235 | private static $installedByVendor = array(); |
||
236 | |||
237 | |||
238 | |||
239 | |||
240 | |||
241 | |||
242 | |||
243 | public static function getInstalledPackages() |
||
244 | { |
||
245 | $packages = array(); |
||
246 | foreach (self::getInstalled() as $installed) { |
||
247 | $packages[] = array_keys($installed['versions']); |
||
248 | } |
||
249 | |||
250 | if (1 === \count($packages)) { |
||
251 | return $packages[0]; |
||
252 | } |
||
253 | |||
254 | return array_keys(array_flip(\call_user_func_array('array_merge', $packages))); |
||
255 | } |
||
256 | |||
257 | |||
258 | |||
259 | |||
260 | |||
261 | |||
262 | |||
263 | |||
264 | |||
265 | public static function isInstalled($packageName) |
||
266 | { |
||
267 | foreach (self::getInstalled() as $installed) { |
||
268 | if (isset($installed['versions'][$packageName])) { |
||
269 | return true; |
||
270 | } |
||
271 | } |
||
272 | |||
273 | return false; |
||
274 | } |
||
275 | |||
276 | |||
277 | |||
278 | |||
279 | |||
280 | |||
281 | |||
282 | |||
283 | |||
284 | |||
285 | |||
286 | |||
287 | |||
288 | |||
289 | public static function satisfies(VersionParser $parser, $packageName, $constraint) |
||
290 | { |
||
291 | $constraint = $parser->parseConstraints($constraint); |
||
292 | $provided = $parser->parseConstraints(self::getVersionRanges($packageName)); |
||
293 | |||
294 | return $provided->matches($constraint); |
||
295 | } |
||
296 | |||
297 | |||
298 | |||
299 | |||
300 | |||
301 | |||
302 | |||
303 | |||
304 | |||
305 | |||
306 | public static function getVersionRanges($packageName) |
||
307 | { |
||
308 | foreach (self::getInstalled() as $installed) { |
||
309 | if (!isset($installed['versions'][$packageName])) { |
||
310 | continue; |
||
311 | } |
||
312 | |||
313 | $ranges = array(); |
||
314 | if (isset($installed['versions'][$packageName]['pretty_version'])) { |
||
315 | $ranges[] = $installed['versions'][$packageName]['pretty_version']; |
||
316 | } |
||
317 | if (array_key_exists('aliases', $installed['versions'][$packageName])) { |
||
318 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']); |
||
319 | } |
||
320 | if (array_key_exists('replaced', $installed['versions'][$packageName])) { |
||
321 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']); |
||
322 | } |
||
323 | if (array_key_exists('provided', $installed['versions'][$packageName])) { |
||
324 | $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']); |
||
325 | } |
||
326 | |||
327 | return implode(' || ', $ranges); |
||
328 | } |
||
329 | |||
330 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
331 | } |
||
332 | |||
333 | |||
334 | |||
335 | |||
336 | |||
337 | public static function getVersion($packageName) |
||
338 | { |
||
339 | foreach (self::getInstalled() as $installed) { |
||
340 | if (!isset($installed['versions'][$packageName])) { |
||
341 | continue; |
||
342 | } |
||
343 | |||
344 | if (!isset($installed['versions'][$packageName]['version'])) { |
||
345 | return null; |
||
346 | } |
||
347 | |||
348 | return $installed['versions'][$packageName]['version']; |
||
349 | } |
||
350 | |||
351 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
352 | } |
||
353 | |||
354 | |||
355 | |||
356 | |||
357 | |||
358 | public static function getPrettyVersion($packageName) |
||
359 | { |
||
360 | foreach (self::getInstalled() as $installed) { |
||
361 | if (!isset($installed['versions'][$packageName])) { |
||
362 | continue; |
||
363 | } |
||
364 | |||
365 | if (!isset($installed['versions'][$packageName]['pretty_version'])) { |
||
366 | return null; |
||
367 | } |
||
368 | |||
369 | return $installed['versions'][$packageName]['pretty_version']; |
||
370 | } |
||
371 | |||
372 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
373 | } |
||
374 | |||
375 | |||
376 | |||
377 | |||
378 | |||
379 | public static function getReference($packageName) |
||
380 | { |
||
381 | foreach (self::getInstalled() as $installed) { |
||
382 | if (!isset($installed['versions'][$packageName])) { |
||
383 | continue; |
||
384 | } |
||
385 | |||
386 | if (!isset($installed['versions'][$packageName]['reference'])) { |
||
387 | return null; |
||
388 | } |
||
389 | |||
390 | return $installed['versions'][$packageName]['reference']; |
||
391 | } |
||
392 | |||
393 | throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed'); |
||
394 | } |
||
395 | |||
396 | |||
397 | |||
398 | |||
399 | |||
400 | public static function getRootPackage() |
||
401 | { |
||
402 | $installed = self::getInstalled(); |
||
403 | |||
404 | return $installed[0]['root']; |
||
405 | } |
||
406 | |||
407 | |||
408 | |||
409 | |||
410 | |||
411 | |||
412 | |||
413 | |||
414 | public static function getRawData() |
||
415 | { |
||
416 | @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); |
||
417 | |||
418 | return self::$installed; |
||
419 | } |
||
420 | |||
421 | |||
422 | |||
423 | |||
424 | |||
425 | |||
426 | |||
427 | public static function getAllRawData() |
||
428 | { |
||
429 | return self::getInstalled(); |
||
430 | } |
||
431 | |||
432 | |||
433 | |||
434 | |||
435 | |||
436 | |||
437 | |||
438 | |||
439 | |||
440 | |||
441 | |||
442 | |||
443 | |||
444 | |||
445 | |||
446 | |||
447 | |||
448 | |||
449 | |||
450 | public static function reload($data) |
||
451 | { |
||
452 | self::$installed = $data; |
||
453 | self::$installedByVendor = array(); |
||
454 | } |
||
455 | |||
456 | |||
457 | |||
458 | |||
459 | |||
460 | private static function getInstalled() |
||
461 | { |
||
462 | if (null === self::$canGetVendors) { |
||
463 | self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders'); |
||
464 | } |
||
465 | |||
466 | $installed = array(); |
||
467 | |||
468 | if (self::$canGetVendors) { |
||
469 | foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) { |
||
470 | if (isset(self::$installedByVendor[$vendorDir])) { |
||
471 | $installed[] = self::$installedByVendor[$vendorDir]; |
||
472 | } elseif (is_file($vendorDir.'/composer/installed.php')) { |
||
473 | $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php'; |
||
474 | } |
||
475 | } |
||
476 | } |
||
477 | |||
478 | $installed[] = self::$installed; |
||
479 | |||
480 | return $installed; |
||
481 | } |
||
482 | } |