function FundCommand::execute
Overrides Command::execute
File
-
vendor/
composer/ composer/ src/ Composer/ Command/ FundCommand.php, line 43
Class
- FundCommand
- @author Nicolas Grekas <p@tchwork.com> @author Jordi Boggiano <j.boggiano@seld.be>
Namespace
Composer\CommandCode
protected function execute(InputInterface $input, OutputInterface $output) : int {
$composer = $this->requireComposer();
$repo = $composer->getRepositoryManager()
->getLocalRepository();
$remoteRepos = new CompositeRepository($composer->getRepositoryManager()
->getRepositories());
$fundings = [];
$packagesToLoad = [];
foreach ($repo->getPackages() as $package) {
if ($package instanceof AliasPackage) {
continue;
}
$packagesToLoad[$package->getName()] = new MatchAllConstraint();
}
// load all packages dev versions in parallel
$result = $remoteRepos->loadPackages($packagesToLoad, [
'dev' => BasePackage::STABILITY_DEV,
], []);
// collect funding data from default branches
foreach ($result['packages'] as $package) {
if (!$package instanceof AliasPackage && $package instanceof CompletePackageInterface && $package->isDefaultBranch() && $package->getFunding() && isset($packagesToLoad[$package->getName()])) {
$fundings = $this->insertFundingData($fundings, $package);
unset($packagesToLoad[$package->getName()]);
}
}
// collect funding from installed packages if none was found in the default branch above
foreach ($repo->getPackages() as $package) {
if ($package instanceof AliasPackage || !isset($packagesToLoad[$package->getName()])) {
continue;
}
if ($package instanceof CompletePackageInterface && $package->getFunding()) {
$fundings = $this->insertFundingData($fundings, $package);
}
}
ksort($fundings);
$io = $this->getIO();
$format = $input->getOption('format');
if (!in_array($format, [
'text',
'json',
])) {
$io->writeError(sprintf('Unsupported format "%s". See help for supported formats.', $format));
return 1;
}
if ($fundings && $format === 'text') {
$prev = null;
$io->write('The following packages were found in your dependencies which publish funding information:');
foreach ($fundings as $vendor => $links) {
$io->write('');
$io->write(sprintf("<comment>%s</comment>", $vendor));
foreach ($links as $url => $packages) {
$line = sprintf(' <info>%s</info>', implode(', ', $packages));
if ($prev !== $line) {
$io->write($line);
$prev = $line;
}
$io->write(sprintf(' <href=%s>%s</>', OutputFormatter::escape($url), $url));
}
}
$io->write("");
$io->write("Please consider following these links and sponsoring the work of package authors!");
$io->write("Thank you!");
}
elseif ($format === 'json') {
$io->write(JsonFile::encode($fundings));
}
else {
$io->write("No funding links were found in your package dependencies. This doesn't mean they don't need your support!");
}
return 0;
}