-
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathClean-RepoMedia.bat
More file actions
139 lines (119 loc) · 3.69 KB
/
Copy pathClean-RepoMedia.bat
File metadata and controls
139 lines (119 loc) · 3.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
@echo off
setlocal EnableExtensions EnableDelayedExpansion
cd /d "%~dp0"
set "MODE=%~1"
if "%MODE%"=="" set "MODE=scan"
set "KEEP_FILE=media-clean-keep.txt"
set "REPORT=media-clean-report.txt"
set /a COUNT=0
set /a TOTAL=0
if /I not "%MODE%"=="scan" if /I not "%MODE%"=="delete" if /I not "%MODE%"=="gitclean" (
echo Usage: %~nx0 [scan ^| delete ^| gitclean]
echo.
echo scan = dry run, list matching .png and .gif files
echo delete = permanently delete matching files from the working tree
echo gitclean = remove matching files from Git tracking and delete them locally
echo.
echo Optional keep-list file: %KEEP_FILE%
echo Add one relative path per line to preserve a file, for example:
echo Assets\Branding\Logo.png
echo CastleForge\ModLoaderFramework\ModLoader\_Images\Preview.png
exit /b 1
)
if not exist "%KEEP_FILE%" (
>"%KEEP_FILE%" echo # One relative path per line to preserve a file during cleanup.
>>"%KEEP_FILE%" echo # Example:
>>"%KEEP_FILE%" echo # Assets\Branding\Logo.png
>>"%KEEP_FILE%" echo # CastleForge\ModLoaderFramework\ModLoader\_Images\Preview.png
)
if exist "%REPORT%" del /f /q "%REPORT%" >nul 2>&1
set "ROOT=%CD%"
if not "%ROOT:~-1%"=="\" set "ROOT=%ROOT%\"
echo [%MODE%] Repo root: %CD%
echo [%MODE%] Keep-list : %KEEP_FILE%
echo.
for /r %%F in (*.png *.gif) do (
call :ShouldSkip "%%~fF" SKIP
if /I not "!SKIP!"=="1" (
set "REL=%%~fF"
set "REL=!REL:%ROOT%=!"
set /a COUNT+=1
set /a TOTAL+=%%~zF
if /I "%MODE%"=="scan" (
echo !REL!
>>"%REPORT%" echo !REL!
) else if /I "%MODE%"=="delete" (
echo Deleting !REL!
del /f /q "%%~fF"
) else if /I "%MODE%"=="gitclean" (
echo Removing !REL!
call :GitRemove "%%~fF"
)
)
)
echo.
echo Files matched : !COUNT!
echo Total bytes : !TOTAL!
if /I "%MODE%"=="scan" (
echo Report saved : %REPORT%
echo.
echo This was a dry run. Nothing was deleted.
echo.
choice /C YN /N /M "Proceed with local delete now? [Y/N]: "
if errorlevel 2 (
echo.
echo Aborted. No files were deleted.
exit /b 0
)
echo.
call "%~f0" delete
exit /b %errorlevel%
) else (
echo.
echo Cleanup finished.
)
pause
exit /b 0
:ShouldSkip
setlocal EnableExtensions EnableDelayedExpansion
set "P=%~1"
set "SKIP=0"
rem Skip common generated/vendor folders.
if /I not "!P:\.git\=!"=="!P!" set "SKIP=1"
if /I not "!P:\bin\=!"=="!P!" set "SKIP=1"
if /I not "!P:\obj\=!"=="!P!" set "SKIP=1"
if /I not "!P:\.vs\=!"=="!P!" set "SKIP=1"
if /I not "!P:\packages\=!"=="!P!" set "SKIP=1"
if /I not "!P:\node_modules\=!"=="!P!" set "SKIP=1"
if exist "%KEEP_FILE%" (
for /f "usebackq delims=" %%K in ("%KEEP_FILE%") do (
set "K=%%K"
if defined K (
if /I not "!K:~0,1!"=="#" (
set "K=!K:"=!"
set "K=!K:/=\!"
if "!K:~0,1!"=="\" set "K=!K:~1!"
if defined K (
set "KEEPABS=%ROOT%!K!"
rem Exact file match
if /I "!P!"=="!KEEPABS!" set "SKIP=1"
rem Folder match: if keep entry ends with "\" keep everything under it
if "!K:~-1!"=="\" (
call set "TEST=%%P:!KEEPABS!=%%"
if /I not "!TEST!"=="!P!" set "SKIP=1"
)
)
)
)
)
)
endlocal & set "%~2=%SKIP%"
exit /b 0
:GitRemove
setlocal
set "FILE=%~1"
git ls-files --error-unmatch "%FILE%" >nul 2>&1
if not errorlevel 1 git rm -f -- "%FILE%" >nul 2>&1
if exist "%FILE%" del /f /q "%FILE%"
endlocal
exit /b 0