Composer upgrade

This commit is contained in:
Clemens Schwaighofer
2022-02-24 13:44:33 +09:00
parent f2c0ba737a
commit c8d7b308b3
86 changed files with 961 additions and 716 deletions

View File

@@ -2,9 +2,30 @@
All notable changes to phar-io/version are documented in this file using the [Keep a CHANGELOG](http://keepachangelog.com/) principles.
## [3.2.1] - 2022-02-21
### Fixed
- Have ExactVersionConstraint honor build metadata (added in 3.2.0)
## [3.2.0] - 2022-02-21
### Added
- Build metadata is now supported and considered for equality checks only
## [3.1.1] - 2022-02-07
### Fixed
- [#28](https://github.com/phar-io/version/issues/28): `VersionConstraintParser` does not support logical OR represented by single pipe (|) (Thanks @llaville)
## [3.1.0] - 2021-02-23
>### Changed
### Changed
- Internal Refactoring
- More scalar types

View File

@@ -1,5 +1,3 @@
phar-io/version
Copyright (c) 2016-2017 Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de> and contributors
All rights reserved.
@@ -13,7 +11,7 @@ are permitted provided that the following conditions are met:
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of Arne Blankerts nor the names of contributors
* Neither the name of the copyright holder nor the names of contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.

View File

@@ -0,0 +1,28 @@
<?php declare(strict_types = 1);
/*
* This file is part of PharIo\Version.
*
* (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace PharIo\Version;
class BuildMetaData {
/** @var string */
private $value;
public function __construct(string $value) {
$this->value = $value;
}
public function asString(): string {
return $this->value;
}
public function equals(BuildMetaData $other): bool {
return $this->asString() === $other->asString();
}
}

View File

@@ -10,6 +10,7 @@ class PreReleaseSuffix {
'beta' => 2,
'rc' => 3,
'p' => 4,
'pl' => 4,
'patch' => 4,
];
@@ -59,15 +60,11 @@ class PreReleaseSuffix {
private function mapValueToScore(string $value): int {
$value = \strtolower($value);
if (\array_key_exists($value, self::valueScoreMap)) {
return self::valueScoreMap[$value];
}
return 0;
return self::valueScoreMap[$value];
}
private function parseValue(string $value): void {
$regex = '/-?((dev|beta|b|rc|alpha|a|patch|p)\.?(\d*)).*$/i';
$regex = '/-?((dev|beta|b|rc|alpha|a|patch|p|pl)\.?(\d*)).*$/i';
if (\preg_match($regex, $value, $matches) !== 1) {
throw new InvalidPreReleaseSuffixException(\sprintf('Invalid label %s', $value));

View File

@@ -25,11 +25,17 @@ class Version {
/** @var null|PreReleaseSuffix */
private $preReleaseSuffix;
/** @var null|BuildMetaData */
private $buildMetadata;
public function __construct(string $versionString) {
$this->ensureVersionStringIsValid($versionString);
$this->originalVersionString = $versionString;
}
/**
* @throws NoPreReleaseSuffixException
*/
public function getPreReleaseSuffix(): PreReleaseSuffix {
if ($this->preReleaseSuffix === null) {
throw new NoPreReleaseSuffixException('No pre-release suffix set');
@@ -62,7 +68,20 @@ class Version {
}
public function equals(Version $other): bool {
return $this->getVersionString() === $other->getVersionString();
if ($this->getVersionString() !== $other->getVersionString()) {
return false;
}
if ($this->hasBuildMetaData() !== $other->hasBuildMetaData()) {
return false;
}
if ($this->hasBuildMetaData() && $other->hasBuildMetaData() &&
!$this->getBuildMetaData()->equals($other->getBuildMetaData())) {
return false;
}
return true;
}
public function isGreaterThan(Version $version): bool {
@@ -117,6 +136,25 @@ class Version {
return $this->patch;
}
/**
* @psalm-assert-if-true BuildMetaData $this->buildMetadata
* @psalm-assert-if-true BuildMetaData $this->getBuildMetaData()
*/
public function hasBuildMetaData(): bool {
return $this->buildMetadata !== null;
}
/**
* @throws NoBuildMetaDataException
*/
public function getBuildMetaData(): BuildMetaData {
if (!$this->hasBuildMetaData()) {
throw new NoBuildMetaDataException('No build metadata set');
}
return $this->buildMetadata;
}
/**
* @param string[] $matches
*
@@ -127,9 +165,13 @@ class Version {
$this->minor = new VersionNumber((int)$matches['Minor']);
$this->patch = isset($matches['Patch']) ? new VersionNumber((int)$matches['Patch']) : new VersionNumber(0);
if (isset($matches['PreReleaseSuffix'])) {
if (isset($matches['PreReleaseSuffix']) && $matches['PreReleaseSuffix'] !== '') {
$this->preReleaseSuffix = new PreReleaseSuffix($matches['PreReleaseSuffix']);
}
if (isset($matches['BuildMetadata'])) {
$this->buildMetadata = new BuildMetaData($matches['BuildMetadata']);
}
}
/**
@@ -139,16 +181,20 @@ class Version {
*/
private function ensureVersionStringIsValid($version): void {
$regex = '/^v?
(?<Major>(0|(?:[1-9]\d*)))
(?P<Major>0|[1-9]\d*)
\\.
(?<Minor>(0|(?:[1-9]\d*)))
(?P<Minor>0|[1-9]\d*)
(\\.
(?<Patch>(0|(?:[1-9]\d*)))
(?P<Patch>0|[1-9]\d*)
)?
(?:
-
(?<PreReleaseSuffix>(?:(dev|beta|b|rc|alpha|a|patch|p)\.?\d*))
)?
(?<PreReleaseSuffix>(?:(dev|beta|b|rc|alpha|a|patch|p|pl)\.?\d*))
)?
(?:
\\+
(?P<BuildMetadata>[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-@]+)*)
)?
$/xi';
if (\preg_match($regex, $version, $matches) !== 1) {

View File

@@ -14,7 +14,7 @@ class VersionConstraintParser {
* @throws UnsupportedVersionConstraintException
*/
public function parse(string $value): VersionConstraint {
if (\strpos($value, '||') !== false) {
if (\strpos($value, '|') !== false) {
return $this->handleOrGroup($value);
}
@@ -58,7 +58,7 @@ class VersionConstraintParser {
private function handleOrGroup(string $value): OrVersionConstraintGroup {
$constraints = [];
foreach (\explode('||', $value) as $groupSegment) {
foreach (\preg_split('{\s*\|\|?\s*}', \trim($value)) as $groupSegment) {
$constraints[] = $this->parse(\trim($groupSegment));
}

View File

@@ -11,6 +11,12 @@ namespace PharIo\Version;
class ExactVersionConstraint extends AbstractVersionConstraint {
public function complies(Version $version): bool {
return $this->asString() === $version->getVersionString();
$other = $version->getVersionString();
if ($version->hasBuildMetaData()) {
$other .= '+' . $version->getBuildMetaData()->asString();
}
return $this->asString() === $other;
}
}

View File

@@ -0,0 +1,5 @@
<?php declare(strict_types = 1);
namespace PharIo\Version;
class NoBuildMetaDataException extends \Exception implements Exception {
}