From 40f5806a7ca17f8798a8ccd986f02eca31f75e1e Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Tue, 14 Jan 2020 16:20:31 +0100 Subject: [PATCH] Fix ComposerRepo issue --- .../Repository/ComposerRepository.php | 21 +++++++++--------- .../Repository/ComposerRepositoryTest.php | 22 +++++++++---------- 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/Composer/Repository/ComposerRepository.php b/src/Composer/Repository/ComposerRepository.php index 8ff6da589..975282702 100644 --- a/src/Composer/Repository/ComposerRepository.php +++ b/src/Composer/Repository/ComposerRepository.php @@ -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(); diff --git a/tests/Composer/Test/Repository/ComposerRepositoryTest.php b/tests/Composer/Test/Repository/ComposerRepositoryTest.php index 313f8b7b6..1915389c4 100644 --- a/tests/Composer/Test/Repository/ComposerRepositoryTest.php +++ b/tests/Composer/Test/Repository/ComposerRepositoryTest.php @@ -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()); } }