2021-05-14 21:57:41 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
declare (strict_types=1);
|
|
|
|
namespace Rector\Core\Application;
|
|
|
|
|
2021-05-18 13:45:09 +00:00
|
|
|
use RectorPrefix20210518\Composer\InstalledVersions;
|
|
|
|
use RectorPrefix20210518\Nette\Utils\Strings;
|
2021-05-14 21:57:41 +00:00
|
|
|
/**
|
|
|
|
* Inspired by https://github.com/symplify/symplify/pull/3179/files
|
|
|
|
* Local resolver is needed, because PHPStan is unprefixing its InstalledVersion classes and the API is changing way too often.
|
|
|
|
* This makes sure it works without dependency on external conditions.
|
|
|
|
*/
|
|
|
|
final class VersionResolver
|
|
|
|
{
|
|
|
|
public function resolve() : string
|
|
|
|
{
|
|
|
|
// give local IntalledVersions a priority above anything else
|
|
|
|
$intalledVersionsFilepath = __DIR__ . '/../../vendor/composer/InstalledVersions.php';
|
|
|
|
if (\file_exists($intalledVersionsFilepath)) {
|
|
|
|
require_once $intalledVersionsFilepath;
|
|
|
|
}
|
2021-05-18 13:45:09 +00:00
|
|
|
$installedRawData = \RectorPrefix20210518\Composer\InstalledVersions::getRawData();
|
2021-05-14 21:57:41 +00:00
|
|
|
$rectorPackageData = $this->resolvePackageData($installedRawData);
|
|
|
|
if ($rectorPackageData === null) {
|
|
|
|
return 'Unknown';
|
|
|
|
}
|
|
|
|
if (isset($rectorPackageData['replaced'])) {
|
|
|
|
return 'replaced@' . $rectorPackageData['replaced'][0];
|
|
|
|
}
|
|
|
|
if ($rectorPackageData['version'] === 'dev-main') {
|
|
|
|
$reference = $rectorPackageData['reference'] ?? null;
|
|
|
|
if ($reference === null) {
|
|
|
|
return 'dev-main';
|
|
|
|
}
|
2021-05-18 13:45:09 +00:00
|
|
|
return 'dev-main@' . \RectorPrefix20210518\Nette\Utils\Strings::substring($rectorPackageData['reference'], 0, 7);
|
2021-05-14 21:57:41 +00:00
|
|
|
}
|
|
|
|
return $rectorPackageData['version'];
|
|
|
|
}
|
|
|
|
/**
|
|
|
|
* @param mixed[] $installedRawData
|
|
|
|
*/
|
|
|
|
private function resolvePackageData(array $installedRawData) : ?array
|
|
|
|
{
|
|
|
|
return $installedRawData['versions']['rector/rector-src'] ?? $installedRawData['versions']['rector/rector'] ?? $installedRawData['root'] ?? null;
|
|
|
|
}
|
|
|
|
}
|