ソースを参照

Fix how download manager is constructed

This fixes tests due to upstream changes.
The createDownloadManager in the Factory now takes the config as extra
parameter.
Matthieu Moquet 12 年 前
コミット
c248115e04

+ 4 - 8
src/Composer/Factory.php

@@ -319,22 +319,18 @@ class Factory
     }
 
     /**
-     * @param string                     $workDir Directory used to download sources
      * @param Downloader\DownloadManager $dm      Manager use to download sources
+     * @param Config                     $config  The configuration
      *
      * @return Archiver\ArchiveManager
      */
-    public function createArchiveManager($workDir = null, DownloadManager $dm = null)
+    public function createArchiveManager(DownloadManager $dm = null, Config $config)
     {
         if (null === $dm) {
-            $dm = $this->createDownloadManager(new IO\NullIO());
+            $dm = $this->createDownloadManager(new IO\NullIO(), $config);
         }
 
-        if (null === $workDir) {
-            $workDir = sys_get_temp_dir();
-        }
-
-        $am = new Archiver\ArchiveManager($workDir, $dm);
+        $am = new Archiver\ArchiveManager($dm);
         $am->addArchiver(new Archiver\GitArchiver);
         $am->addArchiver(new Archiver\MercurialArchiver);
         $am->addArchiver(new Archiver\PharArchiver);

+ 9 - 11
src/Composer/Package/Archiver/ArchiveManager.php

@@ -24,19 +24,15 @@ use Composer\Util\Filesystem;
  */
 class ArchiveManager
 {
-    protected $buildDir;
-
     protected $downloadManager;
 
     protected $archivers = array();
 
     /**
-     * @param string          $buildDir        The directory used to build the archive
      * @param DownloadManager $downloadManager A manager used to download package sources
      */
-    public function __construct($buildDir, DownloadManager $downloadManager)
+    public function __construct(DownloadManager $downloadManager)
     {
-        $this->buildDir = $buildDir;
         $this->downloadManager = $downloadManager;
     }
 
@@ -51,17 +47,19 @@ class ArchiveManager
     /**
      * Create an archive of the specified package.
      *
-     * @param PackageInterface $package The package to archive
-     * @param string           $format  The format of the archive (zip, tar, ...)
+     * @param PackageInterface $package   The package to archive
+     * @param string           $format    The format of the archive (zip, tar, ...)
+     * @param string           $targetDir The diretory where to build the archive
      *
      * @return string The path of the created archive
      */
-    public function archive(PackageInterface $package, $format)
+    public function archive(PackageInterface $package, $format, $targetDir)
     {
         if (empty($format)) {
             throw new \InvalidArgumentException('Format must be specified');
         }
 
+        // Search for the most appropriate archiver
         $usableArchiver = null;
         foreach ($this->archivers as $archiver) {
             if ($archiver->supports($format, $package->getSourceType())) {
@@ -78,12 +76,12 @@ class ArchiveManager
         // Directory used to download the sources
         $filesystem = new Filesystem();
         $packageName = $package->getUniqueName();
-        $sources = sys_get_temp_dir().'/'.$packageName;
+        $sources = sys_get_temp_dir().'/composer_archiver/'.$packageName;
         $filesystem->ensureDirectoryExists($sources);
 
         // Archive filename
-        $target = $this->buildDir.'/'.$packageName.'.'.$format;
-        $filesystem->ensureDirectoryExists(dirname($this->buildDir.$target));
+        $target = $targetDir.'/'.$packageName.'.'.$format;
+        $filesystem->ensureDirectoryExists(dirname($target));
 
         // Download sources
         $this->downloadManager->download($package, $sources, true);

+ 8 - 10
tests/Composer/Test/Package/Archiver/ArchiveManagerTest.php

@@ -25,17 +25,15 @@ use Composer\Package\PackageInterface;
 class ArchiveManagerTest extends ArchiverTest
 {
     protected $manager;
-
-    protected $workDir;
+    protected $targetDir;
 
     public function setUp()
     {
         parent::setUp();
 
         $factory = new Factory();
-
-        $this->workDir = sys_get_temp_dir();
-        $this->manager = $factory->createArchiveManager($this->workDir);
+        $this->manager = $factory->createArchiveManager(null, $factory->createConfig());
+        $this->targetDir = sys_get_temp_dir().'/composer_archiver_tests';
     }
 
     public function testUnknownFormat()
@@ -44,7 +42,7 @@ class ArchiveManagerTest extends ArchiverTest
 
         $package = $this->setupPackage();
 
-        $this->manager->archive($package, '__unknown_format__');
+        $this->manager->archive($package, '__unknown_format__', $this->targetDir);
     }
 
     public function testArchiveTarWithVcs()
@@ -55,7 +53,7 @@ class ArchiveManagerTest extends ArchiverTest
 
         // The package is source from git,
         // so it should `git archive --format tar`
-        $this->manager->archive($package, 'tar');
+        $this->manager->archive($package, 'tar', $this->targetDir);
 
         $target = $this->getTargetName($package, 'tar');
         $this->assertFileExists($target);
@@ -71,7 +69,7 @@ class ArchiveManagerTest extends ArchiverTest
         $package = $this->setupPackage();
 
         // This should use the TarArchiver
-        $this->manager->archive($package, 'tar');
+        $this->manager->archive($package, 'tar', $this->targetDir);
 
         $package->setSourceType('__unknown_type__'); // disable VCS recognition
         $target = $this->getTargetName($package, 'tar');
@@ -83,8 +81,8 @@ class ArchiveManagerTest extends ArchiverTest
 
     protected function getTargetName(PackageInterface $package, $format)
     {
-        $packageName = str_replace('/', DIRECTORY_SEPARATOR, $package->getUniqueName());
-        $target = $this->workDir.DIRECTORY_SEPARATOR.$packageName.'.'.$format;
+        $packageName = $package->getUniqueName();
+        $target = $this->targetDir.'/'.$packageName.'.'.$format;
 
         return $target;
     }