зеркало из https://github.com/mozilla/gecko-dev.git
Patch from bug 311920.
This commit is contained in:
Родитель
b717e84a10
Коммит
973d61d599
|
@ -0,0 +1,148 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* Version class. Represents version of app/addon in FVF
|
||||||
|
* "major[.minor[.release[.build+]]]"
|
||||||
|
* @package amo
|
||||||
|
* @subpackage lib
|
||||||
|
* @link http://www.mozilla.org/projects/firefox/extensions/update.html
|
||||||
|
*/
|
||||||
|
class Version
|
||||||
|
{
|
||||||
|
var $major;
|
||||||
|
var $minor;
|
||||||
|
var $release;
|
||||||
|
var $build;
|
||||||
|
var $plus;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Class constructor.
|
||||||
|
*
|
||||||
|
* @param string $aVersionString FVF version conformant string
|
||||||
|
*/
|
||||||
|
function Version($aVersionString=NULL) {
|
||||||
|
if (isset($aVersionString)) {
|
||||||
|
$this->parseString($aVersionString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse a version string into useful chunks.
|
||||||
|
*
|
||||||
|
* @param string $aVersionString FVF conformant version string
|
||||||
|
*/
|
||||||
|
function parseString($aVersionString) {
|
||||||
|
assert(strlen($aVersionString));
|
||||||
|
|
||||||
|
// in case we're being re-used
|
||||||
|
$this->major = NULL;
|
||||||
|
$this->minor = NULL;
|
||||||
|
$this->release = NULL;
|
||||||
|
$this->build = NULL;
|
||||||
|
$this->plus = NULL;
|
||||||
|
|
||||||
|
// holder for the chunks, to be filled by preg_match
|
||||||
|
$matches = array();
|
||||||
|
|
||||||
|
if (preg_match('/^(\d+)(?:\.(\d+))?(?:\.(\d+))?(?:\.(\d+)([a-zA-Z0-9]+)?)?$/', $aVersionString, $matches)) {
|
||||||
|
|
||||||
|
if (isset($matches[1])) {
|
||||||
|
$this->major = intval($matches[1]);
|
||||||
|
|
||||||
|
if (isset($matches[2])) {
|
||||||
|
$this->minor = intval($matches[2]);
|
||||||
|
|
||||||
|
if (isset($matches[3])) {
|
||||||
|
$this->release = intval($matches[3]);
|
||||||
|
|
||||||
|
if (isset($matches[4])) {
|
||||||
|
$this->build = intval($matches[4]);
|
||||||
|
|
||||||
|
if (isset($matches[5])) {
|
||||||
|
$this->plus = $matches[5];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
assert($aVersionString == $this->toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this a valid version
|
||||||
|
*
|
||||||
|
* @return boolean TRUE if the instance represents a valid version
|
||||||
|
* FALSE otherwise
|
||||||
|
*
|
||||||
|
* @todo this may or may not be required. it simply relies on the
|
||||||
|
* fact that major is not optional. any valid string would
|
||||||
|
* have been parsed, and major set
|
||||||
|
*/
|
||||||
|
function isValid() {
|
||||||
|
return isset($this->major);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Static method to compare one Version to another Version
|
||||||
|
*
|
||||||
|
* @param a a Version
|
||||||
|
* @param a a Version
|
||||||
|
* @returns < 0 if a < b
|
||||||
|
* = 0 if a == b
|
||||||
|
* > 0 if a > b
|
||||||
|
*/
|
||||||
|
function compare($a, $b) {
|
||||||
|
assert(is_a($a, 'Version'));
|
||||||
|
assert(is_a($b, 'Version'));
|
||||||
|
assert($a->isValid());
|
||||||
|
assert($b->isValid());
|
||||||
|
|
||||||
|
if ($a->major != $b->major) {
|
||||||
|
return $a->major - $b->major;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($a->minor != $b->minor) {
|
||||||
|
return $a->minor - $b->minor;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($a->release != $b->release) {
|
||||||
|
return $a->release - $b->release;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($a->build != $b->build) {
|
||||||
|
return $a->build - $b->build;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Produce a string version
|
||||||
|
*
|
||||||
|
* @returns string the version encoded in FVF conformant string
|
||||||
|
*/
|
||||||
|
function toString() {
|
||||||
|
$chunks = array($this->major);
|
||||||
|
|
||||||
|
if (isset($this->minor)) {
|
||||||
|
$chunks[] = $this->minor;
|
||||||
|
|
||||||
|
if (isset($this->release)) {
|
||||||
|
$chunks[] = $this->release;
|
||||||
|
|
||||||
|
if (isset($this->build)) {
|
||||||
|
|
||||||
|
if (isset($this->plus)) {
|
||||||
|
$chunks[] = $this->build . $this->plus;
|
||||||
|
} else {
|
||||||
|
$chunks[] = $this->build;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return implode('.', $chunks);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
Загрузка…
Ссылка в новой задаче