| @echo on
setlocal EnableDelayedExpansion
echo "git_helper_bat: starting"
set "OPERATION=%~1"
echo "OPERATION: !OPERATION!"
if /i "!OPERATION!"=="mirror" (
set "REMOTE_URL=%~2"
set "REF=%~3"
set "HASH=%~4"
set "MIRROR_PATH=%HOME%\\git-mirror\\%~5"
echo "REMOTE_URL: !REMOTE_URL!"
echo "REF: !REF!"
echo "HASH: !HASH!"
echo "MIRROR_PATH: !MIRROR_PATH!"
:lock_wait
mkdir "!MIRROR_PATH!.lock" 2>nul
if errorlevel 1 (
echo "git mirror locked, waiting..."
timeout /t 1 /nobreak > nul
goto :lock_wait
)
if exist "!MIRROR_PATH!\\.git" (
git -C "!MIRROR_PATH!" rev-parse -q --verify "ref-!HASH!" > nul 2> nul
if exist !MIRROR_PATH!\\.git if not errorlevel 1 (
rmdir "!MIRROR_PATH!.lock"
exit /b 0
)
)
if not exist "!MIRROR_PATH!\\." (
mkdir "!MIRROR_PATH!"
)
if not exist "!MIRROR_PATH!\\.git" (
git init --bare "!MIRROR_PATH!"
if errorlevel 1 (
rmdir "!MIRROR_PATH!.lock"
exit /b 1
)
)
set "REFSPEC=!REF!:ref-!HASH!"
echo "REFSPEC: !REFSPEC!"
git -C "!MIRROR_PATH!" fetch "!REMOTE_URL!" "!REFSPEC!" 2>&1
if !ERRORLEVEL! neq 0 (
echo "git fetch failed with errorlevel !ERRORLEVEL!"
rmdir "!MIRROR_PATH!.lock"
exit /b 1
)
rmdir "!MIRROR_PATH!.lock"
exit /b 0
)
if /i "!OPERATION!"=="checkout" (
set "MIRROR_PATH=%HOME%\\git-mirror\\%~2"
set "BUILD_DIR=%~3"
set "HASH=%~4"
echo "MIRROR_PATH: !MIRROR_PATH!"
echo "BUILD_DIR: !BUILD_DIR!"
echo "HASH: !HASH!"
if not exist "!BUILD_DIR!\\.git" (
if exist "!BUILD_DIR!\\" rmdir /s /q "!BUILD_DIR!"
mkdir "!BUILD_DIR!"
git -C "!BUILD_DIR!" init
if errorlevel 1 exit /b 1
)
git -C "!BUILD_DIR!" fetch "!MIRROR_PATH!" "ref-!HASH!"
if errorlevel 1 exit /b 2
git -C "!BUILD_DIR!" checkout -f "!HASH!"
if errorlevel 1 exit /b 1
echo ">>> Git helper script finished."
exit /b 0
)
exit /b 1
|