1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
declare(strict_types=1); |
4
|
|
|
|
5
|
|
|
namespace PhpMyAdmin\Command; |
6
|
|
|
|
7
|
|
|
use RangeException; |
8
|
|
|
use Symfony\Component\Console\Attribute\AsCommand; |
9
|
|
|
use Symfony\Component\Console\Command\Command; |
|
|
|
|
10
|
|
|
use Symfony\Component\Console\Input\InputArgument; |
11
|
|
|
use Symfony\Component\Console\Input\InputInterface; |
12
|
|
|
use Symfony\Component\Console\Output\OutputInterface; |
13
|
|
|
|
14
|
|
|
use function file_put_contents; |
15
|
|
|
use function preg_match; |
16
|
|
|
use function sprintf; |
17
|
|
|
|
18
|
|
|
#[AsCommand(name: 'set-version', description: 'Sets the version number.')] |
19
|
|
|
final class SetVersionCommand extends Command |
20
|
|
|
{ |
21
|
|
|
private static string $generatedClassTemplate = <<<'PHP' |
22
|
|
|
<?php |
23
|
|
|
|
24
|
|
|
declare(strict_types=1); |
25
|
|
|
|
26
|
|
|
namespace PhpMyAdmin; |
27
|
|
|
|
28
|
|
|
use const VERSION_SUFFIX; |
29
|
|
|
|
30
|
|
|
/** |
31
|
|
|
* This class is generated by scripts/console. |
32
|
|
|
* |
33
|
|
|
* @see \PhpMyAdmin\Command\SetVersionCommand |
34
|
|
|
*/ |
35
|
|
|
final class Version |
36
|
|
|
{ |
37
|
|
|
// The VERSION_SUFFIX constant is defined at libraries/constants.php |
38
|
|
|
public const VERSION = '%1$u.%2$u.%3$u%4$s' . VERSION_SUFFIX; |
39
|
|
|
public const SERIES = '%1$u.%2$u'; |
40
|
|
|
public const MAJOR = %1$u; |
41
|
|
|
public const MINOR = %2$u; |
42
|
|
|
public const PATCH = %3$u; |
43
|
|
|
public const ID = %1$u%2$02u%3$02u; |
44
|
|
|
public const PRE_RELEASE_NAME = '%5$s'; |
45
|
|
|
public const IS_DEV = %6$s; |
46
|
|
|
} |
47
|
|
|
|
48
|
|
|
PHP; |
49
|
|
|
|
50
|
96 |
|
protected function configure(): void |
51
|
|
|
{ |
52
|
96 |
|
$this->setHelp('This command generates the PhpMyAdmin\Version class based on the version number provided.'); |
53
|
96 |
|
$this->addArgument('version', InputArgument::REQUIRED, 'The version number'); |
54
|
|
|
} |
55
|
|
|
|
56
|
|
|
protected function execute(InputInterface $input, OutputInterface $output): int |
57
|
|
|
{ |
58
|
|
|
/** @var string $version */ |
59
|
|
|
$version = $input->getArgument('version'); |
60
|
|
|
|
61
|
|
|
$generatedClass = $this->getGeneratedClass($version); |
62
|
|
|
|
63
|
|
|
if (! $this->writeGeneratedClassFile($generatedClass)) { |
64
|
|
|
return Command::FAILURE; |
65
|
|
|
} |
66
|
|
|
|
67
|
|
|
$output->writeln('PhpMyAdmin\Version class successfully generated!'); |
68
|
|
|
|
69
|
|
|
return Command::SUCCESS; |
70
|
|
|
} |
71
|
|
|
|
72
|
96 |
|
private function getGeneratedClass(string $version): string |
73
|
|
|
{ |
74
|
|
|
// Do not allow any major below 5 |
75
|
96 |
|
$return = preg_match('/^([5-9]+)\.(\d{1,2})\.(\d{1,2})(-([a-z0-9]+))?$/', $version, $matches); |
76
|
96 |
|
if ($return === false || $return === 0) { |
77
|
64 |
|
throw new RangeException('The version number is in the wrong format: ' . $version); |
78
|
|
|
} |
79
|
|
|
|
80
|
32 |
|
return sprintf( |
81
|
32 |
|
self::$generatedClassTemplate, |
82
|
32 |
|
$matches[1], |
83
|
32 |
|
$matches[2], |
84
|
32 |
|
$matches[3], |
85
|
32 |
|
$matches[4] ?? '', |
86
|
32 |
|
$matches[5] ?? '', |
87
|
32 |
|
($matches[5] ?? '') === 'dev' ? 'true' : 'false', |
88
|
32 |
|
); |
89
|
|
|
} |
90
|
|
|
|
91
|
|
|
private function writeGeneratedClassFile(string $generatedClass): bool |
92
|
|
|
{ |
93
|
|
|
$result = file_put_contents(ROOT_PATH . 'libraries/classes/Version.php', $generatedClass); |
94
|
|
|
|
95
|
|
|
return $result !== false; |
96
|
|
|
} |
97
|
|
|
} |
98
|
|
|
|
The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g.
excluded_paths: ["lib/*"]
, you can move it to the dependency path list as follows:For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths