148 lines
4.3 KiB
Batchfile
148 lines
4.3 KiB
Batchfile
@echo off
|
|
setlocal EnableExtensions EnableDelayedExpansion
|
|
|
|
REM Check if being run from gameupdate folder (incorrect usage)
|
|
for %%I in ("%CD%") do set "CURRENT_FOLDER=%%~nxI"
|
|
if /I "%CURRENT_FOLDER%"=="gameupdate" (
|
|
echo.
|
|
echo ========================================
|
|
echo ERROR: Do not run patch.bat directly!
|
|
echo ========================================
|
|
echo.
|
|
echo You are running this from the gameupdate folder.
|
|
echo This will not work correctly!
|
|
echo.
|
|
echo Please go back to the game's root folder and
|
|
echo run GameUpdate.bat instead.
|
|
echo ========================================
|
|
echo.
|
|
pause
|
|
exit /b 1
|
|
)
|
|
|
|
REM Determine important paths
|
|
set "SCRIPT_DIR=%~dp0"
|
|
set "ROOT_DIR=%CD%"
|
|
set "CONFIG_FILE=%SCRIPT_DIR%patch-config.txt"
|
|
|
|
echo Using root directory: "%ROOT_DIR%"
|
|
echo Using config: "%CONFIG_FILE%"
|
|
|
|
echo Checking for pwsh...
|
|
set _my_shell=pwsh
|
|
|
|
REM Check if pwsh.exe exists
|
|
where /q !_my_shell!
|
|
if !errorlevel! neq 0 (
|
|
echo pwsh not found. Falling back to powershell...
|
|
REM If pwsh is not found, set to powershell
|
|
set _my_shell=powershell
|
|
|
|
REM Check if powershell.exe exists
|
|
echo Checking for powershell...
|
|
where /q !_my_shell!
|
|
if !errorlevel! neq 0 (
|
|
echo.Error: Powershell not found!
|
|
pause
|
|
exit /B 1
|
|
) else (
|
|
echo powershell found.
|
|
)
|
|
) else (
|
|
echo pwsh found.
|
|
)
|
|
|
|
echo Using !_my_shell! for script execution.
|
|
|
|
REM Check if patch-config.txt exists in gameupdate folder
|
|
if not exist "%CONFIG_FILE%" (
|
|
echo "Config file (gameupdate\patch-config.txt) not found! Assuming no patching needed."
|
|
pause
|
|
exit /b
|
|
)
|
|
|
|
REM Read configuration from file
|
|
for /f "usebackq tokens=1,2 delims==" %%a in ("%CONFIG_FILE%") do (
|
|
if "%%a"=="username" set "username=%%b"
|
|
if "%%a"=="repo" set "repo=%%b"
|
|
if "%%a"=="branch" set "branch=%%b"
|
|
)
|
|
|
|
REM Get the latest hash
|
|
echo "Getting latest commit SHA hash"
|
|
!_my_shell! -Command "(Invoke-RestMethod -Uri 'https://gitgud.io/api/v4/projects/%username%%%2F%repo%/repository/branches/%branch%').commit.id" > "%ROOT_DIR%\latest_patch_sha.txt"
|
|
|
|
REM Read the latest SHA from the file
|
|
set /p latest_patch_sha=<"%ROOT_DIR%\latest_patch_sha.txt"
|
|
|
|
REM Check if previous_patch_sha.txt exists in gameupdate
|
|
if not exist "%SCRIPT_DIR%previous_patch_sha.txt" (
|
|
echo "Previous SHA hash not found!"
|
|
echo "Assuming first time patching..."
|
|
goto download_extract
|
|
)
|
|
|
|
REM Read the stored SHA from previous check
|
|
set /p previous_patch_sha=<"%SCRIPT_DIR%previous_patch_sha.txt"
|
|
|
|
REM Trim whitespace from SHA strings
|
|
set "previous_patch_sha=%previous_patch_sha: =%"
|
|
set "latest_patch_sha=%latest_patch_sha: =%"
|
|
|
|
REM Compare trimmed SHAs
|
|
if "%latest_patch_sha%" neq "%previous_patch_sha%" (
|
|
echo "Update found! Patching..."
|
|
goto download_extract
|
|
) else (
|
|
echo "Patch is up to date."
|
|
)
|
|
|
|
REM Delete latest_patch_sha.txt
|
|
del "%ROOT_DIR%\latest_patch_sha.txt"
|
|
|
|
endlocal
|
|
pause
|
|
exit /b
|
|
|
|
:download_extract
|
|
|
|
REM Escape single quotes in paths
|
|
set "escaped_root=%ROOT_DIR:'=''%"
|
|
|
|
REM Download zip file to root
|
|
echo "Downloading latest patch..."
|
|
!_my_shell! -Command "Set-Location -LiteralPath '%escaped_root%'; $ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest -Uri 'https://gitgud.io/%username%/%repo%/-/archive/%branch%/%repo%-%branch%.zip' -OutFile 'repo.zip'"
|
|
if !errorlevel! neq 0 (
|
|
pause
|
|
exit /b
|
|
)
|
|
|
|
REM Extract contents, overwriting conflicts into root
|
|
echo "Extracting..."
|
|
!_my_shell! -Command "Set-Location -LiteralPath '%escaped_root%'; $ProgressPreference = 'SilentlyContinue'; Expand-Archive -Path '.\repo.zip' -DestinationPath '.' -Force"
|
|
if !errorlevel! neq 0 (
|
|
echo Extraction failed!
|
|
del "%ROOT_DIR%\repo.zip"
|
|
rmdir /s /q "%ROOT_DIR%\%repo%-%branch%"
|
|
pause
|
|
exit /b
|
|
)
|
|
echo "Applying patch..."
|
|
xcopy /s /e /y "%ROOT_DIR%\%repo%-%branch%\*" "%ROOT_DIR%\"
|
|
if !errorlevel! neq 0 (
|
|
echo Patch application failed!
|
|
del "%ROOT_DIR%\repo.zip"
|
|
rmdir /s /q "%ROOT_DIR%\%repo%-%branch%"
|
|
pause
|
|
exit /b
|
|
)
|
|
REM Clean up
|
|
echo "Cleaning up..."
|
|
del "%ROOT_DIR%\repo.zip"
|
|
rmdir /s /q "%ROOT_DIR%\%repo%-%branch%"
|
|
del "%ROOT_DIR%\latest_patch_sha.txt"
|
|
REM Store latest SHA for next check in gameupdate
|
|
echo %latest_patch_sha% > "%SCRIPT_DIR%previous_patch_sha.txt"
|
|
endlocal
|
|
pause
|
|
exit /b
|