Просмотр исходного кода

Update PearDownloader to use PEAR extractor

Alexey Prilipko 12 лет назад
Родитель
Сommit
5c16889c48

+ 23 - 7
src/Composer/Downloader/PearDownloader.php

@@ -12,25 +12,41 @@
 
 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 TarDownloader
+class PearDownloader extends FileDownloader
 {
     /**
      * {@inheritDoc}
      */
-    protected function extract($file, $path)
+    public function download(PackageInterface $package, $path)
     {
-        parent::extract($file, $path);
-        if (file_exists($path . '/package.sig')) {
-            unlink($path . '/package.sig');
+        parent::download($package, $path);
+
+        $fileName = $this->getFileName($package, $path);
+        if ($this->io->isVerbose()) {
+            $this->io->write('    Installing PEAR package');
         }
-        if (file_exists($path . '/package.xml')) {
-            unlink($path . '/package.xml');
+        try {
+            $pearExtractor = new PearPackageExtractor($fileName);
+            $pearExtractor->extractTo($path);
+
+            if ($this->io->isVerbose()) {
+                $this->io->write('    Cleaning up');
+            }
+            unlink($fileName);
+        } catch (\Exception $e) {
+            // clean up
+            $this->filesystem->removeDirectory($path);
+            throw $e;
         }
+
+        $this->io->write('');
     }
 }

+ 38 - 0
tests/Composer/Test/Downloader/PearDownloaderTest.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\Test\Downloader;
+
+use Composer\Downloader\PearDownloader;
+
+class PearDownloaderTest extends \PHPUnit_Framework_TestCase
+{
+    public function testErrorMessages()
+    {
+        $packageMock = $this->getMock('Composer\Package\PackageInterface');
+        $packageMock->expects($this->any())
+            ->method('getDistUrl')
+            ->will($this->returnValue('file://'.__FILE__))
+        ;
+
+        $io = $this->getMock('Composer\IO\IOInterface');
+        $downloader = new PearDownloader($io);
+
+        try {
+            $downloader->download($packageMock, sys_get_temp_dir().'/composer-pear-test');
+            $this->fail('Download of invalid pear packages should throw an exception');
+        } catch (\UnexpectedValueException $e) {
+            $this->assertContains('Failed to extract PEAR package', $e->getMessage());
+        }
+    }
+
+}