feat: 优化更新流程 - 添加保留上传工具选项

问题背景:
- 之前每次更新都会删除并重新下载上传工具(43MB)
- 重新下载耗时长(1-2分钟),且可能因网络问题失败
- 但如果不删除,万一上传工具有更新也无法获取

优化方案:
在更新流程中添加用户选择:

更新上传工具逻辑:
1. 检测是否已存在上传工具可执行文件
2. 验证文件大小(>30MB为有效)
3. 如果存在有效工具,显示选择菜单:

   ╔════════════════════════════════════════════════════════════╗
   ║                   上传工具更新选项                         ║
   ╠════════════════════════════════════════════════════════════╣
   ║  1) 保留现有上传工具(推荐,节省下载时间)                ║
   ║  2) 删除并重新下载(如果工具有更新)                      ║
   ╚════════════════════════════════════════════════════════════╝

选项1 - 保留现有工具:
- 创建临时目录备份dist/玩玩云上传工具.exe
- 更新upload-tool目录的脚本文件
- 恢复备份的可执行文件
- 优点: 节省1-2分钟下载时间,避免网络问题

选项2 - 重新下载:
- 删除整个upload-tool目录
- 在后续步骤重新下载最新工具
- 适用: 官方发布了新版本上传工具

默认行为:
- 默认选项1(保留),直接回车即可
- 如果现有文件大小异常(<30MB),自动重新下载
- 如果不存在上传工具,直接复制新目录

技术改动:
- install.sh update_pull_latest_code() 函数
- 添加用户交互选择逻辑
- 添加文件大小验证
- 添加备份和恢复逻辑

使用建议:
- 日常更新: 选择"1"保留,节省时间
- 重大版本更新: 选择"2"重新下载,确保最新

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
WanWanYun
2025-11-16 00:11:17 +08:00
parent f64f86cd78
commit e10ff04166

View File

@@ -3328,10 +3328,52 @@ update_pull_latest_code() {
cp -r "/tmp/${PROJECT_NAME}-update/frontend" "${PROJECT_DIR}/" cp -r "/tmp/${PROJECT_NAME}-update/frontend" "${PROJECT_DIR}/"
fi fi
# 更新上传工具 # 更新上传工具 - 询问用户是否保留
if [[ -d "/tmp/${PROJECT_NAME}-update/upload-tool" ]]; then if [[ -d "/tmp/${PROJECT_NAME}-update/upload-tool" ]]; then
# 检查是否已存在上传工具可执行文件
if [[ -f "${PROJECT_DIR}/upload-tool/dist/玩玩云上传工具.exe" ]]; then
FILE_SIZE=$(stat -f%z "${PROJECT_DIR}/upload-tool/dist/玩玩云上传工具.exe" 2>/dev/null || stat -c%s "${PROJECT_DIR}/upload-tool/dist/玩玩云上传工具.exe" 2>/dev/null || echo "0")
if [[ $FILE_SIZE -gt 30000000 ]]; then
FILE_SIZE_MB=$(( FILE_SIZE / 1024 / 1024 ))
echo ""
print_info "检测到已存在上传工具(${FILE_SIZE_MB}MB"
echo ""
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ 上传工具更新选项 ║"
echo "╠════════════════════════════════════════════════════════════╣"
echo "║ 1) 保留现有上传工具(推荐,节省下载时间) ║"
echo "║ 2) 删除并重新下载(如果工具有更新) ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
read -p "▶ 请选择 [1/2, 默认:1]: " KEEP_UPLOAD_TOOL
KEEP_UPLOAD_TOOL=${KEEP_UPLOAD_TOOL:-1}
if [[ "$KEEP_UPLOAD_TOOL" == "1" ]]; then
print_success "保留现有上传工具"
# 只更新upload-tool目录的脚本文件保留dist目录
mkdir -p "${PROJECT_DIR}/upload-tool-temp"
cp -r "${PROJECT_DIR}/upload-tool/dist" "${PROJECT_DIR}/upload-tool-temp/"
rm -rf "${PROJECT_DIR}/upload-tool" rm -rf "${PROJECT_DIR}/upload-tool"
cp -r "/tmp/${PROJECT_NAME}-update/upload-tool" "${PROJECT_DIR}/" cp -r "/tmp/${PROJECT_NAME}-update/upload-tool" "${PROJECT_DIR}/"
rm -rf "${PROJECT_DIR}/upload-tool/dist"
mv "${PROJECT_DIR}/upload-tool-temp/dist" "${PROJECT_DIR}/upload-tool/"
rm -rf "${PROJECT_DIR}/upload-tool-temp"
print_success "已保留现有上传工具,仅更新脚本文件"
else
print_info "将在后续步骤重新下载上传工具..."
rm -rf "${PROJECT_DIR}/upload-tool"
cp -r "/tmp/${PROJECT_NAME}-update/upload-tool" "${PROJECT_DIR}/"
fi
else
print_warning "现有上传工具文件大小异常,将重新下载..."
rm -rf "${PROJECT_DIR}/upload-tool"
cp -r "/tmp/${PROJECT_NAME}-update/upload-tool" "${PROJECT_DIR}/"
fi
else
# 不存在上传工具,直接复制
rm -rf "${PROJECT_DIR}/upload-tool"
cp -r "/tmp/${PROJECT_NAME}-update/upload-tool" "${PROJECT_DIR}/"
fi
fi fi
# 更新后端代码文件(但不覆盖 data、storage、.env # 更新后端代码文件(但不覆盖 data、storage、.env