function ArchiveCommand::selectPackage
Return value
(BasePackage&CompletePackageInterface)|false
1 call to ArchiveCommand::selectPackage()
- ArchiveCommand::archive in vendor/
composer/ composer/ src/ Composer/ Command/ ArchiveCommand.php
File
-
vendor/
composer/ composer/ src/ Composer/ Command/ ArchiveCommand.php, line 156
Class
- ArchiveCommand
- Creates an archive of a package for distribution.
Namespace
Composer\CommandCode
protected function selectPackage(IOInterface $io, string $packageName, ?string $version = null) {
$io->writeError('<info>Searching for the specified package.</info>');
if ($composer = $this->tryComposer()) {
$localRepo = $composer->getRepositoryManager()
->getLocalRepository();
$repo = new CompositeRepository(array_merge([
$localRepo,
], $composer->getRepositoryManager()
->getRepositories()));
$minStability = $composer->getPackage()
->getMinimumStability();
}
else {
$defaultRepos = RepositoryFactory::defaultReposWithDefaultManager($io);
$io->writeError('No composer.json found in the current directory, searching packages from ' . implode(', ', array_keys($defaultRepos)));
$repo = new CompositeRepository($defaultRepos);
$minStability = 'stable';
}
if ($version !== null && Preg::isMatchStrictGroups('{@(stable|RC|beta|alpha|dev)$}i', $version, $match)) {
$minStability = VersionParser::normalizeStability($match[1]);
$version = (string) substr($version, 0, -strlen($match[0]));
}
$repoSet = new RepositorySet($minStability);
$repoSet->addRepository($repo);
$parser = new VersionParser();
$constraint = $version !== null ? $parser->parseConstraints($version) : null;
$packages = $repoSet->findPackages(strtolower($packageName), $constraint);
if (count($packages) > 1) {
$versionSelector = new VersionSelector($repoSet);
$package = $versionSelector->findBestCandidate(strtolower($packageName), $version, $minStability);
if ($package === false) {
$package = reset($packages);
}
$io->writeError('<info>Found multiple matches, selected ' . $package->getPrettyString() . '.</info>');
$io->writeError('Alternatives were ' . implode(', ', array_map(static function ($p) : string {
return $p->getPrettyString();
}, $packages)) . '.');
$io->writeError('<comment>Please use a more specific constraint to pick a different package.</comment>');
}
elseif (count($packages) === 1) {
$package = reset($packages);
$io->writeError('<info>Found an exact match ' . $package->getPrettyString() . '.</info>');
}
else {
$io->writeError('<error>Could not find a package matching ' . $packageName . '.</error>');
return false;
}
if (!$package instanceof CompletePackageInterface) {
throw new \LogicException('Expected a CompletePackageInterface instance but found ' . get_class($package));
}
if (!$package instanceof BasePackage) {
throw new \LogicException('Expected a BasePackage instance but found ' . get_class($package));
}
return $package;
}