1
0
Fork 0

More fixes to mirror support

pull/2993/merge
Jordi Boggiano 2013-10-19 17:41:29 +02:00
parent b39df32d4b
commit 31b787249c
3 changed files with 45 additions and 8 deletions

View File

@ -241,7 +241,7 @@ class Package extends BasePackage
*/
public function getSourceUrls()
{
return $this->getUrls($this->sourceUrl, $this->sourceMirrors, $this->sourceReference, $this->sourceType);
return $this->getUrls($this->sourceUrl, $this->sourceMirrors, $this->sourceReference, $this->sourceType, 'source');
}
/**
@ -329,7 +329,7 @@ class Package extends BasePackage
*/
public function getDistUrls()
{
return $this->getUrls($this->distUrl, $this->distMirrors, $this->distReference, $this->distType);
return $this->getUrls($this->distUrl, $this->distMirrors, $this->distReference, $this->distType, 'dist');
}
/**
@ -580,7 +580,7 @@ class Package extends BasePackage
$this->dev = $this->stability === 'dev';
}
protected function getUrls($url, $mirrors, $ref, $type)
protected function getUrls($url, $mirrors, $ref, $type, $urlType)
{
if (!$url) {
return array();
@ -588,8 +588,14 @@ class Package extends BasePackage
$urls = array($url);
if ($mirrors) {
foreach ($mirrors as $mirror) {
$mirrorUrl = ComposerMirror::processUrl($mirror['url'], $this->name, $this->version, $ref, $type);
if (!in_array($urls, $mirrorUrl)) {
if ($urlType === 'dist') {
$mirrorUrl = ComposerMirror::processUrl($mirror['url'], $this->name, $this->version, $ref, $type);
} elseif ($urlType === 'source' && $type === 'git') {
$mirrorUrl = ComposerMirror::processGitUrl($mirror['url'], $this->name, $url, $type);
} elseif ($urlType === 'source' && $type === 'hg') {
$mirrorUrl = ComposerMirror::processHgUrl($mirror['url'], $this->name, $url, $type);
}
if (!in_array($mirrorUrl, $urls)) {
$func = $mirror['preferred'] ? 'array_unshift' : 'array_push';
$func($urls, $mirrorUrl);
}

View File

@ -443,8 +443,11 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
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['git-url'])) {
$this->sourceMirrors['git'][] = array('url' => $mirror['git-url'], 'preferred' => !empty($mirror['preferred']));
}
if (!empty($mirror['hg-url'])) {
$this->sourceMirrors['hg'][] = array('url' => $mirror['hg-url'], 'preferred' => !empty($mirror['preferred']));
}
if (!empty($mirror['dist-url'])) {
$this->distMirrors[] = array('url' => $mirror['dist-url'], 'preferred' => !empty($mirror['preferred']));
@ -452,6 +455,10 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
}
}
if (!empty($data['warning'])) {
$this->io->write('<warning>Warning from '.$this->url.': '.$data['warning'].'</warning>');
}
if (!empty($data['providers-lazy-url'])) {
$this->lazyProvidersUrl = $this->canonicalizeUrl($data['providers-lazy-url']);
$this->hasProviders = true;
@ -571,7 +578,9 @@ class ComposerRepository extends ArrayRepository implements StreamableRepository
}
$package = $this->loader->load($data, 'Composer\Package\CompletePackage');
$package->setSourceMirrors($this->sourceMirrors);
if (isset($this->sourceMirrors[$package->getSourceType()])) {
$package->setSourceMirrors($this->sourceMirrors[$package->getSourceType()]);
}
$package->setDistMirrors($this->distMirrors);
$this->configurePackageTransportOptions($package);

View File

@ -30,4 +30,26 @@ class ComposerMirror
$mirrorUrl
);
}
public static function processGitUrl($mirrorUrl, $packageName, $url, $type)
{
if (preg_match('#^(?:(?:https?|git)://github\.com/|git@github\.com:)([^/]+)/(.+?)(?:\.git)?$#', $url, $match)) {
$url = 'gh-'.$match[1].'/'.$match[2];
} elseif (preg_match('#^https://bitbucket\.org/([^/]+)/(.+?)(?:\.git)?/?$#', $url, $match)) {
$url = 'bb-'.$match[1].'/'.$match[2];
} else {
$url = preg_replace('{[^a-z0-9_.-]}i', '-', trim($url, '/'));
}
return str_replace(
array('%package%', '%normalizedUrl%', '%type%'),
array($packageName, $url, $type),
$mirrorUrl
);
}
public static function processHgUrl($mirrorUrl, $packageName, $url, $type)
{
return self::processGitUrl($mirrorUrl, $packageName, $url, $type);
}
}