Rename findPackagesByName to findPackages and allow version arg
parent
afbb9cefa4
commit
5eb333680b
|
@ -118,7 +118,7 @@ EOT
|
||||||
|
|
||||||
// we only have a name, so search for the highest version of the given package
|
// we only have a name, so search for the highest version of the given package
|
||||||
$highestVersion = null;
|
$highestVersion = null;
|
||||||
foreach ($repos->findPackagesByName($input->getArgument('package')) as $package) {
|
foreach ($repos->findPackages($input->getArgument('package')) as $package) {
|
||||||
if (null === $highestVersion || version_compare($package->getVersion(), $highestVersion->getVersion(), '>=')) {
|
if (null === $highestVersion || version_compare($package->getVersion(), $highestVersion->getVersion(), '>=')) {
|
||||||
$highestVersion = $package;
|
$highestVersion = $package;
|
||||||
}
|
}
|
||||||
|
@ -164,7 +164,7 @@ EOT
|
||||||
|
|
||||||
$versions = array();
|
$versions = array();
|
||||||
|
|
||||||
foreach ($repos->findPackagesByName($package->getName()) as $version) {
|
foreach ($repos->findPackages($package->getName()) as $version) {
|
||||||
$versions[] = $version->getPrettyVersion();
|
$versions[] = $version->getPrettyVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,14 +44,21 @@ class ArrayRepository implements RepositoryInterface
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
*/
|
*/
|
||||||
public function findPackagesByName($name)
|
public function findPackages($name, $version = null)
|
||||||
{
|
{
|
||||||
// normalize name
|
// normalize name
|
||||||
$name = strtolower($name);
|
$name = strtolower($name);
|
||||||
|
|
||||||
|
// normalize version
|
||||||
|
if (null !== $version) {
|
||||||
|
$versionParser = new VersionParser();
|
||||||
|
$version = $versionParser->normalize($version);
|
||||||
|
}
|
||||||
|
|
||||||
$packages = array();
|
$packages = array();
|
||||||
|
|
||||||
foreach ($this->getPackages() as $package) {
|
foreach ($this->getPackages() as $package) {
|
||||||
if ($package->getName() === $name) {
|
if ($package->getName() === $name && (null === $version || $version === $package->getVersion())) {
|
||||||
$packages[] = $package;
|
$packages[] = $package;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,12 +68,12 @@ class CompositeRepository implements RepositoryInterface
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
*/
|
*/
|
||||||
public function findPackagesByName($name)
|
public function findPackages($name, $version = null)
|
||||||
{
|
{
|
||||||
$packages = array();
|
$packages = array();
|
||||||
foreach ($this->repositories as $repository) {
|
foreach ($this->repositories as $repository) {
|
||||||
/* @var $repository RepositoryInterface */
|
/* @var $repository RepositoryInterface */
|
||||||
$packages[] = $repository->findPackagesByName($name);
|
$packages[] = $repository->findPackages($name, $version);
|
||||||
}
|
}
|
||||||
return call_user_func_array('array_merge', $packages);
|
return call_user_func_array('array_merge', $packages);
|
||||||
}
|
}
|
||||||
|
|
|
@ -32,7 +32,7 @@ interface RepositoryInterface extends \Countable
|
||||||
function hasPackage(PackageInterface $package);
|
function hasPackage(PackageInterface $package);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Searches for a package by it's name and version (if has one).
|
* Searches for the first match of a package by name and version.
|
||||||
*
|
*
|
||||||
* @param string $name package name
|
* @param string $name package name
|
||||||
* @param string $version package version
|
* @param string $version package version
|
||||||
|
@ -42,13 +42,14 @@ interface RepositoryInterface extends \Countable
|
||||||
function findPackage($name, $version);
|
function findPackage($name, $version);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Searches for packages by it's name.
|
* Searches for all packages matching a name and optionally a version.
|
||||||
*
|
*
|
||||||
* @param string $name package name
|
* @param string $name package name
|
||||||
|
* @param string $version package version
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
function findPackagesByName($name);
|
function findPackages($name, $version = null);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns list of registered packages.
|
* Returns list of registered packages.
|
||||||
|
|
|
@ -50,6 +50,25 @@ class RepositoryManager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Searches for all packages matching a name and optionally a version in managed repositories.
|
||||||
|
*
|
||||||
|
* @param string $name package name
|
||||||
|
* @param string $version package version
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
public function findPackages($name, $version)
|
||||||
|
{
|
||||||
|
$packages = array();
|
||||||
|
|
||||||
|
foreach ($this->repositories as $repository) {
|
||||||
|
$packages = array_merge($packages, $repository->findPackages($name, $version));
|
||||||
|
}
|
||||||
|
|
||||||
|
return $packages;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds repository
|
* Adds repository
|
||||||
*
|
*
|
||||||
|
|
|
@ -51,18 +51,18 @@ class ArrayRepositoryTest extends TestCase
|
||||||
$this->assertFalse($repo->hasPackage($this->getPackage('bar', '1')));
|
$this->assertFalse($repo->hasPackage($this->getPackage('bar', '1')));
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFindPackagesByName()
|
public function testFindPackages()
|
||||||
{
|
{
|
||||||
$repo = new ArrayRepository();
|
$repo = new ArrayRepository();
|
||||||
$repo->addPackage($this->getPackage('foo', '1'));
|
$repo->addPackage($this->getPackage('foo', '1'));
|
||||||
$repo->addPackage($this->getPackage('bar', '2'));
|
$repo->addPackage($this->getPackage('bar', '2'));
|
||||||
$repo->addPackage($this->getPackage('bar', '3'));
|
$repo->addPackage($this->getPackage('bar', '3'));
|
||||||
|
|
||||||
$foo = $repo->findPackagesByName('foo');
|
$foo = $repo->findPackages('foo');
|
||||||
$this->assertCount(1, $foo);
|
$this->assertCount(1, $foo);
|
||||||
$this->assertEquals('foo', $foo[0]->getName());
|
$this->assertEquals('foo', $foo[0]->getName());
|
||||||
|
|
||||||
$bar = $repo->findPackagesByName('bar');
|
$bar = $repo->findPackages('bar');
|
||||||
$this->assertCount(2, $bar);
|
$this->assertCount(2, $bar);
|
||||||
$this->assertEquals('bar', $bar[0]->getName());
|
$this->assertEquals('bar', $bar[0]->getName());
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ class CompositeRepositoryTest extends TestCase
|
||||||
$this->assertNull($repo->findPackage('foo', '2'), "Should not find package 'foo/2'");
|
$this->assertNull($repo->findPackage('foo', '2'), "Should not find package 'foo/2'");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testFindPackagesByName()
|
public function testFindPackages()
|
||||||
{
|
{
|
||||||
$arrayRepoOne = new ArrayRepository;
|
$arrayRepoOne = new ArrayRepository;
|
||||||
$arrayRepoOne->addPackage($this->getPackage('foo', '1'));
|
$arrayRepoOne->addPackage($this->getPackage('foo', '1'));
|
||||||
|
@ -66,15 +66,15 @@ class CompositeRepositoryTest extends TestCase
|
||||||
|
|
||||||
$repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo));
|
$repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo));
|
||||||
|
|
||||||
$bats = $repo->findPackagesByName('bat');
|
$bats = $repo->findPackages('bat');
|
||||||
$this->assertCount(1, $bats, "Should find one instance of 'bats' (defined in just one repository)");
|
$this->assertCount(1, $bats, "Should find one instance of 'bats' (defined in just one repository)");
|
||||||
$this->assertEquals('bat', $bats[0]->getName(), "Should find packages named 'bat'");
|
$this->assertEquals('bat', $bats[0]->getName(), "Should find packages named 'bat'");
|
||||||
|
|
||||||
$bars = $repo->findPackagesByName('bar');
|
$bars = $repo->findPackages('bar');
|
||||||
$this->assertCount(2, $bars, "Should find two instances of 'bar' (both defined in the same repository)");
|
$this->assertCount(2, $bars, "Should find two instances of 'bar' (both defined in the same repository)");
|
||||||
$this->assertEquals('bar', $bars[0]->getName(), "Should find packages named 'bar'");
|
$this->assertEquals('bar', $bars[0]->getName(), "Should find packages named 'bar'");
|
||||||
|
|
||||||
$foos = $repo->findPackagesByName('foo');
|
$foos = $repo->findPackages('foo');
|
||||||
$this->assertCount(3, $foos, "Should find three instances of 'foo' (two defined in one repository, the third in the other)");
|
$this->assertCount(3, $foos, "Should find three instances of 'foo' (two defined in one repository, the third in the other)");
|
||||||
$this->assertEquals('foo', $foos[0]->getName(), "Should find packages named 'foo'");
|
$this->assertEquals('foo', $foos[0]->getName(), "Should find packages named 'foo'");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue