Subiendo proyecto completo sin restricciones de git ignore
This commit is contained in:
92
vendor/symfony/thanks/src/Command/FundCommand.php
vendored
Normal file
92
vendor/symfony/thanks/src/Command/FundCommand.php
vendored
Normal file
@@ -0,0 +1,92 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Thanks\Command;
|
||||
|
||||
use Composer\Command\BaseCommand;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Thanks\GitHubClient;
|
||||
|
||||
/**
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class FundCommand extends BaseCommand
|
||||
{
|
||||
private $star = '★ ';
|
||||
private $love = '💖 ';
|
||||
private $cash = '💵 ';
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
if ('Hyper' === getenv('TERM_PROGRAM')) {
|
||||
$this->star = '⭐ ';
|
||||
} elseif ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
$this->star = '*';
|
||||
$this->love = '<3';
|
||||
$this->cash = '$$$';
|
||||
}
|
||||
|
||||
$this->setName('fund')
|
||||
->setDescription(sprintf('Discover the funding links that fellow PHP package maintainers publish %s.', $this->cash))
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$composer = $this->getComposer();
|
||||
$gitHub = new GitHubClient($composer, $this->getIO());
|
||||
|
||||
$repos = $gitHub->getRepositories($failures, true);
|
||||
$fundings = [];
|
||||
$notStarred = 0;
|
||||
|
||||
foreach ($repos as $alias => $repo) {
|
||||
$notStarred += (int) !$repo['viewerHasStarred'];
|
||||
|
||||
foreach ($repo['fundingLinks'] as $link) {
|
||||
list($owner, $package) = explode('/', $repo['package'], 2);
|
||||
$fundings[$owner][$link['url']][] = $package;
|
||||
}
|
||||
}
|
||||
|
||||
if ($fundings) {
|
||||
$prev = null;
|
||||
|
||||
$output->writeln('The following packages were found in your dependencies and publish sponsoring links on their GitHub page:');
|
||||
|
||||
foreach ($fundings as $owner => $links) {
|
||||
$output->writeln(sprintf("\n<comment>%s</comment>", $owner));
|
||||
foreach ($links as $url => $packages) {
|
||||
$line = sprintf(' <info>%s/%s</>', $owner, implode(', ', $packages));
|
||||
|
||||
if ($prev !== $line) {
|
||||
$output->writeln($line);
|
||||
$prev = $line;
|
||||
}
|
||||
$output->writeln(sprintf(' %s %s', $this->cash, $url));
|
||||
}
|
||||
}
|
||||
|
||||
$output->writeln("\nPlease consider following these links and sponsoring the work of package authors!");
|
||||
$output->writeln(sprintf("\nThank you! %s", $this->love));
|
||||
} else {
|
||||
$output->writeln("No funding links were found in your package dependencies. This doesn't mean they don't need your support!");
|
||||
}
|
||||
|
||||
if ($notStarred) {
|
||||
$output->writeln(sprintf("\nRun <comment>composer thanks</> to send a %s to <comment>%d</comment> GitHub repositor%s of your fellow package maintainers.", $this->star, $notStarred, 1 < $notStarred ? 'ies' : 'y'));
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
95
vendor/symfony/thanks/src/Command/ThanksCommand.php
vendored
Normal file
95
vendor/symfony/thanks/src/Command/ThanksCommand.php
vendored
Normal file
@@ -0,0 +1,95 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Thanks\Command;
|
||||
|
||||
use Composer\Command\BaseCommand;
|
||||
use Symfony\Component\Console\Input\InputInterface;
|
||||
use Symfony\Component\Console\Input\InputOption;
|
||||
use Symfony\Component\Console\Output\OutputInterface;
|
||||
use Symfony\Thanks\GitHubClient;
|
||||
|
||||
/**
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class ThanksCommand extends BaseCommand
|
||||
{
|
||||
private $star = '★ ';
|
||||
private $love = '💖 ';
|
||||
private $cash = '💵 ';
|
||||
|
||||
protected function configure()
|
||||
{
|
||||
if ('Hyper' === getenv('TERM_PROGRAM')) {
|
||||
$this->star = '⭐ ';
|
||||
} elseif ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
$this->star = '*';
|
||||
$this->love = '<3';
|
||||
$this->cash = '$$$';
|
||||
}
|
||||
|
||||
$this->setName('thanks')
|
||||
->setDescription(sprintf('Give thanks (in the form of a GitHub %s) to your fellow PHP package maintainers.', $this->star))
|
||||
->setDefinition([
|
||||
new InputOption('dry-run', null, InputOption::VALUE_NONE, 'Don\'t actually send the stars'),
|
||||
])
|
||||
;
|
||||
}
|
||||
|
||||
protected function execute(InputInterface $input, OutputInterface $output)
|
||||
{
|
||||
$composer = $this->getComposer();
|
||||
$gitHub = new GitHubClient($composer, $this->getIO());
|
||||
|
||||
$repos = $gitHub->getRepositories($failures);
|
||||
|
||||
$template = '%1$s: addStar(input:{clientMutationId:"%s",starrableId:"%s"}){clientMutationId}'."\n";
|
||||
$graphql = '';
|
||||
$notStarred = [];
|
||||
|
||||
foreach ($repos as $alias => $repo) {
|
||||
if (!$repo['viewerHasStarred']) {
|
||||
$graphql .= sprintf($template, $alias, $repo['id']);
|
||||
$notStarred[$alias] = $repo;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$notStarred) {
|
||||
$output->writeln('You already starred all your GitHub dependencies.');
|
||||
} else {
|
||||
if (!$input->getOption('dry-run')) {
|
||||
$notStarred = $gitHub->call(sprintf("mutation{\n%s}", $graphql));
|
||||
}
|
||||
|
||||
$output->writeln('Stars <comment>sent</> to:');
|
||||
foreach ($repos as $alias => $repo) {
|
||||
$output->writeln(sprintf(' %s %s - %s', $this->star, sprintf(isset($notStarred[$alias]) ? '<comment>%s</>' : '%s', $repo['package']), $repo['url']));
|
||||
}
|
||||
}
|
||||
|
||||
if ($failures) {
|
||||
$output->writeln('');
|
||||
$output->writeln('Some repositories could not be starred, please run <info>composer update</info> and try again:');
|
||||
|
||||
foreach ($failures as $alias => $failure) {
|
||||
foreach ((array) $failure['messages'] as $message) {
|
||||
$output->writeln(sprintf(' * %s - %s', $failure['url'], $message));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$output->writeln("\nPlease consider contributing back in any way if you can!");
|
||||
$output->writeln(sprintf("\nRun <comment>composer fund</> to discover how you can sponsor your fellow PHP package maintainers %s", $this->cash));
|
||||
$output->writeln(sprintf("\nThank you! %s", $this->love));
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
234
vendor/symfony/thanks/src/GitHubClient.php
vendored
Normal file
234
vendor/symfony/thanks/src/GitHubClient.php
vendored
Normal file
@@ -0,0 +1,234 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Thanks;
|
||||
|
||||
use Composer\Composer;
|
||||
use Composer\Downloader\TransportException;
|
||||
use Composer\Factory;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\Json\JsonFile;
|
||||
use Composer\Util\HttpDownloader;
|
||||
|
||||
/**
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class GitHubClient
|
||||
{
|
||||
// This is a list of projects that should get a star on their main repository
|
||||
// (when there is one) whenever you use any of their other repositories.
|
||||
// When a project's main repo is also a dependency of their other repos (like amphp/amp),
|
||||
// there is no need to list it here, as starring will transitively happen anyway.
|
||||
private static $mainRepositories = [
|
||||
'api-platform' => [
|
||||
'name' => 'api-platform/api-platform',
|
||||
'url' => 'https://github.com/api-platform/api-platform',
|
||||
],
|
||||
'cakephp' => [
|
||||
'name' => 'cakephp/cakephp',
|
||||
'url' => 'https://github.com/cakephp/cakephp',
|
||||
],
|
||||
'drupal' => [
|
||||
'name' => 'drupal/drupal',
|
||||
'url' => 'https://github.com/drupal/drupal',
|
||||
],
|
||||
'laravel' => [
|
||||
'name' => 'laravel/laravel',
|
||||
'url' => 'https://github.com/laravel/laravel',
|
||||
],
|
||||
'illuminate' => [
|
||||
'name' => 'laravel/laravel',
|
||||
'url' => 'https://github.com/laravel/laravel',
|
||||
],
|
||||
'nette' => [
|
||||
'name' => 'nette/nette',
|
||||
'url' => 'https://github.com/nette/nette',
|
||||
],
|
||||
'phpDocumentor' => [
|
||||
'name' => 'phpDocumentor/phpDocumentor2',
|
||||
'url' => 'https://github.com/phpDocumentor/phpDocumentor2',
|
||||
],
|
||||
'matomo' => [
|
||||
'name' => 'piwik/piwik',
|
||||
'url' => 'https://github.com/matomo-org/matomo',
|
||||
],
|
||||
'reactphp' => [
|
||||
'name' => 'reactphp/react',
|
||||
'url' => 'https://github.com/reactphp/react',
|
||||
],
|
||||
'sebastianbergmann' => [
|
||||
'name' => 'phpunit/phpunit',
|
||||
'url' => 'https://github.com/sebastianbergmann/phpunit',
|
||||
],
|
||||
'slimphp' => [
|
||||
'name' => 'slimphp/Slim',
|
||||
'url' => 'https://github.com/slimphp/Slim',
|
||||
],
|
||||
'Sylius' => [
|
||||
'name' => 'Sylius/Sylius',
|
||||
'url' => 'https://github.com/Sylius/Sylius',
|
||||
],
|
||||
'symfony' => [
|
||||
'name' => 'symfony/symfony',
|
||||
'url' => 'https://github.com/symfony/symfony',
|
||||
],
|
||||
'yiisoft' => [
|
||||
'name' => 'yiisoft/yii2',
|
||||
'url' => 'https://github.com/yiisoft/yii2',
|
||||
],
|
||||
'zendframework' => [
|
||||
'name' => 'zendframework/zendframework',
|
||||
'url' => 'https://github.com/zendframework/zendframework',
|
||||
],
|
||||
];
|
||||
|
||||
private $composer;
|
||||
private $io;
|
||||
private $rfs;
|
||||
|
||||
public function __construct(Composer $composer, IOInterface $io)
|
||||
{
|
||||
$this->composer = $composer;
|
||||
$this->io = $io;
|
||||
|
||||
if (class_exists(HttpDownloader::class)) {
|
||||
$this->rfs = new HttpDownloader($io, $composer->getConfig());
|
||||
} else {
|
||||
$this->rfs = Factory::createRemoteFilesystem($io, $composer->getConfig());
|
||||
}
|
||||
}
|
||||
|
||||
public function getRepositories(array &$failures = null, $withFundingLinks = false)
|
||||
{
|
||||
$repo = $this->composer->getRepositoryManager()->getLocalRepository();
|
||||
|
||||
$urls = [
|
||||
'composer/composer' => 'https://github.com/composer/composer',
|
||||
'php/php-src' => 'https://github.com/php/php-src',
|
||||
'symfony/thanks' => 'https://github.com/symfony/thanks',
|
||||
];
|
||||
|
||||
$directPackages = $this->getDirectlyRequiredPackageNames();
|
||||
// symfony/thanks shouldn't trigger thanking symfony/symfony
|
||||
unset($directPackages['symfony/thanks']);
|
||||
foreach ($repo->getPackages() as $package) {
|
||||
$extra = $package->getExtra();
|
||||
|
||||
if (isset($extra['thanks']['name'], $extra['thanks']['url'])) {
|
||||
$urls += [$extra['thanks']['name'] => $extra['thanks']['url']];
|
||||
}
|
||||
|
||||
if (!$url = $package->getSourceUrl()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$urls[$package->getName()] = $url;
|
||||
|
||||
if (!preg_match('#^https://github.com/([^/]++)#', $url, $url)) {
|
||||
continue;
|
||||
}
|
||||
$owner = $url[1];
|
||||
|
||||
// star the main repository, but only if this package is directly
|
||||
// being required by the user's composer.json
|
||||
if (isset(self::$mainRepositories[$owner], $directPackages[$package->getName()])) {
|
||||
$urls[self::$mainRepositories[$owner]['name']] = self::$mainRepositories[$owner]['url'];
|
||||
}
|
||||
}
|
||||
|
||||
ksort($urls);
|
||||
|
||||
$i = 0;
|
||||
$template = $withFundingLinks
|
||||
? '_%d: repository(owner:"%s",name:"%s"){id,viewerHasStarred,fundingLinks{platform,url}}'."\n"
|
||||
: '_%d: repository(owner:"%s",name:"%s"){id,viewerHasStarred}'."\n";
|
||||
$graphql = '';
|
||||
|
||||
foreach ($urls as $package => $url) {
|
||||
if (preg_match('#^https://github.com/([^/]++)/(.*?)(?:\.git)?$#i', $url, $url)) {
|
||||
$graphql .= sprintf($template, ++$i, $url[1], $url[2]);
|
||||
$aliases['_'.$i] = [$package, sprintf('https://github.com/%s/%s', $url[1], $url[2])];
|
||||
}
|
||||
}
|
||||
|
||||
$failures = [];
|
||||
$repos = [];
|
||||
|
||||
foreach ($this->call(sprintf("query{\n%s}", $graphql), $failures) as $alias => $repo) {
|
||||
$repo['package'] = $aliases[$alias][0];
|
||||
$repo['url'] = $aliases[$alias][1];
|
||||
$repos[$alias] = $repo;
|
||||
}
|
||||
|
||||
foreach ($failures as $alias => $messages) {
|
||||
$failures[$alias] = [
|
||||
'messages' => $messages,
|
||||
'package' => $aliases[$alias][0],
|
||||
'url' => $aliases[$alias][1],
|
||||
];
|
||||
}
|
||||
|
||||
return $repos;
|
||||
}
|
||||
|
||||
public function call($graphql, array &$failures = [])
|
||||
{
|
||||
$options = [
|
||||
'http' => [
|
||||
'method' => 'POST',
|
||||
'content' => json_encode(['query' => $graphql]),
|
||||
'header' => ['Content-Type: application/json'],
|
||||
],
|
||||
];
|
||||
|
||||
if ($this->rfs instanceof HttpDownloader) {
|
||||
$result = $this->rfs->get('https://api.github.com/graphql', $options)->getBody();
|
||||
} else {
|
||||
$result = $this->rfs->getContents('github.com', 'https://api.github.com/graphql', false, $options);
|
||||
}
|
||||
|
||||
$result = json_decode($result, true);
|
||||
|
||||
if (isset($result['errors'][0]['message'])) {
|
||||
if (!isset($result['data'])) {
|
||||
throw new TransportException($result['errors'][0]['message']);
|
||||
}
|
||||
|
||||
foreach ($result['errors'] as $error) {
|
||||
if (!isset($error['path'])) {
|
||||
$failures[isset($error['type']) ? $error['type'] : $error['message']] = $error['message'];
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($error['path'] as $path) {
|
||||
$failures += [$path => $error['message']];
|
||||
unset($result['data'][$path]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return isset($result['data']) ? $result['data'] : [];
|
||||
}
|
||||
|
||||
private function getDirectlyRequiredPackageNames()
|
||||
{
|
||||
$file = new JsonFile(Factory::getComposerFile(), null, $this->io);
|
||||
|
||||
if (!$file->exists()) {
|
||||
throw new \Exception('Could not find your composer.json file!');
|
||||
}
|
||||
|
||||
$data = $file->read() + ['require' => [], 'require-dev' => []];
|
||||
$data = array_keys($data['require'] + $data['require-dev']);
|
||||
|
||||
return array_combine($data, $data);
|
||||
}
|
||||
}
|
||||
132
vendor/symfony/thanks/src/Thanks.php
vendored
Normal file
132
vendor/symfony/thanks/src/Thanks.php
vendored
Normal file
@@ -0,0 +1,132 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Thanks;
|
||||
|
||||
use Composer\Composer;
|
||||
use Composer\Console\Application;
|
||||
use Composer\EventDispatcher\EventSubscriberInterface;
|
||||
use Composer\Installer\PackageEvents;
|
||||
use Composer\IO\IOInterface;
|
||||
use Composer\Plugin\PluginInterface;
|
||||
use Composer\Script\Event as ScriptEvent;
|
||||
use Composer\Script\ScriptEvents;
|
||||
use Symfony\Component\Console\Input\ArgvInput;
|
||||
|
||||
/**
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class Thanks implements EventSubscriberInterface, PluginInterface
|
||||
{
|
||||
private $io;
|
||||
private $displayReminder = 0;
|
||||
|
||||
public function activate(Composer $composer, IOInterface $io)
|
||||
{
|
||||
$this->io = $io;
|
||||
|
||||
foreach (debug_backtrace() as $trace) {
|
||||
if (!isset($trace['object']) || !isset($trace['args'][0])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!$trace['object'] instanceof Application || !$trace['args'][0] instanceof ArgvInput) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$input = $trace['args'][0];
|
||||
$app = $trace['object'];
|
||||
|
||||
try {
|
||||
$command = $input->getFirstArgument();
|
||||
$command = $command ? $app->find($command)->getName() : null;
|
||||
} catch (\InvalidArgumentException $e) {
|
||||
}
|
||||
|
||||
if ('update' === $command) {
|
||||
$this->displayReminder = 1;
|
||||
}
|
||||
|
||||
$app->add(new Command\ThanksCommand());
|
||||
|
||||
if (!$app->has('fund')) {
|
||||
$app->add(new Command\FundCommand());
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public function enableReminder()
|
||||
{
|
||||
if (1 === $this->displayReminder) {
|
||||
$this->displayReminder = version_compare('1.1.0', PluginInterface::PLUGIN_API_VERSION, '<=') ? 2 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
public function displayReminder(ScriptEvent $event)
|
||||
{
|
||||
if (2 !== $this->displayReminder) {
|
||||
return;
|
||||
}
|
||||
|
||||
$gitHub = new GitHubClient($event->getComposer(), $event->getIO());
|
||||
|
||||
$notStarred = 0;
|
||||
foreach ($gitHub->getRepositories() as $repo) {
|
||||
$notStarred += (int) !$repo['viewerHasStarred'];
|
||||
}
|
||||
|
||||
if (!$notStarred) {
|
||||
return;
|
||||
}
|
||||
|
||||
$love = '💖 ';
|
||||
$star = '★ ';
|
||||
$cash = '💵 ';
|
||||
|
||||
if ('Hyper' === getenv('TERM_PROGRAM')) {
|
||||
$star = '⭐ ';
|
||||
} elseif ('\\' === \DIRECTORY_SEPARATOR) {
|
||||
$love = 'love';
|
||||
$star = 'star';
|
||||
$cash = 'cash.';
|
||||
}
|
||||
|
||||
$this->io->writeError('');
|
||||
$this->io->writeError('What about running <comment>composer thanks</> now?</>');
|
||||
$this->io->writeError(sprintf('This will spread some %s by sending a %s to <comment>%d</comment> GitHub repositor%s of your fellow package maintainers.', $love, $star, $notStarred, 1 < $notStarred ? 'ies' : 'y'));
|
||||
$this->io->writeError(sprintf('You can also run <comment>composer fund</> to discover how you can sponsor their work with some %s</>', $cash));
|
||||
$this->io->writeError('');
|
||||
}
|
||||
|
||||
public static function getSubscribedEvents()
|
||||
{
|
||||
return [
|
||||
PackageEvents::POST_PACKAGE_UPDATE => 'enableReminder',
|
||||
ScriptEvents::POST_UPDATE_CMD => 'displayReminder',
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function deactivate(Composer $composer, IOInterface $io)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function uninstall(Composer $composer, IOInterface $io)
|
||||
{
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user