2021-05-14 21:57:41 +00:00
|
|
|
<?php
|
|
|
|
|
2022-05-29 18:26:31 +00:00
|
|
|
declare(strict_types=1);
|
|
|
|
|
2021-05-14 21:57:41 +00:00
|
|
|
namespace Rector\Core\Application;
|
|
|
|
|
2021-05-19 08:27:31 +00:00
|
|
|
use DateTime;
|
2021-05-19 00:12:47 +00:00
|
|
|
use Rector\Core\Exception\VersionException;
|
2022-05-29 18:26:31 +00:00
|
|
|
use Symfony\Component\Console\Command\Command;
|
|
|
|
use Symfony\Component\Process\Process;
|
|
|
|
|
2021-05-14 21:57:41 +00:00
|
|
|
/**
|
2021-05-19 00:12:47 +00:00
|
|
|
* Inspired by https://github.com/composer/composer/blob/master/src/Composer/Composer.php
|
|
|
|
* See https://github.com/composer/composer/blob/6587715d0f8cae0cd39073b3bc5f018d0e6b84fe/src/Composer/Compiler.php#L208
|
2022-05-29 18:55:20 +00:00
|
|
|
*
|
|
|
|
* @see \Rector\Core\Tests\Application\VersionResolverTest
|
2021-05-14 21:57:41 +00:00
|
|
|
*/
|
|
|
|
final class VersionResolver
|
|
|
|
{
|
2021-05-19 00:12:47 +00:00
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
2022-05-29 18:26:31 +00:00
|
|
|
public const PACKAGE_VERSION = '@package_version@';
|
|
|
|
|
2021-05-19 00:12:47 +00:00
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
2022-05-29 18:26:31 +00:00
|
|
|
public const RELEASE_DATE = '@release_date@';
|
|
|
|
|
2022-04-15 07:29:32 +00:00
|
|
|
/**
|
|
|
|
* @var string
|
|
|
|
*/
|
|
|
|
private const GIT = 'git';
|
2022-05-29 18:26:31 +00:00
|
|
|
|
|
|
|
public static function resolvePackageVersion(): string
|
2021-05-14 21:57:41 +00:00
|
|
|
{
|
2022-05-29 18:55:20 +00:00
|
|
|
// resolve current tag
|
|
|
|
exec('git tag --points-at', $tagExecOutput, $tagExecResultCode);
|
|
|
|
|
|
|
|
if ($tagExecResultCode !== Command::SUCCESS) {
|
2022-05-29 18:26:31 +00:00
|
|
|
throw new VersionException(
|
2022-05-29 18:55:20 +00:00
|
|
|
'Ensure to run compile from composer git repository clone and that git binary is available.'
|
2022-05-29 18:26:31 +00:00
|
|
|
);
|
2022-04-14 21:57:42 +00:00
|
|
|
}
|
2022-05-29 18:26:31 +00:00
|
|
|
|
2022-05-29 18:55:20 +00:00
|
|
|
if ($tagExecOutput !== []) {
|
|
|
|
$tag = $tagExecOutput[0];
|
|
|
|
if ($tag !== '') {
|
|
|
|
return $tag;
|
|
|
|
}
|
2022-04-14 21:57:42 +00:00
|
|
|
}
|
2022-05-29 18:26:31 +00:00
|
|
|
|
2022-05-29 18:55:20 +00:00
|
|
|
exec('git log --pretty="%H" -n1 HEAD', $commitHashExecOutput, $commitHashResultCode);
|
|
|
|
|
|
|
|
if ($commitHashResultCode !== Command::SUCCESS) {
|
2022-05-29 18:26:31 +00:00
|
|
|
throw new VersionException(
|
2022-05-29 18:55:20 +00:00
|
|
|
'Ensure to run compile from composer git repository clone and that git binary is available.'
|
2022-05-29 18:26:31 +00:00
|
|
|
);
|
2021-05-14 21:57:41 +00:00
|
|
|
}
|
2022-05-29 18:26:31 +00:00
|
|
|
|
2022-05-29 18:55:20 +00:00
|
|
|
$version = trim($commitHashExecOutput[0]);
|
2022-05-29 18:26:31 +00:00
|
|
|
return trim($version, '"');
|
2021-05-14 21:57:41 +00:00
|
|
|
}
|
2022-05-29 18:26:31 +00:00
|
|
|
|
|
|
|
public static function resolverReleaseDateTime(): DateTime
|
2021-05-14 21:57:41 +00:00
|
|
|
{
|
2022-05-29 18:26:31 +00:00
|
|
|
$process = new Process([self::GIT, 'log', '-n1', '--pretty=%ci', 'HEAD'], __DIR__);
|
|
|
|
if ($process->run() !== Command::SUCCESS) {
|
|
|
|
throw new VersionException(
|
|
|
|
'You must ensure to run compile from composer git repository clone and that git binary is available.'
|
|
|
|
);
|
2021-05-19 00:12:47 +00:00
|
|
|
}
|
2022-05-29 18:26:31 +00:00
|
|
|
|
|
|
|
return new DateTime(trim($process->getOutput()));
|
2021-05-14 21:57:41 +00:00
|
|
|
}
|
|
|
|
}
|