WritableArrayRepository.php 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. <?php
  2. /*
  3. * This file is part of Composer.
  4. *
  5. * (c) Nils Adermann <naderman@naderman.de>
  6. * Jordi Boggiano <j.boggiano@seld.be>
  7. *
  8. * For the full copyright and license information, please view the LICENSE
  9. * file that was distributed with this source code.
  10. */
  11. namespace Composer\Repository;
  12. use Composer\Package\AliasPackage;
  13. /**
  14. * Writable array repository.
  15. *
  16. * @author Jordi Boggiano <j.boggiano@seld.be>
  17. */
  18. class WritableArrayRepository extends ArrayRepository implements WritableRepositoryInterface
  19. {
  20. /**
  21. * {@inheritDoc}
  22. */
  23. public function write()
  24. {
  25. }
  26. /**
  27. * {@inheritDoc}
  28. */
  29. public function reload()
  30. {
  31. }
  32. /**
  33. * {@inheritDoc}
  34. */
  35. public function getCanonicalPackages()
  36. {
  37. $packages = $this->getPackages();
  38. // get at most one package of each name, preferring non-aliased ones
  39. $packagesByName = array();
  40. foreach ($packages as $package) {
  41. if (!isset($packagesByName[$package->getName()]) || $packagesByName[$package->getName()] instanceof AliasPackage) {
  42. $packagesByName[$package->getName()] = $package;
  43. }
  44. }
  45. $canonicalPackages = array();
  46. // unfold aliased packages
  47. foreach ($packagesByName as $package) {
  48. while ($package instanceof AliasPackage) {
  49. $package = $package->getAliasOf();
  50. }
  51. $canonicalPackages[] = $package;
  52. }
  53. return $canonicalPackages;
  54. }
  55. }