refactor: replace update.ps1 with update.bat

Simpler double-click updater, full English, no execution policy issues.
Force-resets to origin/main, preserves .config, shows clear PASS/FAIL banner.

Co-Authored-By: Claude Sonnet 4.5 <[email protected]>
This commit is contained in:
o1key
2026-04-03 16:31:36 +08:00
co-authored by Claude Sonnet 4.5
parent 34d5c43cad
commit 0b9a1ebf7a
2 changed files with 128 additions and 149 deletions
+128
View File
@@ -0,0 +1,128 @@
@echo off
setlocal EnableDelayedExpansion
title comfyui_o1key Updater
:: Change to the directory where this .bat file lives
cd /d "%~dp0"
echo.
echo ================================================
echo comfyui_o1key Auto Updater
echo ================================================
echo.
:: ── 1. Check git is installed ─────────────────────────────────────────
where git >nul 2>&1
if errorlevel 1 (
set "STATUS=FAILED"
set "REASON=Git is not installed or not in PATH."
goto :done
)
:: ── 2. Confirm this is a git repo ─────────────────────────────────────
if not exist ".git" (
set "STATUS=FAILED"
set "REASON=.git folder not found. Make sure this .bat is in the plugin root."
goto :done
)
:: ── 3. Show current version ───────────────────────────────────────────
echo [INFO] Current version:
for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set "OLD_HASH=%%i"
for /f "delims=" %%i in ('git log -1 --format^="%%ci" 2^>nul') do set "OLD_DATE=%%i"
echo Hash : %OLD_HASH%
echo Date : %OLD_DATE%
echo.
:: ── 4. Back up .config if it exists ───────────────────────────────────
if exist ".config" (
copy /y ".config" ".config.bak" >nul 2>&1
echo [INFO] .config backed up (API key will be restored after update)
echo.
)
:: ── 5. Fetch latest from GitHub ───────────────────────────────────────
echo [INFO] Fetching from GitHub...
git fetch origin 2>&1
if errorlevel 1 (
set "STATUS=FAILED"
set "REASON=git fetch failed. Check your network / GitHub access."
goto :restore_config
)
echo.
:: ── 6. Check if already up to date ───────────────────────────────────
for /f %%i in ('git rev-parse HEAD 2^>nul') do set "LOCAL=%%i"
for /f %%i in ('git rev-parse origin/main 2^>nul') do set "REMOTE=%%i"
if "%LOCAL%"=="%REMOTE%" (
set "STATUS=UP-TO-DATE"
set "REASON=Already on the latest version. No update needed."
goto :restore_config
)
:: ── 7. Show incoming changes ──────────────────────────────────────────
echo [INFO] Incoming changes:
git log HEAD..origin/main --oneline 2>&1
echo.
:: ── 8. Switch to / create local main branch ───────────────────────────
git branch --list main | findstr "main" >nul 2>&1
if errorlevel 1 (
git checkout -b main origin/main >nul 2>&1
) else (
git checkout main >nul 2>&1
)
:: ── 9. Force reset to remote main (handles cross-version gaps) ────────
echo [INFO] Applying update...
git reset --hard origin/main 2>&1
if errorlevel 1 (
set "STATUS=FAILED"
set "REASON=git reset --hard failed."
goto :restore_config
)
:: ── 10. Clean untracked files (keep .config) ──────────────────────────
git clean -fd -e ".config" -e ".config.bak" 2>&1
echo.
set "STATUS=SUCCESS"
:restore_config
:: ── Restore .config ───────────────────────────────────────────────────
if exist ".config.bak" (
copy /y ".config.bak" ".config" >nul 2>&1
del /f /q ".config.bak" >nul 2>&1
if "%STATUS%"=="SUCCESS" (
echo [INFO] .config restored (API key unchanged)
echo.
)
)
:done
:: ── Final status banner ───────────────────────────────────────────────
echo.
if "%STATUS%"=="SUCCESS" (
echo ================================================
echo RESULT : UPDATE SUCCESSFUL
for /f %%i in ('git rev-parse --short HEAD 2^>nul') do set "NEW_HASH=%%i"
for /f "delims=" %%i in ('git log -1 --format^="%%ci" 2^>nul') do set "NEW_DATE=%%i"
echo Old : %OLD_HASH% ^(%OLD_DATE%^)
echo New : !NEW_HASH! ^(!NEW_DATE!^)
echo Action : Please restart ComfyUI to load the new plugin.
echo ================================================
) else if "%STATUS%"=="UP-TO-DATE" (
echo ================================================
echo RESULT : ALREADY UP TO DATE
echo Hash : %LOCAL%
echo Info : %REASON%
echo ================================================
) else (
echo ================================================
echo RESULT : UPDATE FAILED
echo Reason : %REASON%
echo ================================================
)
echo.
pause
endlocal
-149
View File
@@ -1,149 +0,0 @@
# ============================================================
# comfyui_o1key 插件自动更新脚本
# 使用方式:在本目录 Shift+右键 > 在此处打开 PowerShell 窗口,直接运行
# 作用:从 GitHub 拉取最新版本,强制覆盖本地(含跨版本更新)
# ============================================================
$Host.UI.RawUI.WindowTitle = "comfyui_o1key 更新工具"
function Write-Title {
Write-Host ""
Write-Host "============================================" -ForegroundColor Cyan
Write-Host " comfyui_o1key 插件更新工具" -ForegroundColor Cyan
Write-Host "============================================" -ForegroundColor Cyan
Write-Host ""
}
function Write-Step {
param([string]$msg)
Write-Host ">> $msg" -ForegroundColor Yellow
}
function Write-OK {
param([string]$msg)
Write-Host " [OK] $msg" -ForegroundColor Green
}
function Write-Fail {
param([string]$msg)
Write-Host " [ERROR] $msg" -ForegroundColor Red
}
function Pause-Exit {
param([int]$code = 0)
Write-Host ""
Write-Host "按任意键退出..." -ForegroundColor DarkGray
$null = $Host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")
exit $code
}
# ── 切换到脚本所在目录(Shift+右键打开时目录可能不对)──────────────────
Set-Location -Path $PSScriptRoot
Write-Title
# ── 1. 检查 git 是否安装 ────────────────────────────────────────────────
Write-Step "检查 Git 环境..."
if (-not (Get-Command git -ErrorAction SilentlyContinue)) {
Write-Fail "未找到 git 命令,请先安装 Git for Windowshttps://git-scm.com"
Pause-Exit 1
}
Write-OK "Git 已安装:$(git --version)"
# ── 2. 确认当前目录是 git 仓库 ─────────────────────────────────────────
Write-Step "检查插件目录..."
if (-not (Test-Path ".git")) {
Write-Fail "当前目录不是 Git 仓库,请检查脚本是否放在插件根目录"
Pause-Exit 1
}
Write-OK "目录正常:$PSScriptRoot"
# ── 3. 显示当前版本 ────────────────────────────────────────────────────
Write-Step "当前版本信息..."
$currentCommit = git rev-parse --short HEAD 2>&1
$currentDate = git log -1 --format="%ci" 2>&1
Write-Host " 提交 Hash : $currentCommit" -ForegroundColor Gray
Write-Host " 提交时间 : $currentDate" -ForegroundColor Gray
# ── 4. 备份 .config(如果存在,防止意外覆盖) ─────────────────────────
$configPath = Join-Path $PSScriptRoot ".config"
$configBakPath = Join-Path $PSScriptRoot ".config.bak"
if (Test-Path $configPath) {
Copy-Item $configPath $configBakPath -Force
Write-OK "已备份 .config -> .config.bak(更新后自动还原)"
}
# ── 5. 获取远程更新 ────────────────────────────────────────────────────
Write-Step "正在从 GitHub 获取最新代码..."
git fetch origin 2>&1 | ForEach-Object { Write-Host " $_" -ForegroundColor DarkGray }
if ($LASTEXITCODE -ne 0) {
Write-Fail "fetch 失败,请检查网络连接或 GitHub 访问是否正常"
# 还原备份
if (Test-Path $configBakPath) { Copy-Item $configBakPath $configPath -Force }
Pause-Exit 1
}
Write-OK "远程代码获取成功"
# ── 6. 检查是否已经是最新 ─────────────────────────────────────────────
$localHash = git rev-parse HEAD 2>&1
$remoteHash = git rev-parse origin/main 2>&1
if ($localHash -eq $remoteHash) {
Write-Host ""
Write-Host " 已经是最新版本,无需更新。" -ForegroundColor Green
if (Test-Path $configBakPath) { Remove-Item $configBakPath -Force }
Pause-Exit 0
}
# ── 7. 显示即将更新的变更 ──────────────────────────────────────────────
Write-Step "即将更新的内容:"
git log HEAD..origin/main --oneline 2>&1 | ForEach-Object {
Write-Host " $_" -ForegroundColor DarkCyan
}
# ── 8. 强制重置到远程 main(处理跨版本 / 历史不一致情况) ──────────────
Write-Step "正在强制更新到最新版本..."
# 确保本地有 main 分支
$hasBranchMain = git branch --list main
if (-not $hasBranchMain) {
git checkout -b main origin/main 2>&1 | Out-Null
} else {
git checkout main 2>&1 | Out-Null
}
# 强制重置(无论历史是否一致,直接对齐远程)
git reset --hard origin/main 2>&1 | ForEach-Object { Write-Host " $_" -ForegroundColor DarkGray }
if ($LASTEXITCODE -ne 0) {
Write-Fail "更新失败(reset 出错)"
if (Test-Path $configBakPath) { Copy-Item $configBakPath $configPath -Force }
Pause-Exit 1
}
# 清理多余的未跟踪文件(可选,保留 .config)
git clean -fd --exclude=".config" --exclude=".config.bak" 2>&1 | ForEach-Object {
Write-Host " $_" -ForegroundColor DarkGray
}
Write-OK "代码已更新成功"
# ── 9. 还原 .config ────────────────────────────────────────────────────
if (Test-Path $configBakPath) {
Copy-Item $configBakPath $configPath -Force
Remove-Item $configBakPath -Force
Write-OK ".config 已还原(API Key 保持不变)"
}
# ── 10. 显示更新后版本 ─────────────────────────────────────────────────
Write-Host ""
Write-Host "============================================" -ForegroundColor Green
Write-Host " 更新完成!" -ForegroundColor Green
$newCommit = git rev-parse --short HEAD 2>&1
$newDate = git log -1 --format="%ci" 2>&1
Write-Host " 新版本 Hash : $newCommit" -ForegroundColor Green
Write-Host " 提交时间 : $newDate" -ForegroundColor Green
Write-Host "============================================" -ForegroundColor Green
Write-Host ""
Write-Host " 请重启 ComfyUI 以加载最新插件。" -ForegroundColor Cyan
Write-Host ""
Pause-Exit 0