Remove the RemoteFilesystem factory and document GitHubDriver->GitDriver fallback.
parent
1e9cb6bac8
commit
38680998ed
|
@ -15,7 +15,6 @@ namespace Composer\Downloader;
|
|||
use Composer\IO\IOInterface;
|
||||
use Composer\Package\PackageInterface;
|
||||
use Composer\Util\Filesystem;
|
||||
use Composer\Util\RemoteFilesystem;
|
||||
|
||||
/**
|
||||
* Base downloader for archives
|
||||
|
|
|
@ -6,6 +6,7 @@ use Composer\Downloader\TransportException;
|
|||
use Composer\Json\JsonFile;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\Util\ProcessExecutor;
|
||||
use Composer\Util\RemoteFilesystem;
|
||||
|
||||
/**
|
||||
* @author Jordi Boggiano <j.boggiano@seld.be>
|
||||
|
@ -33,15 +34,15 @@ class GitHubDriver extends VcsDriver
|
|||
* @param string $url
|
||||
* @param IOInterface $io
|
||||
* @param ProcessExecutor $process
|
||||
* @param callable $remoteFilesystemFactory
|
||||
* @param RemoteFilesystem $remoteFilesystem
|
||||
*/
|
||||
public function __construct($url, IOInterface $io, ProcessExecutor $process = null, $remoteFilesystemFactory = null)
|
||||
public function __construct($url, IOInterface $io, ProcessExecutor $process = null, RemoteFilesystem $remoteFilesystem = null)
|
||||
{
|
||||
preg_match('#^(?:https?|git)://github\.com/([^/]+)/(.+?)(?:\.git)?$#', $url, $match);
|
||||
$this->owner = $match[1];
|
||||
$this->repository = $match[2];
|
||||
|
||||
parent::__construct($url, $io, $process, $remoteFilesystemFactory);
|
||||
parent::__construct($url, $io, $process, $remoteFilesystem);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -212,11 +213,15 @@ class GitHubDriver extends VcsDriver
|
|||
case 404:
|
||||
$this->isPrivate = true;
|
||||
if (!$this->io->isInteractive()) {
|
||||
// If this repository may be private (hard to say for sure,
|
||||
// GitHub returns 404 for private repositories) and we
|
||||
// cannot ask for authentication credentials (because we
|
||||
// are not interactive) then we fallback to GitDriver.
|
||||
$this->gitDriver = new GitDriver(
|
||||
$this->generateSshUrl(),
|
||||
$this->io,
|
||||
$this->process,
|
||||
$this->remoteFilesystemFactory
|
||||
$this->remoteFilesystem
|
||||
);
|
||||
$this->gitDriver->initialize();
|
||||
return;
|
||||
|
|
|
@ -27,7 +27,7 @@ abstract class VcsDriver implements VcsDriverInterface
|
|||
protected $url;
|
||||
protected $io;
|
||||
protected $process;
|
||||
protected $remoteFilesystemFactory;
|
||||
protected $remoteFilesystem;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
|
@ -35,16 +35,14 @@ abstract class VcsDriver implements VcsDriverInterface
|
|||
* @param string $url The URL
|
||||
* @param IOInterface $io The IO instance
|
||||
* @param ProcessExecutor $process Process instance, injectable for mocking
|
||||
* @param callable $remoteFilesystemFactory Remote Filesystem factory, injectable for mocking
|
||||
* @param callable $remoteFilesystem Remote Filesystem, injectable for mocking
|
||||
*/
|
||||
public function __construct($url, IOInterface $io, ProcessExecutor $process = null, $remoteFilesystemFactory = null)
|
||||
public function __construct($url, IOInterface $io, ProcessExecutor $process = null, $remoteFilesystem = null)
|
||||
{
|
||||
$this->url = $url;
|
||||
$this->io = $io;
|
||||
$this->process = $process ?: new ProcessExecutor;
|
||||
$this->remoteFilesystemFactory = $remoteFilesystemFactory ?: function() use ($io) {
|
||||
return new RemoteFilesystem($io);
|
||||
};
|
||||
$this->remoteFilesystem = $remoteFilesystem ?: new RemoteFilesystem($io);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -85,8 +83,7 @@ abstract class VcsDriver implements VcsDriverInterface
|
|||
*/
|
||||
protected function getContents($url)
|
||||
{
|
||||
$rfs = call_user_func($this->remoteFilesystemFactory);
|
||||
return $rfs->getContents($this->url, $url, false);
|
||||
return $this->remoteFilesystem->getContents($this->url, $url, false);
|
||||
}
|
||||
|
||||
protected static function isLocalUrl($url)
|
||||
|
|
|
@ -61,7 +61,7 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
|
|||
->with($this->equalTo($repoUrl), $this->equalTo($repoApiUrl), $this->equalTo(false))
|
||||
->will($this->returnValue('{"master_branch": "test_master"}'));
|
||||
|
||||
$gitHubDriver = new GitHubDriver($repoUrl, $io, null, function() use ($remoteFilesystem) { return $remoteFilesystem; });
|
||||
$gitHubDriver = new GitHubDriver($repoUrl, $io, null, $remoteFilesystem);
|
||||
$gitHubDriver->initialize();
|
||||
$this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha));
|
||||
|
||||
|
@ -109,9 +109,7 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
|
|||
->with($this->equalTo($repoUrl), $this->equalTo($repoApiUrl), $this->equalTo(false))
|
||||
->will($this->returnValue('{"master_branch": "test_master"}'));
|
||||
|
||||
$gitHubDriver = new GitHubDriver($repoUrl, $io, null, function() use ($remoteFilesystem) {
|
||||
return $remoteFilesystem;
|
||||
});
|
||||
$gitHubDriver = new GitHubDriver($repoUrl, $io, null, $remoteFilesystem);
|
||||
$gitHubDriver->initialize();
|
||||
$this->setAttribute($gitHubDriver, 'tags', array($identifier => $sha));
|
||||
|
||||
|
@ -192,9 +190,7 @@ class GitHubDriverTest extends \PHPUnit_Framework_TestCase
|
|||
->method('splitLines')
|
||||
->will($this->returnValue(array(' upstream/HEAD -> upstream/test_master')));
|
||||
|
||||
$gitHubDriver = new GitHubDriver($repoUrl, $io, $process, function() use ($remoteFilesystem) {
|
||||
return $remoteFilesystem;
|
||||
});
|
||||
$gitHubDriver = new GitHubDriver($repoUrl, $io, $process, $remoteFilesystem);
|
||||
$gitHubDriver->initialize();
|
||||
|
||||
$this->assertEquals('test_master', $gitHubDriver->getRootIdentifier());
|
||||
|
|
Loading…
Reference in New Issue