Change VERSION's format

refs #9247
This commit is contained in:
Alexander A. Klimov 2015-06-03 15:28:36 +02:00
parent 757e993871
commit 7577b37cdb
3 changed files with 21 additions and 84 deletions

View File

@ -1,2 +1 @@
GitCommitID: $Format:%H%d$ $Format:%H%d %ci$
GitCommitDate: $Format:%ci$

View File

@ -8,7 +8,7 @@
'gitCommitID' => $this->translate('Git commit ID: %s'), 'gitCommitID' => $this->translate('Git commit ID: %s'),
'gitCommitDate' => $this->translate('Git commit date: %s') 'gitCommitDate' => $this->translate('Git commit date: %s')
) as $key => $label) { ) as $key => $label) {
if (null !== ($value = $version[$key])) { if (array_key_exists($key, $version) && null !== ($value = $version[$key])) {
$versionInfo[] = sprintf($label, htmlspecialchars($value)); $versionInfo[] = sprintf($label, htmlspecialchars($value));
} }
} }

View File

@ -15,91 +15,29 @@ class Version
*/ */
public static function get() public static function get()
{ {
$versionInfo = array( if (false === ($appVersion = @file_get_contents(
'appVersion' => null, Icinga::app()->getApplicationDir() . DIRECTORY_SEPARATOR . 'VERSION'
'gitCommitID' => null,
'gitCommitDate' => null
);
if (false !== ($appVersion = @file(
Icinga::app()->getApplicationDir() . DIRECTORY_SEPARATOR . 'VERSION',
FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES
))) { ))) {
foreach ($appVersion as $av) { return false;
$matches = array();
if (false === ($res = preg_match(
'/(?<!.)\s*(.+?)\s*:\s*(.+?)\s*(?!.)/ms', $av, $matches
))) {
throw new IcingaException('Failed at preg_match()');
}
if ($res === 0) {
continue;
}
switch ($matches[1]) {
case 'GitCommitID':
if ($versionInfo['gitCommitID'] !== null) {
break;
}
$matches2 = array();
if (false === ($res = preg_match(
'/(?<!.)(.+?)(?:\s*\(\s*(.+?)\s*\))?(?!.)/ms',
$matches[2],
$matches2
))) {
throw new IcingaException('Failed at preg_match()');
}
if ($res === 0) {
break;
}
$versionInfo['gitCommitID'] = $matches2[1];
if (! isset($matches2[2])) {
break;
}
foreach (preg_split(
'/\s*,\s*/', $matches2[2], -1, PREG_SPLIT_NO_EMPTY
) as $refName) {
$matches3 = array();
if (false === ($res = preg_match(
'/(?<!.)tag\s*:\s*v(.+?)(?!.)/ms',
$refName,
$matches3
))) {
throw new IcingaException('Failed at preg_match()');
}
if ($res === 1) {
$versionInfo['appVersion'] = $matches3[1];
break;
}
}
break;
case 'GitCommitDate':
if ($versionInfo['gitCommitDate'] !== null) {
break;
}
$matches2 = array();
if (false === ($res = preg_match(
'/(?<!.)(\S+)/ms', $matches[2], $matches2
))) {
throw new IcingaException('Failed at preg_match()');
}
if ($res === 1) {
$versionInfo['gitCommitDate'] = $matches2[1];
}
}
}
} }
foreach (array('gitCommitID', 'gitCommitDate') as $key) { $matches = array();
if ($versionInfo[$key] === null) { if (false === ($res = preg_match(
return false; '/(?<!.)\s*(?P<gitCommitID>\w+)(?:\s*\(.*?(?:(?<=[\(,])\s*tag\s*:\s*v(?P<appVersion>.+?)\s*(?=[\),]).*?)?\))?\s*(?P<gitCommitDate>\S+)/ms',
} $appVersion,
$matches
))) {
throw new IcingaException('Failed at preg_match()');
}
if ($res === 0) {
return false;
} }
return $versionInfo; foreach ($matches as $key => $value) {
if (is_int($key) || $value === '') {
unset($matches[$key]);
}
}
return $matches;
} }
} }