From 704837c574efc89798ba78056e79b07ca7300fbb Mon Sep 17 00:00:00 2001 From: perprogramming Date: Thu, 31 Jan 2013 09:55:19 +0100 Subject: [PATCH 1/2] - Sort links and keywords in ArrayDumper result (fixes issue #1499) - Adapt ArrayDumperTest --- src/Composer/Package/Dumper/ArrayDumper.php | 15 +++++++ .../Test/Package/Dumper/ArrayDumperTest.php | 40 ++++++++++++++++++- 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/Composer/Package/Dumper/ArrayDumper.php b/src/Composer/Package/Dumper/ArrayDumper.php index 47167dd23..4b9895f9d 100644 --- a/src/Composer/Package/Dumper/ArrayDumper.php +++ b/src/Composer/Package/Dumper/ArrayDumper.php @@ -16,6 +16,7 @@ use Composer\Package\BasePackage; use Composer\Package\PackageInterface; use Composer\Package\CompletePackageInterface; use Composer\Package\RootPackageInterface; +use Composer\Package\Link; /** * @author Konstantin Kudryashiv @@ -59,6 +60,15 @@ class ArrayDumper foreach (BasePackage::$supportedLinkTypes as $type => $opts) { if ($links = $package->{'get'.ucfirst($opts['method'])}()) { + usort($links, function (Link $a, Link $b) { + $comparison = strcmp($a->getTarget(), $b->getTarget()); + + if (0 !== $comparison) { + return $comparison; + } + + return strcmp($a->getPrettyConstraint(), $b->getPrettyConstraint()); + }); foreach ($links as $link) { $data[$type][$link->getTarget()] = $link->getPrettyConstraint(); } @@ -66,6 +76,7 @@ class ArrayDumper } if ($packages = $package->getSuggests()) { + ksort($packages); $data['suggest'] = $packages; } @@ -88,6 +99,10 @@ class ArrayDumper ); $data = $this->dumpValues($package, $keys, $data); + + if (isset($data['keywords']) && is_array($data['keywords'])) { + sort($data['keywords']); + } } if ($package instanceof RootPackageInterface) { diff --git a/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php b/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php index e21726b09..ec80984be 100644 --- a/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php +++ b/tests/Composer/Test/Package/Dumper/ArrayDumperTest.php @@ -101,7 +101,9 @@ class ArrayDumperTest extends \PHPUnit_Framework_TestCase ), array( 'keywords', - array('package', 'dependency', 'autoload') + array('package', 'dependency', 'autoload'), + null, + array('autoload', 'dependency', 'package') ), array( 'bin', @@ -148,6 +150,42 @@ class ArrayDumperTest extends \PHPUnit_Framework_TestCase array( 'support', array('foo' => 'bar'), + ), + array( + 'require', + array(new Link('foo', 'foo/bar', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0')), + 'requires', + array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0') + ), + array( + 'require-dev', + array(new Link('foo', 'foo/bar', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0')), + 'devRequires', + array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0') + ), + array( + 'suggest', + array('foo/bar' => 'very useful package', 'bar/baz' => 'another useful package'), + 'suggests', + array('bar/baz' => 'another useful package', 'foo/bar' => 'very useful package') + ), + array( + 'provide', + array(new Link('foo', 'foo/bar', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0')), + 'provides', + array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0') + ), + array( + 'replace', + array(new Link('foo', 'foo/bar', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0')), + 'replaces', + array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0') + ), + array( + 'conflict', + array(new Link('foo', 'foo/bar', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0'), new Link('bar', 'bar/baz', new VersionConstraint('=', '1.0.0.0'), 'requires', '1.0.0')), + 'conflicts', + array('bar/baz' => '1.0.0', 'foo/bar' => '1.0.0') ) ); } From 9219e1ab0a9e106ebc837f2fd5878b3831adddd3 Mon Sep 17 00:00:00 2001 From: perprogramming Date: Thu, 31 Jan 2013 10:19:16 +0100 Subject: [PATCH 2/2] Simplify ordering of links (there cannot be multiple links to the same target) --- src/Composer/Package/Dumper/ArrayDumper.php | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/src/Composer/Package/Dumper/ArrayDumper.php b/src/Composer/Package/Dumper/ArrayDumper.php index 4b9895f9d..22d62381b 100644 --- a/src/Composer/Package/Dumper/ArrayDumper.php +++ b/src/Composer/Package/Dumper/ArrayDumper.php @@ -60,18 +60,10 @@ class ArrayDumper foreach (BasePackage::$supportedLinkTypes as $type => $opts) { if ($links = $package->{'get'.ucfirst($opts['method'])}()) { - usort($links, function (Link $a, Link $b) { - $comparison = strcmp($a->getTarget(), $b->getTarget()); - - if (0 !== $comparison) { - return $comparison; - } - - return strcmp($a->getPrettyConstraint(), $b->getPrettyConstraint()); - }); foreach ($links as $link) { $data[$type][$link->getTarget()] = $link->getPrettyConstraint(); } + ksort($data[$type]); } }