Jelajahi Sumber

Merge remote-tracking branch 'chEbba/tar-phar-downloader'

Conflicts:
	src/Composer/Downloader/PearDownloader.php
Jordi Boggiano 13 tahun lalu
induk
melakukan
418e2e28f3

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

@@ -114,6 +114,8 @@ abstract class FileDownloader implements DownloaderInterface
      *
      * @param string $file Extracted file
      * @param string $path Directory
+     *
+     * @throws \UnexpectedValueException If can not extract downloaded file to path
      */
     protected abstract function extract($file, $path);
 }

+ 8 - 5
src/Composer/Downloader/PearDownloader.php

@@ -15,16 +15,19 @@ namespace Composer\Downloader;
 use Composer\Package\PackageInterface;
 
 /**
+ * Downloader for pear packages
+ *
  * @author Jordi Boggiano <j.boggiano@seld.be>
+ * @author Kirill chEbba Chebunin <iam@chebba.org>
  */
-class PearDownloader extends FileDownloader
+class PearDownloader extends TarDownloader
 {
+    /**
+     * {@inheritDoc}
+     */
     protected function extract($file, $path)
     {
-        $oldDir = getcwd();
-        chdir(dirname($file));
-        system(sprintf('tar -zxf %s', escapeshellarg(basename($file))));
-        chdir($oldDir);
+        parent::extract($file, $path);
         @unlink($path . '/package.sig');
         @unlink($path . '/package.xml');
     }

+ 38 - 0
src/Composer/Downloader/PharDownloader.php

@@ -0,0 +1,38 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Downloader;
+
+use Composer\Package\PackageInterface;
+
+/**
+ * Downloader for phar files
+ *
+ * @author Kirill chEbba Chebunin <iam@chebba.org>
+ */
+class PharDownloader extends FileDownloader
+{
+    /**
+     * {@inheritDoc}
+     */
+    protected function extract($file, $path)
+    {
+        // Can throw an UnexpectedValueException
+        $archive = new \Phar($file);
+        $archive->extractTo($path);
+        /* TODO: handle openssl signed phars
+         * https://github.com/composer/composer/pull/33#issuecomment-2250768
+         * https://github.com/koto/phar-util
+         * http://blog.kotowicz.net/2010/08/hardening-php-how-to-securely-include.html
+         */
+    }
+}

+ 33 - 0
src/Composer/Downloader/TarDownloader.php

@@ -0,0 +1,33 @@
+<?php
+
+/*
+ * This file is part of Composer.
+ *
+ * (c) Nils Adermann <naderman@naderman.de>
+ *     Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Composer\Downloader;
+
+use Composer\Package\PackageInterface;
+
+/**
+ * Downloader for tar files: tar, tar.gz or tar.bz2
+ *
+ * @author Kirill chEbba Chebunin <iam@chebba.org>
+ */
+class TarDownloader extends FileDownloader
+{
+    /**
+     * {@inheritDoc}
+     */
+    protected function extract($file, $path)
+    {
+        // Can throw an UnexpectedValueException
+        $archive = new \PharData($file);
+        $archive->extractTo($path);
+    }
+}