Merge branch 'master' into 2.0
commit
9cab8c10cc
|
@ -1,3 +0,0 @@
|
||||||
# These are supported funding model platforms
|
|
||||||
|
|
||||||
custom: https://packagist.com
|
|
|
@ -54,7 +54,7 @@ file:
|
||||||
### VCS Versioning
|
### VCS Versioning
|
||||||
|
|
||||||
Composer uses your VCS's branch and tag features to resolve the version
|
Composer uses your VCS's branch and tag features to resolve the version
|
||||||
constraints you specify in your `require` field to specific sets of files.
|
constraints you specify in your [`require`](04-schema.md#require) field to specific sets of files.
|
||||||
When determining valid available versions, Composer looks at all of your tags
|
When determining valid available versions, Composer looks at all of your tags
|
||||||
and branches and translates their names into an internal list of options that
|
and branches and translates their names into an internal list of options that
|
||||||
it then matches against the version constraint you provided.
|
it then matches against the version constraint you provided.
|
||||||
|
|
|
@ -615,7 +615,6 @@ class Solver
|
||||||
|
|
||||||
$level = 1;
|
$level = 1;
|
||||||
$systemLevel = $level + 1;
|
$systemLevel = $level + 1;
|
||||||
$installedPos = 0;
|
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
if (1 === $level) {
|
if (1 === $level) {
|
||||||
|
|
|
@ -19,6 +19,7 @@ use Composer\Repository\RepositoryManager;
|
||||||
use Composer\Util\ProcessExecutor;
|
use Composer\Util\ProcessExecutor;
|
||||||
use Composer\Package\Dumper\ArrayDumper;
|
use Composer\Package\Dumper\ArrayDumper;
|
||||||
use Composer\Package\Loader\ArrayLoader;
|
use Composer\Package\Loader\ArrayLoader;
|
||||||
|
use Composer\Plugin\PluginInterface;
|
||||||
use Composer\Util\Git as GitUtil;
|
use Composer\Util\Git as GitUtil;
|
||||||
use Composer\IO\IOInterface;
|
use Composer\IO\IOInterface;
|
||||||
use Seld\JsonLint\ParsingException;
|
use Seld\JsonLint\ParsingException;
|
||||||
|
@ -344,6 +345,7 @@ class Locker
|
||||||
if ($platformOverrides) {
|
if ($platformOverrides) {
|
||||||
$lock['platform-overrides'] = $platformOverrides;
|
$lock['platform-overrides'] = $platformOverrides;
|
||||||
}
|
}
|
||||||
|
$lock['plugin-api-version'] = PluginInterface::PLUGIN_API_VERSION;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$isLocked = $this->isLocked();
|
$isLocked = $this->isLocked();
|
||||||
|
|
|
@ -168,7 +168,6 @@ class GitHubDriver extends VcsDriver
|
||||||
if (!isset($composer['abandoned']) && $this->isArchived) {
|
if (!isset($composer['abandoned']) && $this->isArchived) {
|
||||||
$composer['abandoned'] = true;
|
$composer['abandoned'] = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isset($composer['funding']) && $funding = $this->getFundingInfo()) {
|
if (!isset($composer['funding']) && $funding = $this->getFundingInfo()) {
|
||||||
$composer['funding'] = $funding;
|
$composer['funding'] = $funding;
|
||||||
}
|
}
|
||||||
|
@ -194,28 +193,77 @@ class GitHubDriver extends VcsDriver
|
||||||
return $this->fundingInfo = false;
|
return $this->fundingInfo = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
$graphql = 'query{repository(owner:"'.$this->owner.'",name:"'.$this->repository.'"){fundingLinks{platform,url}}}';
|
foreach (array($this->getApiUrl() . '/repos/'.$this->owner.'/'.$this->repository.'/contents/.github/FUNDING.yml', $this->getApiUrl() . '/repos/'.$this->owner.'/.github/contents/FUNDING.yml') as $file) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
$result = $this->httpDownloader->get('https://api.github.com/graphql', array(
|
$response = $this->httpDownloader->get($file, array(
|
||||||
'http' => array(
|
|
||||||
'method' => 'POST',
|
|
||||||
'content' => json_encode(array('query' => $graphql)),
|
|
||||||
'header' => array('Content-Type: application/json'),
|
|
||||||
),
|
|
||||||
'retry-auth-failure' => false,
|
'retry-auth-failure' => false,
|
||||||
));
|
))->decodeJson();
|
||||||
} catch (TransportException $e) {
|
} catch (TransportException $e) {
|
||||||
return $this->fundingInfo = false;
|
continue;
|
||||||
}
|
}
|
||||||
$result = json_decode($result, true);
|
if (empty($response['content']) || $response['encoding'] !== 'base64' || !($funding = base64_decode($response['content']))) {
|
||||||
|
continue;
|
||||||
if (empty($result['data']['repository']['fundingLinks'])) {
|
}
|
||||||
|
}
|
||||||
|
if (empty($funding)) {
|
||||||
return $this->fundingInfo = false;
|
return $this->fundingInfo = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $this->fundingInfo = array_map(function ($link) {
|
$result = array();
|
||||||
return array('type' => strtolower($link['platform']), 'url' => $link['url']);
|
$key = null;
|
||||||
}, $result['data']['repository']['fundingLinks']);
|
foreach (preg_split('{\r?\n}', $funding) as $line) {
|
||||||
|
$line = preg_replace('{#.*}', '', $line);
|
||||||
|
$line = trim($line);
|
||||||
|
if (preg_match('{^(\w+)\s*:\s*(.+)$}', $line, $match)) {
|
||||||
|
if (preg_match('{^\[.*\]$}', $match[2])) {
|
||||||
|
foreach (array_map('trim', preg_split('{[\'"]?\s*,\s*[\'"]?}', substr($match[2], 1, -1))) as $item) {
|
||||||
|
$result[] = array('type' => $match[1], 'url' => trim($item, '"\''));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
$result[] = array('type' => $match[1], 'url' => $match[2]);
|
||||||
|
}
|
||||||
|
$key = null;
|
||||||
|
} elseif (preg_match('{^(\w+)\s*:$}', $line, $match)) {
|
||||||
|
$key = $match[1];
|
||||||
|
} elseif ($key && preg_match('{^-\s*(.+)$}', $line, $match)) {
|
||||||
|
$result[] = array('type' => $key, 'url' => $match[1]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($result as $key => $item) {
|
||||||
|
switch ($item['type']) {
|
||||||
|
case 'tidelift':
|
||||||
|
$result[$key]['url'] = 'https://tidelift.com/funding/github/' . $item['url'];
|
||||||
|
break;
|
||||||
|
case 'github':
|
||||||
|
$result[$key]['url'] = 'https://github.com/' . basename($item['url']);
|
||||||
|
break;
|
||||||
|
case 'patreon':
|
||||||
|
$result[$key]['url'] = 'https://www.patreon.com/' . basename($item['url']);
|
||||||
|
break;
|
||||||
|
case 'otechie':
|
||||||
|
$result[$key]['url'] = 'https://otechie.com/' . basename($item['url']);
|
||||||
|
break;
|
||||||
|
case 'open_collective':
|
||||||
|
$result[$key]['url'] = 'https://opencollective.com/' . basename($item['url']);
|
||||||
|
break;
|
||||||
|
case 'liberapay':
|
||||||
|
$result[$key]['url'] = 'https://liberapay.com/' . basename($item['url']);
|
||||||
|
break;
|
||||||
|
case 'ko_fi':
|
||||||
|
$result[$key]['url'] = 'https://ko-fi.com/' . basename($item['url']);
|
||||||
|
break;
|
||||||
|
case 'issuehunt':
|
||||||
|
$result[$key]['url'] = 'https://issuehunt.io/r/' . $item['url'];
|
||||||
|
break;
|
||||||
|
case 'community_bridge':
|
||||||
|
$result[$key]['url'] = 'https://funding.communitybridge.org/projects/' . basename($item['url']);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $this->fundingInfo = $result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -316,6 +316,7 @@ class InstallerTest extends TestCase
|
||||||
unset($actualLock['hash']);
|
unset($actualLock['hash']);
|
||||||
unset($actualLock['content-hash']);
|
unset($actualLock['content-hash']);
|
||||||
unset($actualLock['_readme']);
|
unset($actualLock['_readme']);
|
||||||
|
unset($actualLock['plugin-api-version']);
|
||||||
$this->assertEquals($expectLock, $actualLock);
|
$this->assertEquals($expectLock, $actualLock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
namespace Composer\Test\Package;
|
namespace Composer\Test\Package;
|
||||||
|
|
||||||
use Composer\Package\Locker;
|
use Composer\Package\Locker;
|
||||||
|
use Composer\Plugin\PluginInterface;
|
||||||
use Composer\IO\NullIO;
|
use Composer\IO\NullIO;
|
||||||
use Composer\Test\TestCase;
|
use Composer\Test\TestCase;
|
||||||
|
|
||||||
|
@ -150,6 +151,7 @@ class LockerTest extends TestCase
|
||||||
'platform-overrides' => array('foo/bar' => '1.0'),
|
'platform-overrides' => array('foo/bar' => '1.0'),
|
||||||
'prefer-stable' => false,
|
'prefer-stable' => false,
|
||||||
'prefer-lowest' => false,
|
'prefer-lowest' => false,
|
||||||
|
'plugin-api-version' => PluginInterface::PLUGIN_API_VERSION,
|
||||||
));
|
));
|
||||||
|
|
||||||
$locker->setLockData(array($package1, $package2), array(), array(), array(), array(), 'dev', array(), false, false, array('foo/bar' => '1.0'));
|
$locker->setLockData(array($package1, $package2), array(), array(), array(), array(), 'dev', array(), false, false, array('foo/bar' => '1.0'));
|
||||||
|
|
|
@ -191,6 +191,11 @@ class GitHubDriverTest extends TestCase
|
||||||
->with($this->equalTo($url = 'https://api.github.com/repos/composer/packagist/commits/feature%2F3.2-foo'))
|
->with($this->equalTo($url = 'https://api.github.com/repos/composer/packagist/commits/feature%2F3.2-foo'))
|
||||||
->will($this->returnValue(new Response(array('url' => $url), 200, array(), '{"commit": {"committer":{ "date": "2012-09-10"}}}')));
|
->will($this->returnValue(new Response(array('url' => $url), 200, array(), '{"commit": {"committer":{ "date": "2012-09-10"}}}')));
|
||||||
|
|
||||||
|
$httpDownloader->expects($this->at(3))
|
||||||
|
->method('get')
|
||||||
|
->with($this->equalTo($url = 'https://api.github.com/repos/composer/packagist/contents/.github/FUNDING.yml'))
|
||||||
|
->will($this->returnValue(new Response(array('url' => $url), 200, array(), '{"encoding": "base64", "content": "'.base64_encode("custom: https://example.com").'"}')));
|
||||||
|
|
||||||
$repoConfig = array(
|
$repoConfig = array(
|
||||||
'url' => $repoUrl,
|
'url' => $repoUrl,
|
||||||
);
|
);
|
||||||
|
@ -257,6 +262,11 @@ class GitHubDriverTest extends TestCase
|
||||||
->with($this->equalTo($url = 'https://api.github.com/repos/composer/packagist/commits/'.$sha))
|
->with($this->equalTo($url = 'https://api.github.com/repos/composer/packagist/commits/'.$sha))
|
||||||
->will($this->returnValue(new Response(array('url' => $url), 200, array(), '{"commit": {"committer":{ "date": "2012-09-10"}}}')));
|
->will($this->returnValue(new Response(array('url' => $url), 200, array(), '{"commit": {"committer":{ "date": "2012-09-10"}}}')));
|
||||||
|
|
||||||
|
$httpDownloader->expects($this->at(3))
|
||||||
|
->method('get')
|
||||||
|
->with($this->equalTo($url = 'https://api.github.com/repos/composer/packagist/contents/.github/FUNDING.yml'))
|
||||||
|
->will($this->returnValue(new Response(array('url' => $url), 200, array(), '{"encoding": "base64", "content": "'.base64_encode("custom: https://example.com").'"}')));
|
||||||
|
|
||||||
$repoConfig = array(
|
$repoConfig = array(
|
||||||
'url' => $repoUrl,
|
'url' => $repoUrl,
|
||||||
);
|
);
|
||||||
|
|
Loading…
Reference in New Issue