Add support for mirrors in composer repos
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…
Reference in New Issue