annotate vendor/phar-io/version/src/Version.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents 5311817fb629
children
rev   line source
Chris@2 1 <?php
Chris@2 2 /*
Chris@2 3 * This file is part of PharIo\Version.
Chris@2 4 *
Chris@2 5 * (c) Arne Blankerts <arne@blankerts.de>, Sebastian Heuer <sebastian@phpeople.de>, Sebastian Bergmann <sebastian@phpunit.de>
Chris@2 6 *
Chris@2 7 * For the full copyright and license information, please view the LICENSE
Chris@2 8 * file that was distributed with this source code.
Chris@2 9 */
Chris@2 10
Chris@2 11 namespace PharIo\Version;
Chris@2 12
Chris@2 13 class Version {
Chris@2 14 /**
Chris@2 15 * @var VersionNumber
Chris@2 16 */
Chris@2 17 private $major;
Chris@2 18
Chris@2 19 /**
Chris@2 20 * @var VersionNumber
Chris@2 21 */
Chris@2 22 private $minor;
Chris@2 23
Chris@2 24 /**
Chris@2 25 * @var VersionNumber
Chris@2 26 */
Chris@2 27 private $patch;
Chris@2 28
Chris@2 29 /**
Chris@2 30 * @var PreReleaseSuffix
Chris@2 31 */
Chris@2 32 private $preReleaseSuffix;
Chris@2 33
Chris@2 34 /**
Chris@2 35 * @var string
Chris@2 36 */
Chris@2 37 private $versionString = '';
Chris@2 38
Chris@2 39 /**
Chris@2 40 * @param string $versionString
Chris@2 41 */
Chris@2 42 public function __construct($versionString) {
Chris@2 43 $this->ensureVersionStringIsValid($versionString);
Chris@2 44
Chris@2 45 $this->versionString = $versionString;
Chris@2 46 }
Chris@2 47
Chris@2 48 /**
Chris@2 49 * @param array $matches
Chris@2 50 */
Chris@2 51 private function parseVersion(array $matches) {
Chris@2 52 $this->major = new VersionNumber($matches['Major']);
Chris@2 53 $this->minor = new VersionNumber($matches['Minor']);
Chris@2 54 $this->patch = isset($matches['Patch']) ? new VersionNumber($matches['Patch']) : new VersionNumber(null);
Chris@2 55
Chris@2 56 if (isset($matches['ReleaseType'])) {
Chris@2 57 $preReleaseNumber = isset($matches['ReleaseTypeCount']) ? (int) $matches['ReleaseTypeCount'] : null;
Chris@2 58
Chris@2 59 $this->preReleaseSuffix = new PreReleaseSuffix($matches['ReleaseType'], $preReleaseNumber);
Chris@2 60 }
Chris@2 61 }
Chris@2 62
Chris@2 63 /**
Chris@2 64 * @return PreReleaseSuffix
Chris@2 65 */
Chris@2 66 public function getPreReleaseSuffix()
Chris@2 67 {
Chris@2 68 return $this->preReleaseSuffix;
Chris@2 69 }
Chris@2 70
Chris@2 71 /**
Chris@2 72 * @return string
Chris@2 73 */
Chris@2 74 public function getVersionString() {
Chris@2 75 return $this->versionString;
Chris@2 76 }
Chris@2 77
Chris@2 78 /**
Chris@2 79 * @param Version $version
Chris@2 80 *
Chris@2 81 * @return bool
Chris@2 82 */
Chris@2 83 public function isGreaterThan(Version $version) {
Chris@2 84 if ($version->getMajor()->getValue() > $this->getMajor()->getValue()) {
Chris@2 85 return false;
Chris@2 86 }
Chris@2 87
Chris@2 88 if ($version->getMajor()->getValue() < $this->getMajor()->getValue()) {
Chris@2 89 return true;
Chris@2 90 }
Chris@2 91
Chris@2 92 if ($version->getMinor()->getValue() > $this->getMinor()->getValue()) {
Chris@2 93 return false;
Chris@2 94 }
Chris@2 95
Chris@2 96 if ($version->getMinor()->getValue() < $this->getMinor()->getValue()) {
Chris@2 97 return true;
Chris@2 98 }
Chris@2 99
Chris@2 100 if ($version->getPatch()->getValue() >= $this->getPatch()->getValue()) {
Chris@2 101 return false;
Chris@2 102 }
Chris@2 103
Chris@2 104 if ($version->getPatch()->getValue() < $this->getPatch()->getValue()) {
Chris@2 105 return true;
Chris@2 106 }
Chris@2 107
Chris@2 108 return false;
Chris@2 109 }
Chris@2 110
Chris@2 111 /**
Chris@2 112 * @return VersionNumber
Chris@2 113 */
Chris@2 114 public function getMajor() {
Chris@2 115 return $this->major;
Chris@2 116 }
Chris@2 117
Chris@2 118 /**
Chris@2 119 * @return VersionNumber
Chris@2 120 */
Chris@2 121 public function getMinor() {
Chris@2 122 return $this->minor;
Chris@2 123 }
Chris@2 124
Chris@2 125 /**
Chris@2 126 * @return VersionNumber
Chris@2 127 */
Chris@2 128 public function getPatch() {
Chris@2 129 return $this->patch;
Chris@2 130 }
Chris@2 131
Chris@2 132 /**
Chris@2 133 * @param string $version
Chris@2 134 *
Chris@2 135 * @throws InvalidVersionException
Chris@2 136 */
Chris@2 137 private function ensureVersionStringIsValid($version) {
Chris@2 138 $regex = '/^v?
Chris@2 139 (?<Major>(0|(?:[1-9][0-9]*)))
Chris@2 140 \\.
Chris@2 141 (?<Minor>(0|(?:[1-9][0-9]*)))
Chris@2 142 (\\.
Chris@2 143 (?<Patch>(0|(?:[1-9][0-9]*)))
Chris@2 144 )?
Chris@2 145 (?:
Chris@2 146 -
Chris@2 147 (?<ReleaseType>(?:(dev|beta|b|RC|alpha|a|patch|p)))
Chris@2 148 (?:
Chris@2 149 (?<ReleaseTypeCount>[0-9])
Chris@2 150 )?
Chris@2 151 )?
Chris@2 152 $/x';
Chris@2 153
Chris@2 154 if (preg_match($regex, $version, $matches) !== 1) {
Chris@2 155 throw new InvalidVersionException(
Chris@2 156 sprintf("Version string '%s' does not follow SemVer semantics", $version)
Chris@2 157 );
Chris@2 158 }
Chris@2 159
Chris@2 160 $this->parseVersion($matches);
Chris@2 161 }
Chris@2 162 }