瀏覽代碼

split into 2 extract methods

Guillaume ZITTA 8 年之前
父節點
當前提交
211c874b93
共有 1 個文件被更改,包括 47 次插入20 次删除
  1. 47 20
      src/Composer/Downloader/ZipDownloader.php

+ 47 - 20
src/Composer/Downloader/ZipDownloader.php

@@ -59,46 +59,73 @@ class ZipDownloader extends ArchiveDownloader
         return parent::download($package, $path, $output);
     }
 
-    /*
-     * extract $file to $path
+    /**
+     * extract $file to $path with "unzip" command
      *
      * @param string $file File to extract
      * @param string $path Path where to extract file
+     * @return bool True if succeed
      */
-    protected function extract($file, $path)
+    protected function extractWithUnzip($file, $path)
     {
         $processError = null;
+        $command = 'unzip -qq '.ProcessExecutor::escape($file).' -d '.ProcessExecutor::escape($path);
+        if (!Platform::isWindows()) {
+            $command .= ' && chmod -R u+w ' . ProcessExecutor::escape($path);
+        }
 
-        if (self::$hasSystemUnzip && !(class_exists('ZipArchive') && Platform::isWindows())) {
-            $command = 'unzip -qq '.ProcessExecutor::escape($file).' -d '.ProcessExecutor::escape($path);
-            if (!Platform::isWindows()) {
-                $command .= ' && chmod -R u+w ' . ProcessExecutor::escape($path);
-            }
-
-            try {
-                if (0 === $this->process->execute($command, $ignoredOutput)) {
-                    return;
-                }
-
-                $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput();
-            } catch (\Exception $e) {
-                $processError = 'Failed to execute ' . $command . "\n\n" . $e->getMessage();
+        try {
+            if (0 === $this->process->execute($command, $ignoredOutput)) {
+                return TRUE;
             }
 
-            throw new \RuntimeException($processError);
+            $processError = 'Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput();
+        } catch (\Exception $e) {
+            $processError = 'Failed to execute ' . $command . "\n\n" . $e->getMessage();
         }
 
+        throw new \RuntimeException($processError);
+    }
+
+    /**
+     * extract $file to $path with ZipArchive
+     *
+     * @param string $file File to extract
+     * @param string $path Path where to extract file
+     * @return bool True if succeed
+     */
+    protected function extractWithZipArchive($file, $path)
+    {
         $zipArchive = new ZipArchive();
 
         if (true !== ($retval = $zipArchive->open($file))) {
-            throw new \UnexpectedValueException(rtrim($this->getErrorMessage($retval, $file)."\n".$processError), $retval);
+            throw new \UnexpectedValueException(rtrim($this->getErrorMessage($retval, $file)."\n"), $retval);
         }
 
         if (true !== $zipArchive->extractTo($path)) {
-            throw new \RuntimeException(rtrim("There was an error extracting the ZIP file, it is either corrupted or using an invalid format.\n".$processError));
+            throw new \RuntimeException(rtrim("There was an error extracting the ZIP file, it is either corrupted or using an invalid format.\n"));
         }
 
         $zipArchive->close();
+
+        return TRUE;
+    }
+
+    /**
+     * extract $file to $path
+     *
+     * @param string $file File to extract
+     * @param string $path Path where to extract file
+     */
+    protected function extract($file, $path)
+    {
+        if (self::$hasSystemUnzip && !(class_exists('ZipArchive') && Platform::isWindows())) {
+            if ( $this->extractWithUnzip($file, $path) ) {
+                return;
+            }
+        }
+
+        $this->extractWithZipArchive($file, $path);
     }
 
     /**