Browse Source

added support for nested location of composer.json files within artifacts

Serge Smertin 12 years ago
parent
commit
f25bfe09c5

+ 14 - 3
src/Composer/Repository/ArtifactRepository.php

@@ -69,12 +69,23 @@ class ArtifactRepository extends ArrayRepository
 
     private function getComposerInformation(\SplFileInfo $file)
     {
-        $composerFile = "zip://{$file->getPathname()}#composer.json";
-        $json = @file_get_contents($composerFile);
-        if (!$json) {
+        $zip = new \ZipArchive();
+        $zip->open($file->getPathname());
+
+        if (0 == $zip->numFiles) {
+            return false;
+        }
+
+        $foundFileIndex = $zip->locateName('composer.json', \ZipArchive::FL_NODIR);
+        if (false === $foundFileIndex) {
             return false;
         }
 
+        $configurationFileName = $zip->getNameIndex($foundFileIndex);
+
+        $composerFile = "zip://{$file->getPathname()}#$configurationFileName";
+        $json = file_get_contents($composerFile);
+
         $package = JsonFile::parseJson($json, $composerFile);
         $package['dist'] = array(
             'type' => 'zip',

+ 1 - 0
tests/Composer/Test/Repository/ArtifactRepositoryTest.php

@@ -22,6 +22,7 @@ class ArtifactRepositoryTest extends TestCase
     public function testExtractsConfigsFromZipArchives()
     {
         $expectedPackages = array(
+            'composer/composer-1.0.0-alpha6',
             'vendor0/package0-0.0.1',
             'vendor1/package2-4.3.2',
         );