1
0
Fork 0

Fix ComposerRepo issue

pull/8528/head
Jordi Boggiano 2020-01-14 16:20:31 +01:00
parent f91859ceff
commit 40f5806a7c
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC
2 changed files with 21 additions and 22 deletions

View File

@ -242,11 +242,15 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
return array_values($this->loadAsyncPackages($packageMap));
}
throw new \LogicException('Composer repositories that have lazy providers and no available-packages list can not load the complete list of packages, use getProviderNames instead.');
if ($this->hasPartialPackages()) {
return array_values($this->partialPackagesByName);
}
throw new \LogicException('Composer repositories that have lazy providers and no available-packages list can not load the complete list of packages, use getPackageNames instead.');
}
if ($hasProviders) {
throw new \LogicException('Composer repositories that have providers can not load the complete list of packages, use getProviderNames instead.');
throw new \LogicException('Composer repositories that have providers can not load the complete list of packages, use getPackageNames instead.');
}
return parent::getPackages();
@ -263,6 +267,11 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
}
// TODO implement new list API endpoint for those repos somehow?
if ($this->hasPartialPackages()) {
return array_keys($this->partialPackagesByName);
}
return array();
}
@ -391,14 +400,6 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
$this->loadProviderListings($this->loadRootServerFile());
}
if ($this->hasPartialPackages) {
if (null === $this->partialPackagesByName) {
$this->initializePartialPackages();
}
return array_keys($this->partialPackagesByName);
}
if ($this->lazyProvidersUrl) {
// Can not determine list of provided packages for lazy repositories
return array();

View File

@ -286,30 +286,28 @@ class ComposerRepositoryTest extends TestCase
public function testGetProviderNamesWillReturnPartialPackageNames()
{
$rfs = $this->getMockBuilder('Composer\Util\RemoteFilesystem')
$httpDownloader = $this->getMockBuilder('Composer\Util\HttpDownloader')
->disableOriginalConstructor()
->getMock();
$rfs->expects($this->at(0))
->method('getContents')
->with('example.org', 'http://example.org/packages.json', false)
->willReturn(json_encode(array(
$httpDownloader->expects($this->at(0))
->method('get')
->with($url = 'http://example.org/packages.json')
->willReturn(new \Composer\Util\Http\Response(array('url' => $url), 200, array(), json_encode(array(
'providers-lazy-url' => '/foo/p/%package%.json',
'packages' => array('foo/bar' => array(
'dev-branch' => array(),
'v1.0.0' => array(),
'dev-branch' => array('name' => 'foo/bar'),
'v1.0.0' => array('name' => 'foo/bar'),
))
)));
))));
$repository = new ComposerRepository(
array('url' => 'http://example.org/packages.json'),
new NullIO(),
FactoryMock::createConfig(),
null,
$rfs
$httpDownloader
);
$this->assertTrue($repository->hasProviders());
$this->assertEquals(array('foo/bar'), $repository->getProviderNames());
$this->assertEquals(array('foo/bar'), $repository->getPackageNames());
}
}