Переглянути джерело

Warn identical names w/ different capitalization - extract zip archive

Warn about identical names with different capitalization on zip archive
extract failure (Not a directory)

Issue #5938
AjiYakin 8 роки тому
батько
коміт
8858b27ced

+ 2 - 0
src/Composer/Downloader/ZipDownloader.php

@@ -156,6 +156,8 @@ class ZipDownloader extends ArchiveDownloader
             } else {
                 $processError = new \UnexpectedValueException(rtrim($this->getErrorMessage($retval, $file)."\n"), $retval);
             }
+        } catch (\ErrorException $ex) {
+            $processError = new \ErrorException('Archive may contain identical directory or file name with different capitalization (fails on case insensitive filesystems)');
         } catch (\Exception $e) {
             $processError = $e;
         }

+ 22 - 0
tests/Composer/Test/Downloader/ZipDownloaderTest.php

@@ -127,6 +127,28 @@ class ZipDownloaderTest extends TestCase
         $downloader->extract('testfile.zip', 'vendor/dir');
     }
 
+    /**
+     * @expectedException \ErrorException
+     * @expectedExceptionMessage Archive may contain identical directory or file name with different capitalization (fails on case insensitive filesystems)
+     */
+    public function testZipArchiveExtractOnlyFailed()
+    {
+        $this->setPrivateProperty('hasSystemUnzip', false);
+        $this->setPrivateProperty('hasZipArchive', true);
+        $downloader = new MockedZipDownloader($this->io, $this->config);
+
+        $zipArchive = $this->getMock('ZipArchive');
+        $zipArchive->expects($this->at(0))
+            ->method('open')
+            ->will($this->returnValue(true));
+        $zipArchive->expects($this->at(1))
+            ->method('extractTo')
+            ->will($this->throwException(new \ErrorException('Not a directory')));
+
+        $this->setPrivateProperty('zipArchiveObject', $zipArchive, $downloader);
+        $downloader->extract('testfile.zip', 'vendor/dir');
+    }
+
     /**
      * @group only
      */