Files
wwjcloud-nest-v1/tools-v1/java-tools/incremental-update-cli.js

186 lines
4.9 KiB
JavaScript
Raw Normal View History

#!/usr/bin/env node
const IncrementalUpdater = require('./incremental-updater');
/**
* 🔄 增量更新命令行工具
* 提供独立的增量更新功能入口
*/
function showHelp() {
console.log(`
🔄 增量更新工具 - WWJCloud PHP to NestJS
用法:
node incremental-update-cli.js [选项]
选项:
--help, -h 显示帮助信息
--dry-run 干运行模式不实际修改文件
--verbose, -v 详细输出模式
--force 强制更新忽略冲突警告
--backup 创建备份默认启用
--no-backup 不创建备份
环境变量:
DRY_RUN=true 启用干运行模式
VERBOSE=true 启用详细输出
FORCE=true 启用强制模式
示例:
# 基本增量更新
node incremental-update-cli.js
# 干运行模式查看将要进行的更改
node incremental-update-cli.js --dry-run
# 详细输出模式
node incremental-update-cli.js --verbose
# 强制更新模式
node incremental-update-cli.js --force
# 使用环境变量
DRY_RUN=true node incremental-update-cli.js
功能特性:
智能变更检测 - 基于文件哈希和时间戳
用户代码保护 - 自动检测和保护用户自定义代码
三路合并算法 - 智能合并PHP变更和用户修改
冲突处理机制 - 自动标记和处理合并冲突
备份恢复功能 - 自动创建备份支持快速恢复
增量状态跟踪 - 记录更新历史和文件状态
详细更新报告 - 提供完整的更新统计和结果
注意事项:
- 首次运行将建立基线状态
- 建议在重要更新前手动备份
- 冲突文件需要手动解决
- 支持回滚到任意历史版本
`);
}
async function main() {
const args = process.argv.slice(2);
// 处理帮助选项
if (args.includes('--help') || args.includes('-h')) {
showHelp();
return;
}
// 解析命令行参数
const options = {
dryRun: args.includes('--dry-run') || process.env.DRY_RUN === 'true',
verbose: args.includes('--verbose') || args.includes('-v') || process.env.VERBOSE === 'true',
force: args.includes('--force') || process.env.FORCE === 'true',
backup: !args.includes('--no-backup')
};
console.log('🔄 WWJCloud 增量更新工具');
console.log('==================================================');
if (options.dryRun) {
console.log('🔍 运行模式: 干运行 (不会实际修改文件)');
}
if (options.verbose) {
console.log('📝 输出模式: 详细输出');
}
if (options.force) {
console.log('⚡ 更新模式: 强制更新');
}
if (!options.backup) {
console.log('⚠️ 备份模式: 已禁用备份');
}
console.log('==================================================\n');
try {
// 设置环境变量
if (options.dryRun) {
process.env.DRY_RUN = 'true';
}
if (options.verbose) {
process.env.VERBOSE = 'true';
}
if (options.force) {
process.env.FORCE = 'true';
}
if (!options.backup) {
process.env.NO_BACKUP = 'true';
}
// 创建并运行增量更新器
const updater = new IncrementalUpdater();
const success = await updater.run();
if (success) {
console.log('\n✅ 增量更新成功完成!');
if (options.dryRun) {
console.log('\n💡 提示: 这是干运行模式,没有实际修改文件');
console.log(' 要执行实际更新,请移除 --dry-run 参数');
}
process.exit(0);
} else {
console.log('\n❌ 增量更新失败');
process.exit(1);
}
} catch (error) {
console.error('\n💥 增量更新过程中发生错误:');
console.error(error.message);
if (options.verbose) {
console.error('\n📋 详细错误信息:');
console.error(error.stack);
}
console.log('\n🔧 故障排除建议:');
console.log('1. 检查PHP项目路径是否正确');
console.log('2. 检查NestJS项目路径是否正确');
console.log('3. 确保有足够的文件系统权限');
console.log('4. 尝试使用 --dry-run 模式查看详细信息');
console.log('5. 查看备份目录是否有可恢复的版本');
process.exit(1);
}
}
// 处理未捕获的异常
process.on('unhandledRejection', (reason, promise) => {
console.error('💥 未处理的Promise拒绝:', reason);
process.exit(1);
});
process.on('uncaughtException', (error) => {
console.error('💥 未捕获的异常:', error);
process.exit(1);
});
// 处理中断信号
process.on('SIGINT', () => {
console.log('\n\n⏹ 用户中断操作');
console.log('增量更新已停止');
process.exit(0);
});
process.on('SIGTERM', () => {
console.log('\n\n⏹ 收到终止信号');
console.log('增量更新已停止');
process.exit(0);
});
// 运行主程序
if (require.main === module) {
main();
}
module.exports = { main, showHelp };