Browse Source

Merge remote-tracking branch 'bboer/feature/svn-alternative-structures'

Conflicts:
	src/Composer/Repository/Vcs/GitHubDriver.php
Jordi Boggiano 12 years ago
parent
commit
0a3097c569

+ 1 - 1
src/Composer/Repository/Vcs/GitHubDriver.php

@@ -331,7 +331,7 @@ class GitHubDriver extends VcsDriver
             // cannot ask for authentication credentials (because we
             // are not interactive) then we fallback to GitDriver.
             $this->gitDriver = new GitDriver(
-                $this->generateSshUrl(),
+                array('url' => $this->generateSshUrl()),
                 $this->io,
                 $this->config,
                 $this->process,

+ 25 - 8
src/Composer/Repository/Vcs/SvnDriver.php

@@ -32,6 +32,10 @@ class SvnDriver extends VcsDriver
     protected $branches;
     protected $infoCache = array();
 
+    protected $trunkPath    = 'trunk';
+    protected $branchesPath = 'branches';
+    protected $tagsPath     = 'tags';
+
     /**
      * @var \Composer\Util\Svn
      */
@@ -44,7 +48,17 @@ class SvnDriver extends VcsDriver
     {
         $this->url = $this->baseUrl = rtrim(self::normalizeUrl($this->url), '/');
 
-        if (false !== ($pos = strrpos($this->url, '/trunk'))) {
+        if (isset($this->repoConfig['trunk-path'])) {
+            $this->trunkPath = $this->repoConfig['trunk-path'];
+        }
+        if (isset($this->repoConfig['branches-path'])) {
+            $this->branchesPath = $this->repoConfig['branches-path'];
+        }
+        if (isset($this->repoConfig['tags-path'])) {
+            $this->tagsPath = $this->repoConfig['tags-path'];
+        }
+
+        if (false !== ($pos = strrpos($this->url, '/' . $this->trunkPath))) {
             $this->baseUrl = substr($this->url, 0, $pos);
         }
 
@@ -59,7 +73,7 @@ class SvnDriver extends VcsDriver
      */
     public function getRootIdentifier()
     {
-        return 'trunk';
+        return $this->trunkPath;
     }
 
     /**
@@ -145,13 +159,14 @@ class SvnDriver extends VcsDriver
         if (null === $this->tags) {
             $this->tags = array();
 
-            $output = $this->execute('svn ls --verbose', $this->baseUrl . '/tags');
+            $output = $this->execute('svn ls --verbose', $this->baseUrl . '/' . $this->tagsPath);
             if ($output) {
                 foreach ($this->process->splitLines($output) as $line) {
                     $line = trim($line);
                     if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) {
                         if (isset($match[1]) && isset($match[2]) && $match[2] !== './') {
-                            $this->tags[rtrim($match[2], '/')] = '/tags/'.$match[2].'@'.$match[1];
+                            $this->tags[rtrim($match[2], '/')] = '/' . $this->tagsPath .
+                                '/' . $match[2] . '@' . $match[1];
                         }
                     }
                 }
@@ -174,8 +189,9 @@ class SvnDriver extends VcsDriver
                 foreach ($this->process->splitLines($output) as $line) {
                     $line = trim($line);
                     if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) {
-                        if (isset($match[1]) && isset($match[2]) && $match[2] === 'trunk/') {
-                            $this->branches['trunk'] = '/trunk/@'.$match[1];
+                        if (isset($match[1]) && isset($match[2]) && $match[2] === $this->trunkPath . '/') {
+                            $this->branches[$this->trunkPath] = '/' . $this->trunkPath .
+                                '/@'.$match[1];
                             break;
                         }
                     }
@@ -183,13 +199,14 @@ class SvnDriver extends VcsDriver
             }
             unset($output);
 
-            $output = $this->execute('svn ls --verbose', $this->baseUrl . '/branches');
+            $output = $this->execute('svn ls --verbose', $this->baseUrl . '/' . $this->branchesPath);
             if ($output) {
                 foreach ($this->process->splitLines(trim($output)) as $line) {
                     $line = trim($line);
                     if ($line && preg_match('{^\s*(\S+).*?(\S+)\s*$}', $line, $match)) {
                         if (isset($match[1]) && isset($match[2]) && $match[2] !== './') {
-                            $this->branches[rtrim($match[2], '/')] = '/branches/'.$match[2].'@'.$match[1];
+                            $this->branches[rtrim($match[2], '/')] = '/' . $this->branchesPath .
+                                '/' . $match[2] . '@' . $match[1];
                         }
                     }
                 }

+ 6 - 4
src/Composer/Repository/Vcs/VcsDriver.php

@@ -27,6 +27,7 @@ abstract class VcsDriver implements VcsDriverInterface
 {
     protected $url;
     protected $originUrl;
+    protected $repoConfig;
     protected $io;
     protected $config;
     protected $process;
@@ -35,16 +36,17 @@ abstract class VcsDriver implements VcsDriverInterface
     /**
      * Constructor.
      *
-     * @param string          $url              The URL
+     * @param array           $repoConfig       The repository configuration
      * @param IOInterface     $io               The IO instance
      * @param Config          $config           The composer configuration
      * @param ProcessExecutor $process          Process instance, injectable for mocking
      * @param callable        $remoteFilesystem Remote Filesystem, injectable for mocking
      */
-    final public function __construct($url, IOInterface $io, Config $config, ProcessExecutor $process = null, $remoteFilesystem = null)
+    final public function __construct(array $repoConfig, IOInterface $io, Config $config, ProcessExecutor $process = null, $remoteFilesystem = null)
     {
-        $this->url = $url;
-        $this->originUrl = $url;
+        $this->url = $repoConfig['url'];
+        $this->originUrl = $repoConfig['url'];
+        $this->repoConfig = $repoConfig;
         $this->io = $io;
         $this->config = $config;
         $this->process = $process ?: new ProcessExecutor;

+ 5 - 3
src/Composer/Repository/VcsRepository.php

@@ -33,6 +33,7 @@ class VcsRepository extends ArrayRepository
     protected $versionParser;
     protected $type;
     protected $loader;
+    protected $repoConfig;
 
     public function __construct(array $repoConfig, IOInterface $io, Config $config, array $drivers = null)
     {
@@ -50,6 +51,7 @@ class VcsRepository extends ArrayRepository
         $this->type = isset($repoConfig['type']) ? $repoConfig['type'] : 'vcs';
         $this->verbose = $io->isVerbose();
         $this->config = $config;
+        $this->repoConfig = $repoConfig;
     }
 
     public function setLoader(LoaderInterface $loader)
@@ -61,7 +63,7 @@ class VcsRepository extends ArrayRepository
     {
         if (isset($this->drivers[$this->type])) {
             $class = $this->drivers[$this->type];
-            $driver = new $class($this->url, $this->io, $this->config);
+            $driver = new $class($this->repoConfig, $this->io, $this->config);
             $driver->initialize();
 
             return $driver;
@@ -69,7 +71,7 @@ class VcsRepository extends ArrayRepository
 
         foreach ($this->drivers as $driver) {
             if ($driver::supports($this->io, $this->url)) {
-                $driver = new $driver($this->url, $this->io, $this->config);
+                $driver = new $driver($this->repoConfig, $this->io, $this->config);
                 $driver->initialize();
 
                 return $driver;
@@ -78,7 +80,7 @@ class VcsRepository extends ArrayRepository
 
         foreach ($this->drivers as $driver) {
             if ($driver::supports($this->io, $this->url, true)) {
-                $driver = new $driver($this->url, $this->io, $this->config);
+                $driver = new $driver($this->repoConfig, $this->io, $this->config);
                 $driver->initialize();
 
                 return $driver;

+ 20 - 4
tests/Composer/Test/Repository/Vcs/GitHubDriverTest.php

@@ -85,7 +85,11 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
         $configSource = $this->getMock('Composer\Config\ConfigSourceInterface');
         $this->config->setConfigSource($configSource);
 
-        $gitHubDriver = new GitHubDriver($repoUrl, $io, $this->config, $process, $remoteFilesystem);
+        $repoConfig = array(
+            'url' => $repoUrl,
+        );
+
+        $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $process, $remoteFilesystem);
         $gitHubDriver->initialize();
         $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha));
 
@@ -133,7 +137,11 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('github.com'), $this->equalTo($repoApiUrl), $this->equalTo(false))
             ->will($this->returnValue('{"master_branch": "test_master"}'));
 
-        $gitHubDriver = new GitHubDriver($repoUrl, $io, $this->config, null, $remoteFilesystem);
+        $repoConfig = array(
+            'url' => $repoUrl,
+        );
+
+        $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, null, $remoteFilesystem);
         $gitHubDriver->initialize();
         $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha));
 
@@ -191,7 +199,11 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
             ->with($this->equalTo('github.com'), $this->equalTo('https://api.github.com/repos/composer/packagist/commits/feature%2F3.2-foo'), $this->equalTo(false))
             ->will($this->returnValue('{"commit": {"committer":{ "date": "2012-09-10"}}}'));
 
-        $gitHubDriver = new GitHubDriver($repoUrl, $io, $this->config, null, $remoteFilesystem);
+        $repoConfig = array(
+            'url' => $repoUrl,
+        );
+
+        $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, null, $remoteFilesystem);
         $gitHubDriver->initialize();
         $this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha));
 
@@ -279,7 +291,11 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
             ->method('splitLines')
             ->will($this->returnValue(array('* test_master')));
 
-        $gitHubDriver = new GitHubDriver($repoUrl, $io, $this->config, $process, $remoteFilesystem);
+        $repoConfig = array(
+            'url' => $repoUrl,
+        );
+
+        $gitHubDriver = new GitHubDriver($repoConfig, $io, $this->config, $process, $remoteFilesystem);
         $gitHubDriver->initialize();
 
         $this->assertEquals('test_master', $gitHubDriver->getRootIdentifier());

+ 5 - 1
tests/Composer/Test/Repository/Vcs/SvnDriverTest.php

@@ -48,7 +48,11 @@ class SvnDriverTest extends \PHPUnit_Framework_TestCase
                 'home' => sys_get_temp_dir() . '/composer-test',
             ),
         ));
-        $svn = new SvnDriver('http://till:secret@corp.svn.local/repo', $console, $config, $process);
+        $repoConfig = array(
+            'url' => 'http://till:secret@corp.svn.local/repo',
+        );
+
+        $svn = new SvnDriver($repoConfig, $console, $config, $process);
         $svn->initialize();
     }