MetadataMinifier.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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\Util;
  12. class MetadataMinifier
  13. {
  14. public static function expand(array $versions)
  15. {
  16. $expanded = array();
  17. $expandedVersion = null;
  18. foreach ($versions as $versionData) {
  19. if (!$expandedVersion) {
  20. $expandedVersion = $versionData;
  21. $expanded[] = $expandedVersion;
  22. continue;
  23. }
  24. // add any changes from the previous version to the expanded one
  25. foreach ($versionData as $key => $val) {
  26. if ($val === '__unset') {
  27. unset($expandedVersion[$key]);
  28. } else {
  29. $expandedVersion[$key] = $val;
  30. }
  31. }
  32. $expanded[] = $expandedVersion;
  33. }
  34. return $expanded;
  35. }
  36. public static function minify(array $versions)
  37. {
  38. $minifiedVersions = array();
  39. $lastKnownVersionData = null;
  40. foreach ($versions as $version) {
  41. if (!$lastKnownVersionData) {
  42. $lastKnownVersionData = $version;
  43. $minifiedVersions[] = $version;
  44. continue;
  45. }
  46. $minifiedVersion = array();
  47. // add any changes from the previous version
  48. foreach ($version as $key => $val) {
  49. if (!isset($lastKnownVersionData[$key]) || $lastKnownVersionData[$key] !== $val) {
  50. $minifiedVersion[$key] = $val;
  51. $lastKnownVersionData[$key] = $val;
  52. }
  53. }
  54. // store any deletions from the previous version for keys missing in current one
  55. foreach ($lastKnownVersionData as $key => $val) {
  56. if (!isset($version[$key])) {
  57. $minifiedVersion[$key] = "__unset";
  58. unset($lastKnownVersionData[$key]);
  59. }
  60. }
  61. $minifiedVersions[] = $minifiedVersion;
  62. }
  63. return $minifiedVersions;
  64. }
  65. }