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

Breadcrumb

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

function VersionSelector::findRecommendedRequireVersion

Given a concrete version, this returns a ^ constraint (when possible) that should be used, for example, in composer.json.

For example:

  • 1.2.1 -> ^1.2
  • 1.2.1.2 -> ^1.2
  • 1.2 -> ^1.2
  • v3.2.1 -> ^3.2
  • 2.0-beta.1 -> ^2.0@beta
  • dev-master -> ^2.1@dev (dev version with alias)
  • dev-master -> dev-master (dev versions are untouched)

File

vendor/composer/composer/src/Composer/Package/Version/VersionSelector.php, line 205

Class

VersionSelector
Selects the best possible version for a package

Namespace

Composer\Package\Version

Code

public function findRecommendedRequireVersion(PackageInterface $package) : string {
    // Extensions which are versioned in sync with PHP should rather be required as "*" to simplify
    // the requires and have only one required version to change when bumping the php requirement
    if (0 === strpos($package->getName(), 'ext-')) {
        $phpVersion = PHP_MAJOR_VERSION . '.' . PHP_MINOR_VERSION . '.' . PHP_RELEASE_VERSION;
        $extVersion = implode('.', array_slice(explode('.', $package->getVersion()), 0, 3));
        if ($phpVersion === $extVersion) {
            return '*';
        }
    }
    $version = $package->getVersion();
    if (!$package->isDev()) {
        return $this->transformVersion($version, $package->getPrettyVersion(), $package->getStability());
    }
    $loader = new ArrayLoader($this->getParser());
    $dumper = new ArrayDumper();
    $extra = $loader->getBranchAlias($dumper->dump($package));
    if ($extra && $extra !== VersionParser::DEFAULT_BRANCH_ALIAS) {
        $extra = Preg::replace('{^(\\d+\\.\\d+\\.\\d+)(\\.9999999)-dev$}', '$1.0', $extra, -1, $count);
        if ($count > 0) {
            $extra = str_replace('.9999999', '.0', $extra);
            return $this->transformVersion($extra, $extra, 'dev');
        }
    }
    return $package->getPrettyVersion();
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal