Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. ArchiveCommand.php

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\Command

Code

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;
}
RSS feed
Powered by Drupal