170 lines
5.3 KiB
PHP
170 lines
5.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
*
|
|
* This file is part of phpFastCache.
|
|
*
|
|
* @license MIT License (MIT)
|
|
*
|
|
* For full copyright and license information, please see the docs/CREDITS.txt file.
|
|
*
|
|
* @author Khoa Bui (khoaofgod) <khoaofgod@gmail.com> https://www.phpfastcache.com
|
|
* @author Georges.L (Geolim4) <contact@geolim4.com>
|
|
*
|
|
*/
|
|
declare(strict_types=1);
|
|
|
|
namespace Phpfastcache;
|
|
|
|
use Phpfastcache\Exceptions\PhpfastcacheIOException;
|
|
use Phpfastcache\Exceptions\PhpfastcacheLogicException;
|
|
|
|
/**
|
|
* Class Api
|
|
* @package phpFastCache
|
|
*/
|
|
class Api
|
|
{
|
|
protected static $version = '3.0.0';
|
|
|
|
/**
|
|
* Api constructor.
|
|
*/
|
|
final protected function __construct()
|
|
{
|
|
// The Api is not meant to be instantiated
|
|
}
|
|
|
|
/**
|
|
* This method will returns the current
|
|
* API version, the API version will be
|
|
* updated by following the semantic versioning
|
|
* based on changes of:
|
|
* - ExtendedCacheItemPoolInterface
|
|
* - ExtendedCacheItemInterface
|
|
* - AggregatablePoolInterface
|
|
* - AggregatorInterface
|
|
* - ClusterPoolInterface
|
|
* - EventManagerInterface
|
|
*
|
|
* @see https://semver.org/
|
|
* @return string
|
|
*/
|
|
public static function getVersion(): string
|
|
{
|
|
return self::$version;
|
|
}
|
|
|
|
/**
|
|
* @param bool $fallbackOnChangelog
|
|
* @param bool $cacheable
|
|
* @return string
|
|
* @throws PhpfastcacheLogicException
|
|
* @throws PhpfastcacheIOException
|
|
*/
|
|
public static function getPhpFastCacheVersion(bool $fallbackOnChangelog = true, bool $cacheable = true): string
|
|
{
|
|
/**
|
|
* Cache the version statically to improve
|
|
* performances on multiple calls
|
|
*/
|
|
static $version;
|
|
|
|
if ($version && $cacheable) {
|
|
return $version;
|
|
}
|
|
|
|
if (\function_exists('shell_exec')) {
|
|
$command = 'git -C "' . __DIR__ . '" describe --abbrev=0 --tags';
|
|
$stdout = \shell_exec($command);
|
|
if (\is_string($stdout)) {
|
|
$version = trim($stdout);
|
|
return $version;
|
|
}
|
|
if (!$fallbackOnChangelog) {
|
|
throw new PhpfastcacheLogicException('The git command used to retrieve the PhpFastCache version has failed.');
|
|
}
|
|
}
|
|
|
|
if (!$fallbackOnChangelog) {
|
|
throw new PhpfastcacheLogicException('shell_exec is disabled therefore the PhpFastCache version cannot be retrieved.');
|
|
}
|
|
|
|
$changelogFilename = __DIR__ . '/../../CHANGELOG.md';
|
|
if (\file_exists($changelogFilename)) {
|
|
$versionPrefix = '## ';
|
|
$changelog = \explode("\n", self::getPhpFastCacheChangelog());
|
|
foreach ($changelog as $line) {
|
|
if (\strpos($line, $versionPrefix) === 0) {
|
|
$version = \trim(\str_replace($versionPrefix, '', $line));
|
|
return $version;
|
|
}
|
|
}
|
|
throw new PhpfastcacheLogicException('Unable to retrieve the PhpFastCache version through the CHANGELOG.md as no valid string were found in it.');
|
|
}
|
|
throw new PhpfastcacheLogicException(
|
|
'shell_exec being disabled we attempted to retrieve the PhpFastCache version through the CHANGELOG.md file but it is not readable or has been removed.'
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return the PhpFastCache changelog, as a string.
|
|
* @return string
|
|
* @throws PhpfastcacheLogicException
|
|
* @throws PhpfastcacheIOException
|
|
*/
|
|
public static function getPhpFastCacheChangelog(): string
|
|
{
|
|
$changelogFilename = __DIR__ . '/../../CHANGELOG.md';
|
|
if (\file_exists($changelogFilename)) {
|
|
$string = \str_replace(["\r\n", "\r"], "\n", \trim(\file_get_contents($changelogFilename)));
|
|
if ($string) {
|
|
return $string;
|
|
}
|
|
throw new PhpfastcacheLogicException('Unable to retrieve the PhpFastCache changelog as it seems to be empty.');
|
|
}
|
|
throw new PhpfastcacheIOException('The CHANGELOG.md file is not readable or has been removed.');
|
|
}
|
|
|
|
/**
|
|
* @param bool $cacheable
|
|
* @return string
|
|
*/
|
|
public static function getPhpFastCacheGitHeadHash(bool $cacheable = true): string
|
|
{
|
|
static $hash;
|
|
|
|
if ($hash && $cacheable) {
|
|
return $hash;
|
|
}
|
|
|
|
if (\function_exists('shell_exec')) {
|
|
$stdout = \shell_exec('git rev-parse --short HEAD');
|
|
if (\is_string($stdout)) {
|
|
$hash = \trim($stdout);
|
|
return "#{$hash}";
|
|
}
|
|
}
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* Return the API changelog, as a string.
|
|
* @return string
|
|
* @throws PhpfastcacheLogicException
|
|
* @throws PhpfastcacheIOException
|
|
*/
|
|
public static function getChangelog(): string
|
|
{
|
|
$changelogFilename = __DIR__ . '/../../CHANGELOG_API.md';
|
|
if (\file_exists($changelogFilename)) {
|
|
$string = \str_replace(["\r\n", "\r"], "\n", \trim(\file_get_contents($changelogFilename)));
|
|
if ($string) {
|
|
return $string;
|
|
}
|
|
throw new PhpfastcacheLogicException('Unable to retrieve the PhpFastCache API changelog as it seems to be empty.');
|
|
}
|
|
throw new PhpfastcacheIOException('The CHANGELOG_API.md file is not readable or has been removed.');
|
|
}
|
|
}
|