mirror of
https://github.com/comfyanonymous/ComfyUI.git
synced 2026-01-09 05:40:49 +08:00
a workaround for bash to print pull info inside console when logging git pull, using temp store file to avoid power shell approach
379 lines
12 KiB
Batchfile
379 lines
12 KiB
Batchfile
@echo off
|
|
title ComfyUI-Zluda Update Utility v0.5
|
|
setlocal enabledelayedexpansion
|
|
|
|
set "LOG_FILE=cfz_update_utility_log.txt"
|
|
set "ENABLE_LOGGING=1"
|
|
|
|
set "DEFAULT_BRANCH=master"
|
|
|
|
set "BRANCH="
|
|
set "COMMIT="
|
|
set "COMMIT_DATE="
|
|
set "COMMIT_TIME="
|
|
set "REMOTE_COMMIT="
|
|
set "REMOTE_COMMIT_DATE="
|
|
set "REMOTE_COMMIT_TIME="
|
|
set "AHEAD=0"
|
|
set "BEHIND=0"
|
|
|
|
git rev-parse --is-inside-work-tree >NUL 2>&1
|
|
if ERRORLEVEL 1 (
|
|
echo This directory is not a Git repository.
|
|
pause
|
|
exit /b
|
|
)
|
|
|
|
for /f "tokens=2,3 delims= " %%a in ("%date% %time%") do (
|
|
set "LOG_DATE=%%a"
|
|
set "LOG_TIME=%%b"
|
|
)
|
|
set "LOG_TIME=!LOG_TIME:~0,8!"
|
|
|
|
>> "%LOG_FILE%" (
|
|
echo.
|
|
echo [START] ComfyUI-Zluda Update Utility Log
|
|
echo [DATE] !LOG_DATE! !LOG_TIME!
|
|
echo ========================================================
|
|
)
|
|
|
|
goto show_menu
|
|
|
|
:manual_git
|
|
cls
|
|
echo :manual_git=====================================================================
|
|
call :log Entered manual_git
|
|
echo [INFO] Type any git command below, without "git" prefix, e.g.:
|
|
echo --version
|
|
echo --help
|
|
echo status
|
|
echo.
|
|
|
|
set /p gitcmd=Enter git command:
|
|
|
|
if /i "%gitcmd:~0,4%"=="git " (
|
|
set "gitcmd=%gitcmd:~4%"
|
|
)
|
|
|
|
if "%gitcmd%"=="" (
|
|
echo [INFO] No command entered.
|
|
call :pausefix
|
|
goto manual_git
|
|
)
|
|
|
|
echo %gitcmd% | findstr /R /I "\<reset\> \<clean\> \<rebase\>" >nul
|
|
if %errorlevel%==0 (
|
|
echo [WARN] Destructive commands are not allowed here.
|
|
call :pausefix
|
|
goto show_menu
|
|
)
|
|
|
|
set "CHECK_HELP=%gitcmd:--help=%"
|
|
if not "%CHECK_HELP%"=="%gitcmd%" (
|
|
echo [WARN] 'git --help' may open a separate window or fail to display in this console.
|
|
)
|
|
|
|
echo.
|
|
set /p confirm=Run this command? (Y/N):
|
|
call :log User confirmation for git command: %confirm%
|
|
if /I not "%confirm%"=="Y" (
|
|
echo [INFO] Command canceled.
|
|
call :log User canceled the command
|
|
call :pausefix
|
|
goto show_menu
|
|
)
|
|
|
|
set "fullgitcmd=git %gitcmd%"
|
|
echo [EXEC] %fullgitcmd%
|
|
echo --------------------------------------------------------------------------------
|
|
set "TMP_FILE=%TEMP%\git_output.tmp"
|
|
%fullgitcmd% > "%TMP_FILE%" 2>&1
|
|
if exist "%TMP_FILE%" (
|
|
type "%TMP_FILE%"
|
|
type "%TMP_FILE%" >> "%LOG_FILE%"
|
|
del "%TMP_FILE%"
|
|
) else (
|
|
echo [WARN] Output file not found. Git may have launched an external viewer.
|
|
)
|
|
call :log Ran manual git command: %fullgitcmd%
|
|
echo --------------------------------------------------------------------------------
|
|
call :pausefix
|
|
goto show_menu
|
|
|
|
:get_local_version_info
|
|
for /f "delims=" %%b in ('git rev-parse --abbrev-ref HEAD') do set "BRANCH=%%b"
|
|
for /f "delims=" %%c in ('git rev-parse HEAD') do set "COMMIT=%%c"
|
|
for /f "delims=" %%d in ('git log -1 --format^="%%ad" --date=iso-strict') do set "FULL_DATE=%%d"
|
|
for /f "tokens=1,2 delims=T" %%x in ("!FULL_DATE!") do (
|
|
set "COMMIT_DATE=%%x"
|
|
set "COMMIT_TIME=%%y"
|
|
)
|
|
set "COMMIT_TIME=!COMMIT_TIME:~0,8!"
|
|
exit /b
|
|
|
|
:get_remote_version_info
|
|
for /f "delims=" %%r in ('git rev-parse @{u}') do set "REMOTE_COMMIT=%%r"
|
|
for /f "delims=" %%d in ('git log -1 --format^="%%ad" --date=iso-strict @{u}') do set "REMOTE_FULL_DATE=%%d"
|
|
for /f "tokens=1,2 delims=T" %%x in ("!REMOTE_FULL_DATE!") do (
|
|
set "REMOTE_COMMIT_DATE=%%x"
|
|
set "REMOTE_COMMIT_TIME=%%y"
|
|
)
|
|
set "REMOTE_COMMIT_TIME=!REMOTE_COMMIT_TIME:~0,8!"
|
|
exit /b
|
|
|
|
:pausefix
|
|
echo %cmdcmdline% | findstr /i "\/c" >nul
|
|
if %errorlevel%==0 (
|
|
pause
|
|
) else (
|
|
pause
|
|
)
|
|
exit /b
|
|
|
|
:log
|
|
if "%ENABLE_LOGGING%"=="1" (
|
|
setlocal enabledelayedexpansion
|
|
for /f "tokens=2,3 delims= " %%a in ("%date% %time%") do (
|
|
set "LOG_DATE=%%a"
|
|
set "LOG_TIME=%%b"
|
|
)
|
|
set "LOG_TIME=!LOG_TIME:~0,8!"
|
|
echo [!LOG_DATE! !LOG_TIME!] %* >> "%LOG_FILE%"
|
|
endlocal
|
|
)
|
|
exit /b
|
|
|
|
:show_menu
|
|
call :get_local_version_info
|
|
call :get_remote_version_info
|
|
goto menu
|
|
|
|
:menu
|
|
cls
|
|
echo :menu===========================================================================
|
|
echo ComfyUI-Zluda Update Utility v0.5 branch: !BRANCH!
|
|
echo ================================================================================
|
|
call :log Entered menu
|
|
echo 1. Show Updates [Safe] - git fetch, git log
|
|
echo 2. Download Updates [Safe] - git fetch, git log, git pull
|
|
echo 3. Fix Broken Update [WARN] - git fetch, git reset [Destructive]
|
|
echo 4. Force Reset Branch [WARN] - git fetch, git reset, git clean [Destructive]
|
|
echo 5. Branch Info [Safe] - git status
|
|
echo 6. View Last 50 Commits [Safe] - git log --oneline
|
|
echo 7. Switch Branch [Safe] - git checkout
|
|
echo 8. Git Command [Adv.] - input a raw git command manually
|
|
echo.
|
|
echo 0. Exit
|
|
echo.
|
|
echo ---version----------------------------------------------------------------------
|
|
echo LOCAL: (!COMMIT:~0,8!) !COMMIT_DATE! !COMMIT_TIME!
|
|
echo REMOTE: (!REMOTE_COMMIT:~0,8!) !REMOTE_COMMIT_DATE! !REMOTE_COMMIT_TIME!
|
|
echo ---notes------------------------------------------------------------------------
|
|
echo a): Option 5 shows which files will be removed by option 4.
|
|
echo This includes: modified (not staged), untracked, and ignored files.
|
|
echo b): Option 3 removes modified files only.
|
|
echo Untracked and ignored files (per .gitignore) are preserved.
|
|
echo c): Batch scripts can behave unpredictably; sometimes the menu will refresh
|
|
echo without waiting. Pressing ENTER a few times before selection can help.
|
|
echo ================================================================================
|
|
echo.
|
|
set choice=
|
|
set /p choice=Choose an option (0-8):
|
|
if "%choice%"=="1" goto check_update
|
|
if "%choice%"=="2" goto regular_update
|
|
if "%choice%"=="3" goto fix_update
|
|
if "%choice%"=="4" goto force_reset
|
|
if "%choice%"=="5" goto status
|
|
if "%choice%"=="6" goto view_commits
|
|
if "%choice%"=="7" goto switch_branch
|
|
if "%choice%"=="8" goto manual_git
|
|
if "%choice%"=="0" goto end
|
|
echo Invalid choice. Please try again...
|
|
pause
|
|
goto show_menu
|
|
|
|
:switch_branch
|
|
cls
|
|
echo :switch_branch==================================================================
|
|
call :log Entered switch_branch
|
|
echo [INFO] Available branches:
|
|
git branch -a
|
|
echo.
|
|
set /p target_branch=Enter branch name to switch to:
|
|
call :log User selected branch: %target_branch%
|
|
if "%target_branch%"=="" (
|
|
echo [INFO] No branch entered.
|
|
call :log User did not enter a branch to switch to
|
|
call :pausefix
|
|
goto show_menu
|
|
)
|
|
git checkout "%target_branch%"
|
|
call :log Switched to branch: %target_branch%
|
|
call :pausefix
|
|
goto show_menu
|
|
|
|
:view_commits
|
|
cls
|
|
echo :view_commits===================================================================
|
|
call :log Entered view_commits
|
|
echo [INFO] Last 50 commits:
|
|
git --no-pager log --oneline -n 50
|
|
call :pausefix
|
|
goto show_menu
|
|
|
|
:status
|
|
cls
|
|
echo :status=========================================================================
|
|
echo LOCAL: !COMMIT_DATE! !COMMIT_TIME! hash: !COMMIT:~0,8!
|
|
echo REMOTE: !REMOTE_COMMIT_DATE! !REMOTE_COMMIT_TIME! hash: !REMOTE_COMMIT:~0,8!
|
|
echo --------------------------------------------------------------------------------
|
|
call :log Entered status
|
|
git rev-parse --abbrev-ref --symbolic-full-name @{u} >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo [WARN] No upstream tracking branch set.
|
|
echo [INFO] You can set it with:
|
|
echo git branch --set-upstream-to=origin/%DEFAULT_BRANCH% %DEFAULT_BRANCH%
|
|
) else (
|
|
for /f %%a in ('git rev-list --count HEAD..@{u}') do set "BEHIND=%%a"
|
|
for /f %%a in ('git rev-list --count @{u}..HEAD') do set "AHEAD=%%a"
|
|
if "!AHEAD!"=="0" if "!BEHIND!"=="0" (
|
|
echo [INFO] Your branch is up to date with the remote.
|
|
) else (
|
|
echo [INFO] Branch Status: Ahead by !AHEAD! / Behind by !BEHIND!
|
|
)
|
|
)
|
|
echo --------------------------------------------------------------------------------
|
|
echo [INFO] Summary of changes (git diff --stat):
|
|
git --no-pager diff --stat 2>nul
|
|
echo --------------------------------------------------------------------------------
|
|
echo [INFO] Git status:
|
|
git status
|
|
echo --------------------------------------------------------------------------------
|
|
echo [INFO] Git status (porcelain):
|
|
git status --porcelain
|
|
echo --------------------------------------------------------------------------------
|
|
echo [INFO] Git status (ignored):
|
|
git status --ignored -s
|
|
echo ================================================================================
|
|
call :pausefix
|
|
goto show_menu
|
|
|
|
:check_update
|
|
cls
|
|
echo :check_update===================================================================
|
|
call :log Entered check_update
|
|
echo [INFO] Checking for available updates...
|
|
git fetch >NUL
|
|
for /f "delims=" %%L in ('git rev-parse @') do set LOCAL=%%L
|
|
for /f "delims=" %%R in ('git rev-parse @{u}') do set REMOTE=%%R
|
|
if NOT "%LOCAL%"=="%REMOTE%" (
|
|
echo.
|
|
echo [INFO] Update available. New commits:
|
|
git --no-pager log --oneline %LOCAL%..%REMOTE%
|
|
echo.
|
|
echo [INFO] If your branch is "behind", you can run option 2 to update.
|
|
) else (
|
|
echo [INFO] Already up to date.
|
|
)
|
|
echo.
|
|
echo [INFO] Checking for uncommitted changes...
|
|
for /f %%s in ('git status --porcelain') do (
|
|
echo [WARN] You have uncommitted changes. Please commit or stash them before updating.
|
|
call :pausefix
|
|
goto show_menu
|
|
)
|
|
|
|
:regular_update
|
|
cls
|
|
echo :regular_update=================================================================
|
|
call :log Entered regular_update
|
|
echo [INFO] Checking and updating to a new version if possible...
|
|
copy comfy\customzluda\zluda-default.py comfy\zluda.py /y >NUL
|
|
call :log Copied zluda-default.py to zluda.py
|
|
git fetch >NUL
|
|
call :log Starting regular update
|
|
for /f "delims=" %%L in ('git rev-parse @') do set LOCAL=%%L
|
|
for /f "delims=" %%R in ('git rev-parse @{u}') do set REMOTE=%%R
|
|
if NOT "%LOCAL%"=="%REMOTE%" (
|
|
echo.
|
|
echo [INFO] Update available. New commits:
|
|
git --no-pager log --oneline %LOCAL%..%REMOTE% > temp_log_output.txt 2>&1
|
|
type temp_log_output.txt
|
|
type temp_log_output.txt >> "%LOG_FILE%"
|
|
del temp_log_output.txt
|
|
call :log New commits between %LOCAL% and %REMOTE%
|
|
echo.
|
|
echo [INFO] Pulling updates...
|
|
git --no-pager pull > temp_pull_output.txt 2>&1
|
|
type temp_pull_output.txt
|
|
type temp_pull_output.txt >> "%LOG_FILE%"
|
|
del temp_pull_output.txt
|
|
call :log Pulled updates
|
|
echo.
|
|
echo [DONE] Update complete.
|
|
call :log Update process completed
|
|
) else (
|
|
echo [INFO] Already up to date.
|
|
call :log No update necessary
|
|
)
|
|
call :pausefix
|
|
goto show_menu
|
|
|
|
:fix_update
|
|
cls
|
|
echo :fix_update=====================================================================
|
|
call :log Entered fix_update
|
|
echo [INFO] Fixing broken Git state...
|
|
echo.
|
|
git fetch --all >> "%LOG_FILE%" 2>&1
|
|
call :log Ran git fetch --all
|
|
git reset --hard origin/%DEFAULT_BRANCH% >> "%LOG_FILE%" 2>&1
|
|
call :log Ran git reset --hard origin/%DEFAULT_BRANCH%
|
|
echo.
|
|
echo [INFO] If you see a successful update now, it is done.
|
|
call :log fix_update complete
|
|
call :pausefix
|
|
goto show_menu
|
|
|
|
:force_reset
|
|
cls
|
|
echo :force_reset====================================================================
|
|
call :log Entered force_reset
|
|
echo.
|
|
echo WARNING: This will completely reset all changes
|
|
echo.
|
|
echo --------------------------------------------------------------------------------
|
|
echo.
|
|
echo This will hard RESET to origin/%DEFAULT_BRANCH%.
|
|
echo This includes deleting ALL untracked AND ignored files.
|
|
echo.
|
|
echo --- Dry run: showing what would be deleted ---
|
|
git clean -n -f -d -x
|
|
echo --------------------------------------------------------------------------------
|
|
echo.
|
|
set /p confirm=Are you sure? Type YES to proceed with full reset:
|
|
|
|
if /I not "%confirm%"=="YES" (
|
|
call :log User canceled force reset with input: %confirm%
|
|
goto show_menu
|
|
)
|
|
|
|
call :log User confirmed force reset: %confirm%
|
|
echo.
|
|
echo [INFO] Proceeding with force reset...
|
|
git fetch --all >> "%LOG_FILE%" 2>&1
|
|
call :log Ran git fetch --all
|
|
git reset --hard origin/%DEFAULT_BRANCH% >> "%LOG_FILE%" 2>&1
|
|
call :log Ran git reset --hard origin/%DEFAULT_BRANCH%
|
|
git clean -fdx >> "%LOG_FILE%" 2>&1
|
|
call :log Ran git clean -fdx
|
|
echo.
|
|
echo [INFO] Full force reset complete.
|
|
call :pausefix
|
|
goto show_menu
|
|
|
|
:end
|
|
call :log Exiting...
|
|
endlocal
|
|
exit
|