From e10ff041665ac1c73f41aa391a46e350d54193c4 Mon Sep 17 00:00:00 2001 From: WanWanYun Date: Sun, 16 Nov 2025 00:11:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=B5=81=E7=A8=8B=20-=20=E6=B7=BB=E5=8A=A0=E4=BF=9D=E7=95=99?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E5=B7=A5=E5=85=B7=E9=80=89=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题背景: - 之前每次更新都会删除并重新下载上传工具(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 --- install.sh | 48 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 45 insertions(+), 3 deletions(-) diff --git a/install.sh b/install.sh index 9f2fbba..8646c32 100644 --- a/install.sh +++ b/install.sh @@ -3328,10 +3328,52 @@ update_pull_latest_code() { cp -r "/tmp/${PROJECT_NAME}-update/frontend" "${PROJECT_DIR}/" fi - # 更新上传工具 + # 更新上传工具 - 询问用户是否保留 if [[ -d "/tmp/${PROJECT_NAME}-update/upload-tool" ]]; then - rm -rf "${PROJECT_DIR}/upload-tool" - cp -r "/tmp/${PROJECT_NAME}-update/upload-tool" "${PROJECT_DIR}/" + # 检查是否已存在上传工具可执行文件 + 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" + 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 # 更新后端代码文件(但不覆盖 data、storage、.env)