Explorar o código

Provide partial packages names if available, closes #8516, fixes #8526

Maximilian Bösing %!s(int64=5) %!d(string=hai) anos
pai
achega
3791a574a2

+ 5 - 0
src/Composer/Repository/ComposerRepository.php

@@ -249,6 +249,11 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito
             $this->loadProviderListings($this->loadRootServerFile());
         }
 
+        if ($this->hasPartialPackages && 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();

+ 29 - 0
tests/Composer/Test/Repository/ComposerRepositoryTest.php

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