Add support for mirrors in composer repos

main
Jordi Boggiano 11 years ago
parent e707dcd92f
commit 77163f66fc

@ -79,18 +79,38 @@ class FileDownloader implements DownloaderInterface
*/ */
public function download(PackageInterface $package, $path) public function download(PackageInterface $package, $path)
{ {
$url = $package->getDistUrl(); if (!$package->getDistUrl()) {
if (!$url) {
throw new \InvalidArgumentException('The given package is missing url information'); throw new \InvalidArgumentException('The given package is missing url information');
} }
$this->io->write(" - Installing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)");
$urls = $package->getDistUrls();
while ($url = array_shift($urls)) {
try {
$this->doDownload($package, $path, $url);
break;
} catch (\Exception $e) {
if ($this->io->isDebug()) {
$this->io->write('');
$this->io->write('Failed: ['.get_class($e).'] '.$e->getMessage());
} elseif (count($urls)) {
$this->io->write('');
$this->io->write(' Failed, trying the next URL');
} else {
throw $e;
}
}
}
}
protected function doDownload(PackageInterface $package, $path, $url)
{
$this->filesystem->removeDirectory($path); $this->filesystem->removeDirectory($path);
$this->filesystem->ensureDirectoryExists($path); $this->filesystem->ensureDirectoryExists($path);
$fileName = $this->getFileName($package, $path); $fileName = $this->getFileName($package, $path);
$this->io->write(" - Installing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)");
$processedUrl = $this->processUrl($package, $url); $processedUrl = $this->processUrl($package, $url);
$hostname = parse_url($processedUrl, PHP_URL_HOST); $hostname = parse_url($processedUrl, PHP_URL_HOST);

@ -26,7 +26,7 @@ class GitDownloader extends VcsDownloader
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function doDownload(PackageInterface $package, $path) public function doDownload(PackageInterface $package, $path, $url)
{ {
$this->cleanEnv(); $this->cleanEnv();
$path = $this->normalizePath($path); $path = $this->normalizePath($path);
@ -40,8 +40,8 @@ class GitDownloader extends VcsDownloader
return sprintf($command, escapeshellarg($url), escapeshellarg($path), escapeshellarg($ref)); return sprintf($command, escapeshellarg($url), escapeshellarg($path), escapeshellarg($ref));
}; };
$this->runCommand($commandCallable, $package->getSourceUrl(), $path, true); $this->runCommand($commandCallable, $url, $path, true);
$this->setPushUrl($package, $path); $this->setPushUrl($path, $url);
if ($newRef = $this->updateToCommit($path, $ref, $package->getPrettyVersion(), $package->getReleaseDate())) { if ($newRef = $this->updateToCommit($path, $ref, $package->getPrettyVersion(), $package->getReleaseDate())) {
if ($package->getDistReference() === $package->getSourceReference()) { if ($package->getDistReference() === $package->getSourceReference()) {
@ -54,7 +54,7 @@ class GitDownloader extends VcsDownloader
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function doUpdate(PackageInterface $initial, PackageInterface $target, $path) public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url)
{ {
$this->cleanEnv(); $this->cleanEnv();
$path = $this->normalizePath($path); $path = $this->normalizePath($path);
@ -76,7 +76,7 @@ class GitDownloader extends VcsDownloader
return sprintf($command, escapeshellarg($url)); return sprintf($command, escapeshellarg($url));
}; };
$this->runCommand($commandCallable, $target->getSourceUrl(), $path); $this->runCommand($commandCallable, $url, $path);
if ($newRef = $this->updateToCommit($path, $ref, $target->getPrettyVersion(), $target->getReleaseDate())) { if ($newRef = $this->updateToCommit($path, $ref, $target->getPrettyVersion(), $target->getReleaseDate())) {
if ($target->getDistReference() === $target->getSourceReference()) { if ($target->getDistReference() === $target->getSourceReference()) {
$target->setDistReference($newRef); $target->setDistReference($newRef);
@ -412,10 +412,10 @@ class GitDownloader extends VcsDownloader
return preg_replace('{://([^@]+?):.+?@}', '://$1:***@', $message); return preg_replace('{://([^@]+?):.+?@}', '://$1:***@', $message);
} }
protected function setPushUrl(PackageInterface $package, $path) protected function setPushUrl($path, $url)
{ {
// set push url for github projects // set push url for github projects
if (preg_match('{^(?:https?|git)://'.$this->getGitHubDomainsRegex().'/([^/]+)/([^/]+?)(?:\.git)?$}', $package->getSourceUrl(), $match)) { if (preg_match('{^(?:https?|git)://'.$this->getGitHubDomainsRegex().'/([^/]+)/([^/]+?)(?:\.git)?$}', $url, $match)) {
$protocols = $this->config->get('github-protocols'); $protocols = $this->config->get('github-protocols');
$pushUrl = 'git@'.$match[1].':'.$match[2].'/'.$match[3].'.git'; $pushUrl = 'git@'.$match[1].':'.$match[2].'/'.$match[3].'.git';
if ($protocols[0] !== 'git') { if ($protocols[0] !== 'git') {

@ -22,9 +22,9 @@ class HgDownloader extends VcsDownloader
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function doDownload(PackageInterface $package, $path) public function doDownload(PackageInterface $package, $path, $url)
{ {
$url = escapeshellarg($package->getSourceUrl()); $url = escapeshellarg($url);
$ref = escapeshellarg($package->getSourceReference()); $ref = escapeshellarg($package->getSourceReference());
$this->io->write(" Cloning ".$package->getSourceReference()); $this->io->write(" Cloning ".$package->getSourceReference());
$command = sprintf('hg clone %s %s', $url, escapeshellarg($path)); $command = sprintf('hg clone %s %s', $url, escapeshellarg($path));
@ -40,9 +40,9 @@ class HgDownloader extends VcsDownloader
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function doUpdate(PackageInterface $initial, PackageInterface $target, $path) public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url)
{ {
$url = escapeshellarg($target->getSourceUrl()); $url = escapeshellarg($url);
$ref = escapeshellarg($target->getSourceReference()); $ref = escapeshellarg($target->getSourceReference());
$this->io->write(" Updating to ".$target->getSourceReference()); $this->io->write(" Updating to ".$target->getSourceReference());

@ -24,10 +24,9 @@ class SvnDownloader extends VcsDownloader
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function doDownload(PackageInterface $package, $path) public function doDownload(PackageInterface $package, $path, $url)
{ {
SvnUtil::cleanEnv(); SvnUtil::cleanEnv();
$url = $package->getSourceUrl();
$ref = $package->getSourceReference(); $ref = $package->getSourceReference();
$this->io->write(" Checking out ".$package->getSourceReference()); $this->io->write(" Checking out ".$package->getSourceReference());
@ -37,10 +36,9 @@ class SvnDownloader extends VcsDownloader
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
public function doUpdate(PackageInterface $initial, PackageInterface $target, $path) public function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url)
{ {
SvnUtil::cleanEnv(); SvnUtil::cleanEnv();
$url = $target->getSourceUrl();
$ref = $target->getSourceReference(); $ref = $target->getSourceReference();
if (!is_dir($path.'/.svn')) { if (!is_dir($path.'/.svn')) {

@ -56,7 +56,23 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
$this->io->write(" - Installing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)"); $this->io->write(" - Installing <info>" . $package->getName() . "</info> (<comment>" . VersionParser::formatVersion($package) . "</comment>)");
$this->filesystem->removeDirectory($path); $this->filesystem->removeDirectory($path);
$this->doDownload($package, $path);
$urls = $package->getSourceUrls();
while ($url = array_shift($urls)) {
try {
$this->doDownload($package, $path, $url);
break;
} catch (\Exception $e) {
if ($this->io->isDebug()) {
$this->io->write('Failed: ['.get_class($e).'] '.$e->getMessage());
} elseif (count($urls)) {
$this->io->write(' Failed, trying the next URL');
} else {
throw $e;
}
}
}
$this->io->write(''); $this->io->write('');
} }
@ -87,14 +103,25 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
$this->io->write(" - Updating <info>" . $name . "</info> (<comment>" . $from . "</comment> => <comment>" . $to . "</comment>)"); $this->io->write(" - Updating <info>" . $name . "</info> (<comment>" . $from . "</comment> => <comment>" . $to . "</comment>)");
$this->cleanChanges($initial, $path, true); $this->cleanChanges($initial, $path, true);
$urls = $target->getSourceUrls();
while ($url = array_shift($urls)) {
try { try {
$this->doUpdate($initial, $target, $path); $this->doUpdate($initial, $target, $path, $url);
break;
} catch (\Exception $e) { } catch (\Exception $e) {
if ($this->io->isDebug()) {
$this->io->write('Failed: ['.get_class($e).'] '.$e->getMessage());
} elseif (count($urls)) {
$this->io->write(' Failed, trying the next URL');
} else {
// in case of failed update, try to reapply the changes before aborting // in case of failed update, try to reapply the changes before aborting
$this->reapplyChanges($path); $this->reapplyChanges($path);
throw $e; throw $e;
} }
}
}
$this->reapplyChanges($path); $this->reapplyChanges($path);
// print the commit logs if in verbose mode // print the commit logs if in verbose mode
@ -176,8 +203,9 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
* *
* @param PackageInterface $package package instance * @param PackageInterface $package package instance
* @param string $path download path * @param string $path download path
* @param string $url package url
*/ */
abstract protected function doDownload(PackageInterface $package, $path); abstract protected function doDownload(PackageInterface $package, $path, $url);
/** /**
* Updates specific package in specific folder from initial to target version. * Updates specific package in specific folder from initial to target version.
@ -185,8 +213,9 @@ abstract class VcsDownloader implements DownloaderInterface, ChangeReportInterfa
* @param PackageInterface $initial initial package * @param PackageInterface $initial initial package
* @param PackageInterface $target updated package * @param PackageInterface $target updated package
* @param string $path download path * @param string $path download path
* @param string $url package url
*/ */
abstract protected function doUpdate(PackageInterface $initial, PackageInterface $target, $path); abstract protected function doUpdate(PackageInterface $initial, PackageInterface $target, $path, $url);
/** /**
* Fetches the commit logs between two commits * Fetches the commit logs between two commits

@ -209,6 +209,10 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
{ {
return $this->aliasOf->getSourceUrl(); return $this->aliasOf->getSourceUrl();
} }
public function getSourceUrls()
{
return $this->aliasOf->getSourceUrls();
}
public function getSourceReference() public function getSourceReference()
{ {
return $this->aliasOf->getSourceReference(); return $this->aliasOf->getSourceReference();
@ -217,6 +221,14 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
{ {
return $this->aliasOf->setSourceReference($reference); return $this->aliasOf->setSourceReference($reference);
} }
public function setSourceMirrors($mirrors)
{
return $this->aliasOf->setSourceMirrors($mirrors);
}
public function getSourceMirrors()
{
return $this->aliasOf->getSourceMirrors();
}
public function getDistType() public function getDistType()
{ {
return $this->aliasOf->getDistType(); return $this->aliasOf->getDistType();
@ -225,6 +237,10 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
{ {
return $this->aliasOf->getDistUrl(); return $this->aliasOf->getDistUrl();
} }
public function getDistUrls()
{
return $this->aliasOf->getDistUrls();
}
public function getDistReference() public function getDistReference()
{ {
return $this->aliasOf->getDistReference(); return $this->aliasOf->getDistReference();
@ -241,6 +257,14 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
{ {
return $this->aliasOf->getTransportOptions(); return $this->aliasOf->getTransportOptions();
} }
public function setDistMirrors($mirrors)
{
return $this->aliasOf->setDistMirrors($mirrors);
}
public function getDistMirrors()
{
return $this->aliasOf->getDistMirrors();
}
public function getScripts() public function getScripts()
{ {
return $this->aliasOf->getScripts(); return $this->aliasOf->getScripts();

@ -49,6 +49,9 @@ class ArrayDumper
$data['source']['type'] = $package->getSourceType(); $data['source']['type'] = $package->getSourceType();
$data['source']['url'] = $package->getSourceUrl(); $data['source']['url'] = $package->getSourceUrl();
$data['source']['reference'] = $package->getSourceReference(); $data['source']['reference'] = $package->getSourceReference();
if ($mirrors = $package->getSourceMirrors()) {
$data['source']['mirrors'] = $mirrors;
}
} }
if ($package->getDistType()) { if ($package->getDistType()) {
@ -56,6 +59,9 @@ class ArrayDumper
$data['dist']['url'] = $package->getDistUrl(); $data['dist']['url'] = $package->getDistUrl();
$data['dist']['reference'] = $package->getDistReference(); $data['dist']['reference'] = $package->getDistReference();
$data['dist']['shasum'] = $package->getDistSha1Checksum(); $data['dist']['shasum'] = $package->getDistSha1Checksum();
if ($mirrors = $package->getDistMirrors()) {
$data['dist']['mirrors'] = $mirrors;
}
} }
if ($package->getArchiveExcludes()) { if ($package->getArchiveExcludes()) {

@ -87,6 +87,9 @@ class ArrayLoader implements LoaderInterface
$package->setSourceType($config['source']['type']); $package->setSourceType($config['source']['type']);
$package->setSourceUrl($config['source']['url']); $package->setSourceUrl($config['source']['url']);
$package->setSourceReference($config['source']['reference']); $package->setSourceReference($config['source']['reference']);
if (isset($config['source']['mirrors'])) {
$package->setSourceMirrors($config['source']['mirrors']);
}
} }
if (isset($config['dist'])) { if (isset($config['dist'])) {
@ -103,6 +106,9 @@ class ArrayLoader implements LoaderInterface
$package->setDistUrl($config['dist']['url']); $package->setDistUrl($config['dist']['url']);
$package->setDistReference(isset($config['dist']['reference']) ? $config['dist']['reference'] : null); $package->setDistReference(isset($config['dist']['reference']) ? $config['dist']['reference'] : null);
$package->setDistSha1Checksum(isset($config['dist']['shasum']) ? $config['dist']['shasum'] : null); $package->setDistSha1Checksum(isset($config['dist']['shasum']) ? $config['dist']['shasum'] : null);
if (isset($config['dist']['mirrors'])) {
$package->setDistMirrors($config['dist']['mirrors']);
}
} }
foreach (Package\BasePackage::$supportedLinkTypes as $type => $opts) { foreach (Package\BasePackage::$supportedLinkTypes as $type => $opts) {

@ -27,10 +27,12 @@ class Package extends BasePackage
protected $sourceType; protected $sourceType;
protected $sourceUrl; protected $sourceUrl;
protected $sourceReference; protected $sourceReference;
protected $sourceMirrors;
protected $distType; protected $distType;
protected $distUrl; protected $distUrl;
protected $distReference; protected $distReference;
protected $distSha1Checksum; protected $distSha1Checksum;
protected $distMirrors;
protected $version; protected $version;
protected $prettyVersion; protected $prettyVersion;
protected $releaseDate; protected $releaseDate;
@ -217,6 +219,30 @@ class Package extends BasePackage
return $this->sourceReference; return $this->sourceReference;
} }
/**
* @param array|null $mirrors
*/
public function setSourceMirrors($mirrors)
{
$this->sourceMirrors = $mirrors;
}
/**
* {@inheritDoc}
*/
public function getSourceMirrors()
{
return $this->sourceMirrors;
}
/**
* {@inheritDoc}
*/
public function getSourceUrls()
{
return $this->getUrls($this->sourceUrl, $this->sourceMirrors, $this->sourceReference, $this->sourceType);
}
/** /**
* @param string $type * @param string $type
*/ */
@ -281,6 +307,30 @@ class Package extends BasePackage
return $this->distSha1Checksum; return $this->distSha1Checksum;
} }
/**
* @param array|null $mirrors
*/
public function setDistMirrors($mirrors)
{
$this->distMirrors = $mirrors;
}
/**
* {@inheritDoc}
*/
public function getDistMirrors()
{
return $this->distMirrors;
}
/**
* {@inheritDoc}
*/
public function getDistUrls()
{
return $this->getUrls($this->distUrl, $this->distMirrors, $this->distReference, $this->distType);
}
/** /**
* {@inheritDoc} * {@inheritDoc}
*/ */
@ -528,4 +578,22 @@ class Package extends BasePackage
$this->stability = VersionParser::parseStability($version); $this->stability = VersionParser::parseStability($version);
$this->dev = $this->stability === 'dev'; $this->dev = $this->stability === 'dev';
} }
protected function getUrls($url, $mirrors, $ref, $type)
{
$urls = array($url);
if ($mirrors) {
foreach ($mirrors as $mirror) {
$mirrorUrl = str_replace(
array('%package%', '%version%', '%reference%', '%type%'),
array($this->name, $this->version, $ref, $type),
$mirror['url']
);
$func = $mirror['preferred'] ? 'array_unshift' : 'array_push';
$func($urls, $mirrorUrl);
}
}
return $urls;
}
} }

@ -115,6 +115,13 @@ interface PackageInterface
*/ */
public function getSourceUrl(); public function getSourceUrl();
/**
* Returns the repository urls of this package including mirrors, e.g. git://github.com/naderman/composer.git
*
* @return string
*/
public function getSourceUrls();
/** /**
* Returns the repository reference of this package, e.g. master, 1.0.0 or a commit hash for git * Returns the repository reference of this package, e.g. master, 1.0.0 or a commit hash for git
* *
@ -122,6 +129,13 @@ interface PackageInterface
*/ */
public function getSourceReference(); public function getSourceReference();
/**
* Returns the source mirrors of this package
*
* @return array|null
*/
public function getSourceMirrors();
/** /**
* Returns the type of the distribution archive of this version, e.g. zip, tarball * Returns the type of the distribution archive of this version, e.g. zip, tarball
* *
@ -136,6 +150,13 @@ interface PackageInterface
*/ */
public function getDistUrl(); public function getDistUrl();
/**
* Returns the urls of the distribution archive of this version, including mirrors
*
* @return string
*/
public function getDistUrls();
/** /**
* Returns the reference of the distribution archive of this version, e.g. master, 1.0.0 or a commit hash for git * Returns the reference of the distribution archive of this version, e.g. master, 1.0.0 or a commit hash for git
* *
@ -150,6 +171,13 @@ interface PackageInterface
*/ */
public function getDistSha1Checksum(); public function getDistSha1Checksum();
/**
* Returns the dist mirrors of this package
*
* @return array|null
*/
public function getDistMirrors();
/** /**
* Returns the version of this package * Returns the version of this package
* *

@ -50,6 +50,8 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
protected $rootAliases; protected $rootAliases;
protected $allowSslDowngrade = false; protected $allowSslDowngrade = false;
protected $eventDispatcher; protected $eventDispatcher;
protected $sourceMirrors;
protected $distMirrors;
private $rawData; private $rawData;
private $minimalPackages; private $minimalPackages;
private $degradedMode = false; private $degradedMode = false;
@ -434,6 +436,17 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
$this->searchUrl = $this->canonicalizeUrl($data['search']); $this->searchUrl = $this->canonicalizeUrl($data['search']);
} }
if (!empty($data['mirrors'])) {
foreach ($data['mirrors'] as $mirror) {
if (!empty($mirror['source-url'])) {
$this->sourceMirrors[] = array('url' => $mirror['source-url'], 'preferred' => !empty($mirror['preferred']));
}
if (!empty($mirror['dist-url'])) {
$this->distMirrors[] = array('url' => $mirror['dist-url'], 'preferred' => !empty($mirror['preferred']));
}
}
}
if ($this->allowSslDowngrade) { if ($this->allowSslDowngrade) {
$this->url = str_replace('https://', 'http://', $this->url); $this->url = str_replace('https://', 'http://', $this->url);
} }
@ -548,6 +561,8 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
} }
$package = $this->loader->load($data, 'Composer\Package\CompletePackage'); $package = $this->loader->load($data, 'Composer\Package\CompletePackage');
$package->setSourceMirrors($this->sourceMirrors);
$package->setDistMirrors($this->distMirrors);
$this->configurePackageTransportOptions($package); $this->configurePackageTransportOptions($package);
return $package; return $package;

@ -48,6 +48,10 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getDistUrl') ->method('getDistUrl')
->will($this->returnValue('url')) ->will($this->returnValue('url'))
; ;
$packageMock->expects($this->once())
->method('getDistUrls')
->will($this->returnValue(array('url')))
;
$path = tempnam(sys_get_temp_dir(), 'c'); $path = tempnam(sys_get_temp_dir(), 'c');
@ -87,7 +91,11 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
$packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock = $this->getMock('Composer\Package\PackageInterface');
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getDistUrl') ->method('getDistUrl')
->will($this->returnValue('http://example.com/script.js')) ->will($this->returnValue($distUrl = 'http://example.com/script.js'))
;
$packageMock->expects($this->once())
->method('getDistUrls')
->will($this->returnValue(array($distUrl)))
; ;
$packageMock->expects($this->atLeastOnce()) $packageMock->expects($this->atLeastOnce())
->method('getTransportOptions') ->method('getTransportOptions')
@ -163,7 +171,7 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
$packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock = $this->getMock('Composer\Package\PackageInterface');
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getDistUrl') ->method('getDistUrl')
->will($this->returnValue('http://example.com/script.js')) ->will($this->returnValue($distUrl = 'http://example.com/script.js'))
; ;
$packageMock->expects($this->atLeastOnce()) $packageMock->expects($this->atLeastOnce())
->method('getTransportOptions') ->method('getTransportOptions')
@ -173,6 +181,10 @@ class FileDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getDistSha1Checksum') ->method('getDistSha1Checksum')
->will($this->returnValue('invalid')) ->will($this->returnValue('invalid'))
; ;
$packageMock->expects($this->once())
->method('getDistUrls')
->will($this->returnValue(array($distUrl)))
;
$filesystem = $this->getMock('Composer\Util\Filesystem'); $filesystem = $this->getMock('Composer\Util\Filesystem');
do { do {

@ -51,8 +51,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('1234567890123456789012345678901234567890')); ->will($this->returnValue('1234567890123456789012345678901234567890'));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://example.com/composer/composer')); ->will($this->returnValue(array('https://example.com/composer/composer')));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getPrettyVersion') ->method('getPrettyVersion')
->will($this->returnValue('dev-master')); ->will($this->returnValue('dev-master'));
@ -90,8 +90,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('ref')); ->will($this->returnValue('ref'));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://github.com/composer/composer')); ->will($this->returnValue(array('https://github.com/composer/composer')));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getPrettyVersion') ->method('getPrettyVersion')
->will($this->returnValue('1.0.0')); ->will($this->returnValue('1.0.0'));
@ -147,8 +147,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('ref')); ->will($this->returnValue('ref'));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://github.com/composer/composer')); ->will($this->returnValue(array('https://github.com/composer/composer')));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getPrettyVersion') ->method('getPrettyVersion')
->will($this->returnValue('1.0.0')); ->will($this->returnValue('1.0.0'));
@ -188,8 +188,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('ref')); ->will($this->returnValue('ref'));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://example.com/composer/composer')); ->will($this->returnValue(array('https://example.com/composer/composer')));
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
$processExecutor->expects($this->at(0)) $processExecutor->expects($this->at(0))
->method('execute') ->method('execute')
@ -227,8 +227,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('ref')); ->will($this->returnValue('ref'));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://github.com/composer/composer')); ->will($this->returnValue(array('https://github.com/composer/composer')));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getPrettyVersion') ->method('getPrettyVersion')
->will($this->returnValue('1.0.0')); ->will($this->returnValue('1.0.0'));
@ -273,8 +273,8 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('ref')); ->will($this->returnValue('ref'));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://github.com/composer/composer')); ->will($this->returnValue(array('https://github.com/composer/composer')));
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
$processExecutor->expects($this->at(0)) $processExecutor->expects($this->at(0))
->method('execute') ->method('execute')

@ -48,8 +48,8 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('ref')); ->will($this->returnValue('ref'));
$packageMock->expects($this->once()) $packageMock->expects($this->once())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://mercurial.dev/l3l0/composer')); ->will($this->returnValue(array('https://mercurial.dev/l3l0/composer')));
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
$expectedGitCommand = $this->getCmd('hg clone \'https://mercurial.dev/l3l0/composer\' \'composerPath\''); $expectedGitCommand = $this->getCmd('hg clone \'https://mercurial.dev/l3l0/composer\' \'composerPath\'');
@ -93,8 +93,8 @@ class HgDownloaderTest extends \PHPUnit_Framework_TestCase
->method('getSourceReference') ->method('getSourceReference')
->will($this->returnValue('ref')); ->will($this->returnValue('ref'));
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getSourceUrl') ->method('getSourceUrls')
->will($this->returnValue('https://github.com/l3l0/composer')); ->will($this->returnValue(array('https://github.com/l3l0/composer')));
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor'); $processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
$expectedHgCommand = $this->getCmd("hg st"); $expectedHgCommand = $this->getCmd("hg st");

@ -28,7 +28,11 @@ class ZipDownloaderTest extends \PHPUnit_Framework_TestCase
$packageMock = $this->getMock('Composer\Package\PackageInterface'); $packageMock = $this->getMock('Composer\Package\PackageInterface');
$packageMock->expects($this->any()) $packageMock->expects($this->any())
->method('getDistUrl') ->method('getDistUrl')
->will($this->returnValue('file://'.__FILE__)) ->will($this->returnValue($distUrl = 'file://'.__FILE__))
;
$packageMock->expects($this->any())
->method('getDistUrls')
->will($this->returnValue(array($distUrl)))
; ;
$packageMock->expects($this->atLeastOnce()) $packageMock->expects($this->atLeastOnce())
->method('getTransportOptions') ->method('getTransportOptions')

Loading…
Cancel
Save