Subversion Repositories oidplus

Rev

Rev 958 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  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' => '1.0.0+no-version-set',
  31.     'version' => '1.0.0.0',
  32.     'aliases' =>
  33.     array (
  34.     ),
  35.     'reference' => NULL,
  36.     'name' => '__root__',
  37.   ),
  38.   'versions' =>
  39.   array (
  40.     '__root__' =>
  41.     array (
  42.       'pretty_version' => '1.0.0+no-version-set',
  43.       'version' => '1.0.0.0',
  44.       'aliases' =>
  45.       array (
  46.       ),
  47.       'reference' => NULL,
  48.     ),
  49.     'robrichards/xmlseclibs' =>
  50.     array (
  51.       'pretty_version' => '3.1.1',
  52.       'version' => '3.1.1.0',
  53.       'aliases' =>
  54.       array (
  55.       ),
  56.       'reference' => 'f8f19e58f26cdb42c54b214ff8a820760292f8df',
  57.     ),
  58.   ),
  59. );
  60. private static $canGetVendors;
  61. private static $installedByVendor = array();
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69. public static function getInstalledPackages()
  70. {
  71. $packages = array();
  72. foreach (self::getInstalled() as $installed) {
  73. $packages[] = array_keys($installed['versions']);
  74. }
  75.  
  76. if (1 === \count($packages)) {
  77. return $packages[0];
  78. }
  79.  
  80. return array_keys(array_flip(\call_user_func_array('array_merge', $packages)));
  81. }
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91. public static function isInstalled($packageName)
  92. {
  93. foreach (self::getInstalled() as $installed) {
  94. if (isset($installed['versions'][$packageName])) {
  95. return true;
  96. }
  97. }
  98.  
  99. return false;
  100. }
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115. public static function satisfies(VersionParser $parser, $packageName, $constraint)
  116. {
  117. $constraint = $parser->parseConstraints($constraint);
  118. $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
  119.  
  120. return $provided->matches($constraint);
  121. }
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132. public static function getVersionRanges($packageName)
  133. {
  134. foreach (self::getInstalled() as $installed) {
  135. if (!isset($installed['versions'][$packageName])) {
  136. continue;
  137. }
  138.  
  139. $ranges = array();
  140. if (isset($installed['versions'][$packageName]['pretty_version'])) {
  141. $ranges[] = $installed['versions'][$packageName]['pretty_version'];
  142. }
  143. if (array_key_exists('aliases', $installed['versions'][$packageName])) {
  144. $ranges = array_merge($ranges, $installed['versions'][$packageName]['aliases']);
  145. }
  146. if (array_key_exists('replaced', $installed['versions'][$packageName])) {
  147. $ranges = array_merge($ranges, $installed['versions'][$packageName]['replaced']);
  148. }
  149. if (array_key_exists('provided', $installed['versions'][$packageName])) {
  150. $ranges = array_merge($ranges, $installed['versions'][$packageName]['provided']);
  151. }
  152.  
  153. return implode(' || ', $ranges);
  154. }
  155.  
  156. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  157. }
  158.  
  159.  
  160.  
  161.  
  162.  
  163. public static function getVersion($packageName)
  164. {
  165. foreach (self::getInstalled() as $installed) {
  166. if (!isset($installed['versions'][$packageName])) {
  167. continue;
  168. }
  169.  
  170. if (!isset($installed['versions'][$packageName]['version'])) {
  171. return null;
  172. }
  173.  
  174. return $installed['versions'][$packageName]['version'];
  175. }
  176.  
  177. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  178. }
  179.  
  180.  
  181.  
  182.  
  183.  
  184. public static function getPrettyVersion($packageName)
  185. {
  186. foreach (self::getInstalled() as $installed) {
  187. if (!isset($installed['versions'][$packageName])) {
  188. continue;
  189. }
  190.  
  191. if (!isset($installed['versions'][$packageName]['pretty_version'])) {
  192. return null;
  193. }
  194.  
  195. return $installed['versions'][$packageName]['pretty_version'];
  196. }
  197.  
  198. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  199. }
  200.  
  201.  
  202.  
  203.  
  204.  
  205. public static function getReference($packageName)
  206. {
  207. foreach (self::getInstalled() as $installed) {
  208. if (!isset($installed['versions'][$packageName])) {
  209. continue;
  210. }
  211.  
  212. if (!isset($installed['versions'][$packageName]['reference'])) {
  213. return null;
  214. }
  215.  
  216. return $installed['versions'][$packageName]['reference'];
  217. }
  218.  
  219. throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
  220. }
  221.  
  222.  
  223.  
  224.  
  225.  
  226. public static function getRootPackage()
  227. {
  228. $installed = self::getInstalled();
  229.  
  230. return $installed[0]['root'];
  231. }
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240. public static function getRawData()
  241. {
  242. @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);
  243.  
  244. return self::$installed;
  245. }
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253. public static function getAllRawData()
  254. {
  255. return self::getInstalled();
  256. }
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273.  
  274.  
  275.  
  276. public static function reload($data)
  277. {
  278. self::$installed = $data;
  279. self::$installedByVendor = array();
  280. }
  281.  
  282.  
  283.  
  284.  
  285.  
  286. private static function getInstalled()
  287. {
  288. if (null === self::$canGetVendors) {
  289. self::$canGetVendors = method_exists('Composer\Autoload\ClassLoader', 'getRegisteredLoaders');
  290. }
  291.  
  292. $installed = array();
  293.  
  294. if (self::$canGetVendors) {
  295. foreach (ClassLoader::getRegisteredLoaders() as $vendorDir => $loader) {
  296. if (isset(self::$installedByVendor[$vendorDir])) {
  297. $installed[] = self::$installedByVendor[$vendorDir];
  298. } elseif (is_file($vendorDir.'/composer/installed.php')) {
  299. $installed[] = self::$installedByVendor[$vendorDir] = require $vendorDir.'/composer/installed.php';
  300. }
  301. }
  302. }
  303.  
  304. $installed[] = self::$installed;
  305.  
  306. return $installed;
  307. }
  308. }
  309.