/
githubmirror
/
symfony
Обзор
Документация
Войти
/
githubmirror
/
symfony
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
v6.4.41
.github/get-modified-packages.php
75 строк
2 KB
Fabien Potencier
Merge branch '5.4' into 6.3
26 окт 2023, 21:15
26 окт 2023, 21:15
a9b9e4e
Код
Авторство
О чём код?
<?php /* * Given a list of all packages, find the package that have been modified. */ if (3 > $_SERVER['argc']) { echo "Usage: app-packages modified-files\n"; exit(1); } $allPackages = json_decode($_SERVER['argv'][1], true, 512, \JSON_THROW_ON_ERROR); $modifiedFiles = json_decode($_SERVER['argv'][2], true, 512, \JSON_THROW_ON_ERROR); // Sort to get the longest name first (match bridge not component) usort($allPackages, function($a, $b) { return strlen($b) <=> strlen($a) ?: $a <=> $b; }); function getPackageType(string $packageDir): string { if (preg_match('@Symfony/Bridge/@', $packageDir)) { return 'bridge'; } if (preg_match('@Symfony/Bundle/@', $packageDir)) { return 'bundle'; } if (preg_match('@Symfony/Component/[^/]+/Bridge/@', $packageDir)) { return 'component_bridge'; } if (preg_match('@Symfony/Component/@', $packageDir)) { return 'component'; } if (preg_match('@Symfony/Contracts/@', $packageDir)) { return 'contract'; } if (preg_match('@Symfony/Contracts$@', $packageDir)) { return 'contracts'; } throw new \LogicException(); } $newPackage = []; $modifiedPackages = []; foreach ($modifiedFiles as $file) { foreach ($allPackages as $package) { if (str_starts_with($file, $package)) { $modifiedPackages[$package] = true; if (str_ends_with($file, 'LICENSE')) { /* * There is never a reason to modify the LICENSE file, this diff * must be adding a new package */ $newPackage[$package] = true; } break; } } } $output = []; foreach ($modifiedPackages as $directory => $bool) { $composerData = json_decode(file_get_contents($directory.'/composer.json'), true); $name = $composerData['name'] ?? 'unknown'; $requiresDeprecationContracts = isset($composerData['require']['symfony/deprecation-contracts']); $output[] = ['name' => $name, 'directory' => $directory, 'new' => $newPackage[$directory] ?? false, 'type' => getPackageType($directory), 'requires_deprecation_contracts' => $requiresDeprecationContracts]; } echo json_encode($output);