mirror of
https://gitee.com/ulthon/ulthon_admin.git
synced 2026-07-01 15:32:48 +08:00
feat(update): composer.json 智能对比输出具体命令
This commit is contained in:
@@ -341,15 +341,8 @@ class AdminUpdateServiceBase
|
||||
$output->writeln("统计: 新增 {$add_count}, 删除 {$delete_count}, 更新 {$update_count}");
|
||||
}
|
||||
|
||||
// 检测now的composer依赖和最新的composer依赖
|
||||
$last_composer_json = file_get_contents($last_version_dir . '/composer.json');
|
||||
|
||||
$output->writeln($last_composer_json);
|
||||
$output->writeln('请参考以上最新composer文件调整您的依赖');
|
||||
|
||||
// 分析出最新需要的但now没有的
|
||||
|
||||
// 为用户整理出要手动调整的composer命令
|
||||
// 对比 composer.json 依赖差异
|
||||
$this->compareComposerRequire($current_version_dir, $last_version_dir, $output);
|
||||
|
||||
$output->writeln('更新完成');
|
||||
// 更新完成
|
||||
@@ -486,4 +479,65 @@ class AdminUpdateServiceBase
|
||||
}
|
||||
closedir($handle);
|
||||
}
|
||||
|
||||
protected function compareComposerRequire(string $current_dir, string $last_dir, Output $output): void
|
||||
{
|
||||
$current_composer_path = $current_dir . '/composer.json';
|
||||
$last_composer_path = $last_dir . '/composer.json';
|
||||
|
||||
if (!file_exists($last_composer_path)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$last_composer = json_decode(file_get_contents($last_composer_path), true);
|
||||
$current_composer = file_exists($current_composer_path)
|
||||
? json_decode(file_get_contents($current_composer_path), true)
|
||||
: [];
|
||||
|
||||
if (!$last_composer || !is_array($last_composer)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$last_require = $last_composer['require'] ?? [];
|
||||
$current_require = ($current_composer && is_array($current_composer))
|
||||
? ($current_composer['require'] ?? [])
|
||||
: [];
|
||||
|
||||
if (empty($last_require) && empty($current_require)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$output->writeln('');
|
||||
$output->writeln('Composer 依赖变更:');
|
||||
|
||||
$has_changes = false;
|
||||
|
||||
// 新增的依赖
|
||||
$new_packages = array_diff_key($last_require, $current_require);
|
||||
foreach ($new_packages as $package => $version) {
|
||||
$output->writeln(" composer require {$package}:{$version}");
|
||||
$has_changes = true;
|
||||
}
|
||||
|
||||
// 删除的依赖
|
||||
$removed_packages = array_diff_key($current_require, $last_require);
|
||||
foreach ($removed_packages as $package => $version) {
|
||||
$output->writeln(" composer remove {$package}");
|
||||
$has_changes = true;
|
||||
}
|
||||
|
||||
// 版本变更的依赖
|
||||
$common_packages = array_intersect_key($last_require, $current_require);
|
||||
foreach ($common_packages as $package => $last_version) {
|
||||
$current_version = $current_require[$package];
|
||||
if ($current_version !== $last_version) {
|
||||
$output->writeln(" composer require {$package}:{$last_version} (版本变更, 旧版: {$current_version})");
|
||||
$has_changes = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$has_changes) {
|
||||
$output->writeln(' composer 依赖无变化');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user