294 lines
8.6 KiB
Batchfile
294 lines
8.6 KiB
Batchfile
@echo off
|
|
setlocal EnableExtensions EnableDelayedExpansion
|
|
|
|
:: UpgradeToGitProj.bat
|
|
:: Run this inside an existing (pre-git) project root.
|
|
:: - Merges .gitignore and .gitattributes from components/ templates
|
|
:: - Initializes git and installs Git LFS
|
|
:: - Creates Renders, copies helper scripts
|
|
:: - Collects seq/ outputs from daily_* folders under Blends\animations (with submodule support)
|
|
|
|
:: -----------------------------
|
|
:: Arguments
|
|
:: -----------------------------
|
|
set "DRY=0"
|
|
if /I "%~1"=="/dry-run" set "DRY=1"
|
|
if /I "%~1"=="--dry-run" set "DRY=1"
|
|
if /I "%~1"=="-n" set "DRY=1"
|
|
if /I "%~1"=="/n" set "DRY=1"
|
|
|
|
set "projectDir=%CD%"
|
|
set "scriptDir=%~dp0"
|
|
set "RUN_ID=%RANDOM%_%RANDOM%"
|
|
set "DELETE_LIST=%TEMP%\upg_delete_%RUN_ID%.lst"
|
|
|
|
setlocal EnableDelayedExpansion
|
|
set /a debugTotal=0
|
|
set /a debugPlanned=0
|
|
set /a debugMissing=0
|
|
|
|
echo ==============================================
|
|
echo UpgradeToGitProj in "%projectDir%"
|
|
if "%DRY%"=="1" (echo Mode: DRY-RUN) else (echo Mode: APPLY)
|
|
echo ==============================================
|
|
|
|
:: -----------------------------
|
|
:: Ensure Renders exists and copy helper scripts
|
|
:: -----------------------------
|
|
set "rendersDir=%projectDir%\Renders"
|
|
if not exist "%rendersDir%" (
|
|
if "%DRY%"=="1" (
|
|
echo [DRY] mkdir "%rendersDir%"
|
|
) else (
|
|
mkdir "%rendersDir%" >nul 2>&1
|
|
)
|
|
)
|
|
|
|
for %%F in (UpdateSequences.bat ZipSeqArchv.bat UnzipSeqArchv.bat) do (
|
|
if exist "%scriptDir%%%F" (
|
|
if "%DRY%"=="1" (
|
|
echo [DRY] copy "%scriptDir%%%F" "%rendersDir%\%%F"
|
|
) else (
|
|
copy /Y "%scriptDir%%%F" "%rendersDir%\%%F" >nul
|
|
)
|
|
) else (
|
|
echo [WARN] Missing template: "%scriptDir%%%F"
|
|
)
|
|
)
|
|
|
|
:: -----------------------------
|
|
:: Merge .gitignore and .gitattributes from templates
|
|
:: -----------------------------
|
|
set "tplGitIgnore=%scriptDir%components\gitignore"
|
|
set "dstGitIgnore=%projectDir%\.gitignore"
|
|
set "tplGitAttr=%scriptDir%components\gitattributes"
|
|
set "dstGitAttr=%projectDir%\.gitattributes"
|
|
|
|
call :MergeTemplate "%tplGitIgnore%" "%dstGitIgnore%"
|
|
call :MergeTemplate "%tplGitAttr%" "%dstGitAttr%"
|
|
|
|
:: -----------------------------
|
|
:: Initialize git and Git LFS
|
|
:: -----------------------------
|
|
if not exist "%projectDir%\.git" (
|
|
if "%DRY%"=="1" (
|
|
echo [DRY] git init
|
|
) else (
|
|
pushd "%projectDir%" >nul
|
|
git init
|
|
popd >nul
|
|
)
|
|
)
|
|
|
|
if "%DRY%"=="1" (
|
|
echo [DRY] git lfs install
|
|
) else (
|
|
pushd "%projectDir%" >nul
|
|
git lfs install
|
|
popd >nul
|
|
)
|
|
|
|
:: -----------------------------
|
|
:: Collect seq outputs from daily_* into Renders
|
|
:: -----------------------------
|
|
set "animDir=%projectDir%\Blends\animations"
|
|
set "foundAny=0"
|
|
set "foundSubmodules=0"
|
|
|
|
if exist "%animDir%" (
|
|
if "%DRY%"=="1" echo [DRY] Scanning animations dir: "%animDir%"
|
|
:: Detect submodules: first-level folders under animations that contain daily_*
|
|
for /d %%S in ("%animDir%\*") do (
|
|
set "name=%%~nS"
|
|
set "prefix=!name:~0,6!"
|
|
if /I not "!prefix!"=="daily_" (
|
|
for /d %%D in ("%%S\daily_*") do (
|
|
set "foundSubmodules=1"
|
|
)
|
|
if "%DRY%"=="1" (
|
|
if exist "%%S\daily_*" echo [DRY] Detected submodule: "%%~nS"
|
|
)
|
|
)
|
|
)
|
|
|
|
if "!foundSubmodules!"=="1" (
|
|
if "%DRY%"=="1" echo [DRY] Using submodules under Blends\animations
|
|
for /d %%S in ("%animDir%\*") do (
|
|
set "name=%%~nS"
|
|
set "prefix=!name:~0,6!"
|
|
if /I not "!prefix!"=="daily_" (
|
|
set "submodName=%%~nS"
|
|
set "_subdir=%rendersDir%\!submodName!"
|
|
rem Ensure submodule dir exists and place helper scripts there
|
|
if "%DRY%"=="1" (
|
|
if not exist "!_subdir!" echo [DRY] mkdir "!_subdir!"
|
|
if exist "%scriptDir%UpdateSequences.bat" echo [DRY] copy "%scriptDir%UpdateSequences.bat" "!_subdir!\UpdateSequences.bat"
|
|
if exist "%scriptDir%ZipSeqArchv.bat" echo [DRY] copy "%scriptDir%ZipSeqArchv.bat" "!_subdir!\ZipSeqArchv.bat"
|
|
if exist "%scriptDir%UnzipSeqArchv.bat" echo [DRY] copy "%scriptDir%UnzipSeqArchv.bat" "!_subdir!\UnzipSeqArchv.bat"
|
|
) else (
|
|
if not exist "!_subdir!" mkdir "!_subdir!" >nul 2>&1
|
|
if exist "%scriptDir%UpdateSequences.bat" copy /Y "%scriptDir%UpdateSequences.bat" "!_subdir!\UpdateSequences.bat" >nul
|
|
if exist "%scriptDir%ZipSeqArchv.bat" copy /Y "%scriptDir%ZipSeqArchv.bat" "!_subdir!\ZipSeqArchv.bat" >nul
|
|
if exist "%scriptDir%UnzipSeqArchv.bat" copy /Y "%scriptDir%UnzipSeqArchv.bat" "!_subdir!\UnzipSeqArchv.bat" >nul
|
|
)
|
|
for /d %%D in ("%%S\daily_*") do (
|
|
set "dailyName=%%~nD"
|
|
set "_src=%%D\seq"
|
|
set "_dst=%rendersDir%\!submodName!\!dailyName!"
|
|
set /a debugTotal+=1
|
|
if "%DRY%"=="1" (
|
|
if exist "!_src!" (
|
|
echo [DRY] WOULD copy "!_src!" -^> "!_dst!"
|
|
set /a debugPlanned+=1
|
|
) else (
|
|
echo [DRY] Skip: missing "!_src!"
|
|
set /a debugMissing+=1
|
|
)
|
|
)
|
|
call :CopySeqToRenders "!_src!" "!_dst!"
|
|
)
|
|
)
|
|
)
|
|
set "foundAny=1"
|
|
) else (
|
|
if "%DRY%"=="1" echo [DRY] No submodules found; using direct daily_* under animations
|
|
:: Fallback: direct daily_* under animations → copy into Renders\daily_*
|
|
for /d %%D in ("%animDir%\daily_*") do (
|
|
set "_dname=%%~nD"
|
|
set "_src=%%D\seq"
|
|
set "_dst=%rendersDir%\!_dname!"
|
|
set /a debugTotal+=1
|
|
if "%DRY%"=="1" (
|
|
if exist "!_src!" (
|
|
echo [DRY] WOULD copy "!_src!" -^> "!_dst!"
|
|
set /a debugPlanned+=1
|
|
) else (
|
|
echo [DRY] Skip: missing "!_src!"
|
|
set /a debugMissing+=1
|
|
)
|
|
)
|
|
call :CopySeqToRenders "!_src!" "!_dst!"
|
|
set "foundAny=1"
|
|
)
|
|
)
|
|
)
|
|
|
|
if "!foundAny!"=="0" (
|
|
if "%DRY%"=="1" echo [DRY] Animations dir missing or empty; checking root daily_*
|
|
:: Final fallback: root-level daily_* under projectDir → copy into Renders\daily_*
|
|
for /d %%D in ("%projectDir%\daily_*") do (
|
|
set "_dname=%%~nD"
|
|
set "_src=%%D\seq"
|
|
set "_dst=%rendersDir%\!_dname!"
|
|
set /a debugTotal+=1
|
|
if "%DRY%"=="1" (
|
|
if exist "!_src!" (
|
|
echo [DRY] WOULD copy "!_src!" -^> "!_dst!"
|
|
set /a debugPlanned+=1
|
|
) else (
|
|
echo [DRY] Skip: missing "!_src!"
|
|
set /a debugMissing+=1
|
|
)
|
|
)
|
|
call :CopySeqToRenders "!_src!" "!_dst!"
|
|
set "foundAny=1"
|
|
)
|
|
)
|
|
|
|
:AfterCopy
|
|
if "%DRY%"=="1" (
|
|
echo [DRY] Summary: total dailies=!debugTotal!, with seq=!debugPlanned!, missing=!debugMissing!
|
|
if exist "%DELETE_LIST%" (
|
|
echo [DRY] Would offer to delete these seq folders after copy:
|
|
for /f "usebackq delims=" %%P in ("%DELETE_LIST%") do echo [DRY] %%P
|
|
del "%DELETE_LIST%" >nul 2>&1
|
|
)
|
|
) else (
|
|
if exist "%DELETE_LIST%" (
|
|
echo.
|
|
echo Cleanup option: Remove original seq folders that were copied?
|
|
choice /C YN /N /M "Delete original seq folders now? (Y/N): "
|
|
if errorlevel 2 (
|
|
echo Skipping deletion of original seq folders.
|
|
) else (
|
|
for /f "usebackq delims=" %%P in ("%DELETE_LIST%") do (
|
|
echo Deleting seq folder: "%%P"
|
|
rd /S /Q "%%P" 2>nul
|
|
)
|
|
echo Cleanup complete.
|
|
)
|
|
del "%DELETE_LIST%" >nul 2>&1
|
|
)
|
|
)
|
|
echo Done.
|
|
exit /b 0
|
|
|
|
:: ---------------------------------
|
|
:: MergeTemplate: copy if missing; else append only missing lines
|
|
:: %1 = templatePath, %2 = destinationPath
|
|
:: ---------------------------------
|
|
:MergeTemplate
|
|
setlocal
|
|
set "tpl=%~1"
|
|
set "dst=%~2"
|
|
|
|
if not exist "%tpl%" (
|
|
echo [WARN] Template missing: "%tpl%"
|
|
endlocal & exit /b 0
|
|
)
|
|
|
|
if not exist "%dst%" (
|
|
if "%DRY%"=="1" (
|
|
echo [DRY] copy "%tpl%" "%dst%"
|
|
) else (
|
|
copy /Y "%tpl%" "%dst%" >nul
|
|
)
|
|
) else (
|
|
if "%DRY%"=="1" (
|
|
echo [DRY] merge missing lines from "%tpl%" into "%dst%"
|
|
) else (
|
|
for /f "usebackq delims=" %%L in ("%tpl%") do (
|
|
>nul 2>&1 findstr /x /c:"%%L" "%dst%" || (>>"%dst%" echo %%L)
|
|
)
|
|
)
|
|
)
|
|
|
|
endlocal & exit /b 0
|
|
|
|
:: ---------------------------------
|
|
:: CopySeqToRenders: copies contents of src seq dir into dest
|
|
:: %1 = srcSeqDir, %2 = destDir
|
|
:: ---------------------------------
|
|
:CopySeqToRenders
|
|
setlocal EnableExtensions EnableDelayedExpansion
|
|
set "src=%~1"
|
|
set "dst=%~2"
|
|
|
|
if "%DRY%"=="1" (
|
|
if not exist "%src%" endlocal & exit /b 0
|
|
if not exist "%dst%" echo [DRY] mkdir "%dst%"
|
|
>> "%DELETE_LIST%" echo %src%
|
|
endlocal & exit /b 0
|
|
)
|
|
|
|
if not exist "%src%" (
|
|
echo [INFO] Skip: missing seq folder "%src%"
|
|
endlocal & exit /b 0
|
|
)
|
|
|
|
if not exist "%dst%" mkdir "%dst%" >nul 2>&1
|
|
|
|
set "ROBO_OPTS=/E /XO /XN /XC /R:1 /W:1 /NFL /NDL /NP /NJH /NJS"
|
|
echo Copy seq: "%src%" -> "%dst%"
|
|
robocopy "%src%" "%dst%" * %ROBO_OPTS% >nul
|
|
set "__rc=%ERRORLEVEL%"
|
|
if not "%__rc%"=="" (
|
|
if %__rc% LSS 8 (
|
|
>> "%DELETE_LIST%" echo %src%
|
|
)
|
|
)
|
|
|
|
endlocal & exit /b 0
|
|
|
|
|