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\VersionCode
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();
}