mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-09-15 01:35:25 +00:00
147 lines
3.7 KiB
PHP
147 lines
3.7 KiB
PHP
|
<?php
|
||
|
|
||
|
/*
|
||
|
* This file is part of the Fxp Composer Asset Plugin package.
|
||
|
*
|
||
|
* (c) François Pluchino <francois.pluchino@gmail.com>
|
||
|
*
|
||
|
* For the full copyright and license information, please view the LICENSE
|
||
|
* file that was distributed with this source code.
|
||
|
*/
|
||
|
|
||
|
namespace Fxp\Composer\AssetPlugin\Converter;
|
||
|
|
||
|
/**
|
||
|
* Utils for semver range converter.
|
||
|
*
|
||
|
* @author François Pluchino <francois.pluchino@gmail.com>
|
||
|
*/
|
||
|
abstract class SemverRangeUtil
|
||
|
{
|
||
|
/**
|
||
|
* Replaces the special range "^".
|
||
|
*
|
||
|
* @param SemverConverter $converter The semver converter
|
||
|
* @param string $match The match version
|
||
|
*
|
||
|
* @return string the new match version
|
||
|
*/
|
||
|
public static function replaceSpecialRange(SemverConverter $converter, $match)
|
||
|
{
|
||
|
$newMatch = $converter->convertVersion($match);
|
||
|
$newMatch = '>='.static::standardizeVersion(SemverUtil::replaceAlias($newMatch, '>')).',<';
|
||
|
$exp = static::getSplittedVersion($match);
|
||
|
$increase = false;
|
||
|
|
||
|
foreach ($exp as $i => $sub) {
|
||
|
if (static::analyzeSubVersion($i, $exp, $increase)) {
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
static::increaseSubVersion($i, $exp, $increase);
|
||
|
}
|
||
|
|
||
|
$newMatch .= $converter->convertVersion(static::standardizeVersion($exp));
|
||
|
|
||
|
return $newMatch;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Analyze the sub version of splitted version.
|
||
|
*
|
||
|
* @param int $i The position in splitted version
|
||
|
* @param array $exp The splitted version
|
||
|
* @param bool $increase Check if the next sub version must be increased
|
||
|
*
|
||
|
* @return bool
|
||
|
*/
|
||
|
protected static function analyzeSubVersion($i, array &$exp, &$increase)
|
||
|
{
|
||
|
$analyzed = false;
|
||
|
|
||
|
if ($increase) {
|
||
|
$exp[$i] = 0;
|
||
|
$analyzed = true;
|
||
|
}
|
||
|
|
||
|
if (0 === $i && (int) $exp[$i] > 0) {
|
||
|
$increase = true;
|
||
|
$exp[$i] = (int) $exp[$i] + 1;
|
||
|
$analyzed = true;
|
||
|
}
|
||
|
|
||
|
return $analyzed;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Increase the sub version of splitted version.
|
||
|
*
|
||
|
* @param int $i The position in splitted version
|
||
|
* @param array $exp The splitted version
|
||
|
* @param bool $increase Check if the next sub version must be increased
|
||
|
*/
|
||
|
protected static function increaseSubVersion($i, array &$exp, &$increase)
|
||
|
{
|
||
|
$iNext = min(min($i + 1, 3), count($exp) - 1);
|
||
|
|
||
|
if (($iNext !== $i && ($exp[$i] > 0 || (int) $exp[$iNext] > 9999998)) || $iNext === $i) {
|
||
|
$exp[$i] = (int) $exp[$i] + 1;
|
||
|
$increase = true;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Standardize the version.
|
||
|
*
|
||
|
* @param string|array $version The version or the splitted version
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
protected static function standardizeVersion($version)
|
||
|
{
|
||
|
if (is_string($version)) {
|
||
|
$version = explode('.', $version);
|
||
|
}
|
||
|
|
||
|
while (count($version) < 3) {
|
||
|
$version[] = '0';
|
||
|
}
|
||
|
|
||
|
return implode('.', $version);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Split the version.
|
||
|
*
|
||
|
* @param string $version
|
||
|
*
|
||
|
* @return array
|
||
|
*/
|
||
|
protected static function getSplittedVersion($version)
|
||
|
{
|
||
|
$version = static::cleanExtraVersion($version);
|
||
|
$version = str_replace(array('*', 'x', 'X'), '9999999', $version);
|
||
|
$exp = explode('.', $version);
|
||
|
|
||
|
return $exp;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Remove the extra informations of the version (info after "-").
|
||
|
*
|
||
|
* @param string $version
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
protected static function cleanExtraVersion($version)
|
||
|
{
|
||
|
$pos = strpos($version, '-');
|
||
|
|
||
|
if (false !== $pos) {
|
||
|
$version = substr($version, 0, $pos);
|
||
|
}
|
||
|
|
||
|
return $version;
|
||
|
}
|
||
|
}
|