forgegit 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,329 @@
1
+ @echo off
2
+ setlocal EnableDelayedExpansion
3
+ chcp 65001 >nul 2>nul
4
+
5
+ cd /d "%~dp0..\.."
6
+
7
+ REM --- Colores ANSI (con fallback) ---
8
+ for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
9
+ if "!ESC!"=="" (
10
+ set "C_CY=" & set "C_BC=" & set "C_GR=" & set "C_YE="
11
+ set "C_RE=" & set "C_GY=" & set "C_WH=" & set "C_RS="
12
+ ) else (
13
+ set "C_CY=!ESC![36m" & set "C_BC=!ESC![96m"
14
+ set "C_GR=!ESC![32m" & set "C_YE=!ESC![33m"
15
+ set "C_RE=!ESC![31m" & set "C_GY=!ESC![90m"
16
+ set "C_WH=!ESC![97m" & set "C_RS=!ESC![0m"
17
+ )
18
+
19
+ REM --- Args ---
20
+ if /i "%~1"=="ayuda" goto :ayuda
21
+ if /i "%~1"=="--help" goto :ayuda
22
+ if /i "%~1"=="-h" goto :ayuda
23
+ if /i "%~1"=="listar" goto :listar
24
+ if /i "%~1"=="crear" goto :crear
25
+ if /i "%~1"=="volver" goto :volver_arg
26
+ goto :menu
27
+
28
+ REM ============================================================
29
+ REM MENU PRINCIPAL
30
+ REM ============================================================
31
+ :menu
32
+ echo.
33
+ echo !C_CY!============================================!C_RS!
34
+ echo !C_BC! SNAPSHOTS!C_RS! !C_GY!- Copias de seguridad!C_RS!
35
+ echo !C_CY!============================================!C_RS!
36
+ echo.
37
+ echo !C_GY!Un snapshot es una copia completa del proyecto.!C_RS!
38
+ echo !C_GY!Sirve para volver atras si algo se rompe.!C_RS!
39
+ echo.
40
+
41
+ call :count
42
+ if !SNAP_COUNT! EQU 0 (
43
+ echo !C_GY!No hay snapshots todavia.!C_RS!
44
+ ) else (
45
+ echo !C_CY!.!C_RS! !C_GY!Snapshots disponibles:!C_RS! !C_WH!!SNAP_COUNT!!C_RS!
46
+ echo.
47
+ call :list_short
48
+ )
49
+ echo.
50
+
51
+ echo !C_CY!------------------------------------------------------------!C_RS!
52
+ echo !C_BC! QUE QUIERES HACER?!C_RS!
53
+ echo !C_CY!------------------------------------------------------------!C_RS!
54
+ echo !C_YE![c]!C_RS! Crear snapshot
55
+ if !SNAP_COUNT! GTR 0 (
56
+ echo !C_YE![v]!C_RS! Volver a un snapshot
57
+ )
58
+ echo !C_YE![l]!C_RS! Listar con detalles
59
+ echo !C_YE![Enter]!C_RS! Salir
60
+ echo !C_CY!------------------------------------------------------------!C_RS!
61
+ echo.
62
+
63
+ set "ACTION="
64
+ set /p "ACTION= !C_BC!Opcion!C_RS!: "
65
+
66
+ if /i "!ACTION!"=="c" goto :crear
67
+ if /i "!ACTION!"=="v" goto :volver_prompt
68
+ if /i "!ACTION!"=="l" goto :listar
69
+ goto :end
70
+
71
+ REM ============================================================
72
+ REM CREAR SNAPSHOT
73
+ REM ============================================================
74
+ :crear
75
+ echo.
76
+ echo !C_CY!------------------------------------------------------------!C_RS!
77
+ echo !C_BC! CREAR SNAPSHOT!C_RS!
78
+ echo !C_CY!------------------------------------------------------------!C_RS!
79
+ echo.
80
+ echo !C_GY!Copia todo el proyecto en versiones\!C_RS!
81
+ echo !C_GY!Excluye: .git, versiones, node_modules, audits, etc.!C_RS!
82
+ echo.
83
+
84
+ set "SNAP_NAME="
85
+ set /p "SNAP_NAME= !C_BC!Nombre!C_RS! !C_GY![Enter=Sin definir]!C_RS!: "
86
+ if "!SNAP_NAME!"=="" set "SNAP_NAME=Sin definir"
87
+
88
+ for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmmss"') do set "TS=%%i"
89
+ set "DEST=versiones\!TS!_!SNAP_NAME!"
90
+
91
+ if not exist "versiones" mkdir "versiones"
92
+ if not exist "!DEST!" mkdir "!DEST!"
93
+
94
+ echo.
95
+ echo !C_GY!Copiando archivos...!C_RS!
96
+ robocopy "." "!DEST!" /E /XD .git versiones old_versions backup backups node_modules __pycache__ venv .venv env dist build out cache .cache .parcel-cache .vite .vscode .idea audits /XF *.log *.tmp *.bak *.orig Thumbs.db .DS_Store /NFL /NDL /NJH /NJS /NC /NS /NP >nul
97
+ set "RC=!ERRORLEVEL!"
98
+
99
+ echo.
100
+ if !RC! GEQ 8 (
101
+ echo !C_RE![X]!C_RS! Robocopy fallo con codigo !RC!
102
+ goto :end
103
+ )
104
+
105
+ set "FCOUNT=0"
106
+ for /f %%c in ('dir /b /s "!DEST!" 2^>nul ^| find /c /v ""') do set "FCOUNT=%%c"
107
+
108
+ echo !C_GR![OK]!C_RS! Snapshot creado
109
+ echo.
110
+ echo !C_GY!Ubicacion:!C_RS! !C_WH!!DEST!!C_RS!
111
+ echo !C_GY!Archivos:!C_RS! !C_WH!!FCOUNT!!C_RS!
112
+ echo.
113
+
114
+ goto :end
115
+
116
+ REM ============================================================
117
+ REM LISTAR (short, para menu)
118
+ REM ============================================================
119
+ :list_short
120
+ set "IDX=0"
121
+ for /f "delims=" %%D in ('dir /b /o-n "versiones" 2^>nul') do (
122
+ if !IDX! LSS 3 (
123
+ echo !C_YE![!IDX!]!C_RS! !C_WH!%%D!C_RS!
124
+ )
125
+ set /a IDX+=1
126
+ )
127
+ if !IDX! GTR 3 (
128
+ echo !C_GY!... y !IDX! mas en total!C_RS!
129
+ )
130
+ goto :eof
131
+
132
+ REM ============================================================
133
+ REM LISTAR (full)
134
+ REM ============================================================
135
+ :listar
136
+ call :count
137
+ if !SNAP_COUNT! EQU 0 (
138
+ echo.
139
+ echo !C_GY!No hay snapshots. Crea uno con:!C_RS! !C_WH!snapshots.cmd crear!C_RS!
140
+ goto :end
141
+ )
142
+
143
+ echo.
144
+ echo !C_CY!-------------------------------------------------------------!C_RS!
145
+ echo !C_BC! SNAPSHOTS DISPONIBLES!C_RS!
146
+ echo !C_CY!-------------------------------------------------------------!C_RS!
147
+ echo !C_GY! IDX NOMBRE ARCHIVOS!C_RS!
148
+ echo !C_CY!-------------------------------------------------------------!C_RS!
149
+
150
+ set "IDX=0"
151
+ for /f "delims=" %%D in ('dir /b /o-n "versiones" 2^>nul') do (
152
+ set "S_!IDX!=%%D"
153
+ set "FC=0"
154
+ for /f %%c in ('dir /b /s "versiones\%%D" 2^>nul ^| find /c /v ""') do set "FC=%%c"
155
+ echo !C_YE![!IDX!]!C_RS! !C_WH!%%D!C_RS! !C_GY!(!FC! archivos)!C_RS!
156
+ set /a IDX+=1
157
+ )
158
+
159
+ echo !C_CY!-------------------------------------------------------------!C_RS!
160
+ echo !C_GY!Total: !SNAP_COUNT! snapshots!C_RS!
161
+ echo.
162
+ goto :end
163
+
164
+ REM ============================================================
165
+ REM VOLVER (prompt)
166
+ REM ============================================================
167
+ :volver_prompt
168
+ call :count
169
+ if !SNAP_COUNT! EQU 0 (
170
+ echo !C_RE![X]!C_RS! No hay snapshots.
171
+ goto :end
172
+ )
173
+
174
+ call :listar_body
175
+
176
+ set "RESTORE_IDX="
177
+ set /p "RESTORE_IDX= !C_BC!Indice a restaurar!C_RS! !C_GY![0-!SNAP_COUNT!-1]!C_RS!: "
178
+ if "!RESTORE_IDX!"=="" goto :end
179
+
180
+ call :do_restore "!RESTORE_IDX!"
181
+ goto :end
182
+
183
+ :volver_arg
184
+ if "%~2"=="" (
185
+ echo !C_RE![X]!C_RS! Falta el indice.
186
+ echo !C_GY!Uso: snapshots.cmd volver <indice>!C_RS!
187
+ goto :end
188
+ )
189
+ call :listar_body
190
+ call :do_restore "%~2"
191
+ goto :end
192
+
193
+ REM Cuerpo compartido de listado
194
+ :listar_body
195
+ echo.
196
+ echo !C_CY!-------------------------------------------------------------!C_RS!
197
+ echo !C_BC! SNAPSHOTS DISPONIBLES!C_RS!
198
+ echo !C_CY!-------------------------------------------------------------!C_RS!
199
+ set "IDX=0"
200
+ for /f "delims=" %%D in ('dir /b /o-n "versiones" 2^>nul') do (
201
+ set "S_!IDX!=%%D"
202
+ echo !C_YE![!IDX!]!C_RS! !C_WH!%%D!C_RS!
203
+ set /a IDX+=1
204
+ )
205
+ echo !C_CY!-------------------------------------------------------------!C_RS!
206
+ echo.
207
+ goto :eof
208
+
209
+ REM ============================================================
210
+ REM DO RESTORE
211
+ REM ============================================================
212
+ :do_restore
213
+ set "TARGET=%~1"
214
+ set "SNAP_NAME=!S_%TARGET%!"
215
+
216
+ if "!SNAP_NAME!"=="" (
217
+ echo !C_RE![X]!C_RS! Indice !TARGET! no existe.
218
+ goto :eof
219
+ )
220
+
221
+ set "SNAP_PATH=versiones\!SNAP_NAME!"
222
+ if not exist "!SNAP_PATH!" (
223
+ echo !C_RE![X]!C_RS! Snapshot no encontrado: !SNAP_PATH!
224
+ goto :eof
225
+ )
226
+
227
+ echo !C_CY!------------------------------------------------------------!C_RS!
228
+ echo !C_BC! CONFIRMAR RESTAURACION!C_RS!
229
+ echo !C_CY!------------------------------------------------------------!C_RS!
230
+ echo.
231
+ echo !C_GY!Snapshot:!C_RS! !C_WH!!SNAP_NAME!!C_RS!
232
+ echo !C_GY!Modo:!C_RS! !C_WH!overlay (no borra archivos)!C_RS!
233
+ echo.
234
+ echo !C_GY!Se creara un backup automatico antes de restaurar.!C_RS!
235
+ echo !C_YE!ATENCION: los cambios actuales pueden perderse.!C_RS!
236
+ echo.
237
+
238
+ set "CONFIRM="
239
+ set /p "CONFIRM= !C_BC!Escribe SI para confirmar!C_RS!: "
240
+ if /i not "!CONFIRM!"=="SI" (
241
+ echo !C_GY!Cancelado.!C_RS!
242
+ goto :eof
243
+ )
244
+
245
+ REM --- Backup pre-restore ---
246
+ echo.
247
+ echo !C_GY!Creando backup de seguridad...!C_RS!
248
+ for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmmss"') do set "TS=%%i"
249
+ set "PREBK=versiones\!TS!_pre-restore"
250
+
251
+ if not exist "!PREBK!" mkdir "!PREBK!"
252
+ robocopy "." "!PREBK!" /E /XD .git versiones old_versions backup backups node_modules __pycache__ venv .venv env dist build out cache .cache .parcel-cache .vite .vscode .idea audits /XF *.log *.tmp *.bak *.orig Thumbs.db .DS_Store /NFL /NDL /NJH /NJS /NC /NS /NP >nul
253
+ echo !C_GR![OK]!C_RS! Backup: !C_WH!!PREBK!!C_RS!
254
+ echo.
255
+
256
+ REM --- Restore ---
257
+ echo !C_GY!Restaurando archivos...!C_RS!
258
+ robocopy "!SNAP_PATH!" "." /E /XD .git versiones audits /XF *.log *.tmp /NFL /NDL /NJH /NJS /NC /NS /NP >nul
259
+ set "RC=!ERRORLEVEL!"
260
+
261
+ echo.
262
+ if !RC! GEQ 8 (
263
+ echo !C_RE![X]!C_RS! Restauracion fallo con codigo !RC!
264
+ echo !C_GY!Puedes volver al estado previo con:!C_RS! !C_WH!snapshots.cmd volver!C_RS!
265
+ goto :eof
266
+ )
267
+
268
+ echo !C_GR![OK]!C_RS! Snapshot restaurado.
269
+ echo.
270
+ echo !C_GY!Si algo salio mal, tu estado previo esta en:!C_RS!
271
+ echo !C_WH!!PREBK!!C_RS!
272
+ echo.
273
+ goto :eof
274
+
275
+ REM ============================================================
276
+ REM CONTAR
277
+ REM ============================================================
278
+ :count
279
+ set "SNAP_COUNT=0"
280
+ if exist "versiones" (
281
+ for /f %%c in ('dir /b /ad "versiones" 2^>nul ^| find /c /v ""') do set "SNAP_COUNT=%%c"
282
+ )
283
+ goto :eof
284
+
285
+ REM ============================================================
286
+ REM AYUDA
287
+ REM ============================================================
288
+ :ayuda
289
+ echo.
290
+ echo !C_CY!============================================!C_RS!
291
+ echo !C_BC! SNAPSHOTS!C_RS! !C_GY!- Ayuda!C_RS!
292
+ echo !C_CY!============================================!C_RS!
293
+ echo.
294
+ echo !C_BC!USO:!C_RS!
295
+ echo !C_WH!snapshots.cmd!C_RS! Menu interactivo
296
+ echo !C_WH!snapshots.cmd crear!C_RS! Crear snapshot
297
+ echo !C_WH!snapshots.cmd listar!C_RS! Listar snapshots
298
+ echo !C_WH!snapshots.cmd volver <idx>!C_RS! Restaurar por indice
299
+ echo !C_WH!snapshots.cmd --help!C_RS! Esta ayuda
300
+ echo.
301
+ echo !C_BC!FLUJO TIPICO:!C_RS!
302
+ echo !C_GY!1. Antes de un cambio riesgoso:!C_RS!
303
+ echo !C_WH!snapshots.cmd crear!C_RS! !C_GY!(nombre: antes de refactor)!C_RS!
304
+ echo !C_GY!2. Haces los cambios...!C_RS!
305
+ echo !C_GY!3. Si algo se rompe:!C_RS!
306
+ echo !C_WH!snapshots.cmd volver 0!C_RS!
307
+ echo.
308
+ echo !C_BC!SEGURIDAD:!C_RS!
309
+ echo !C_GY!- Preview antes de restaurar!C_RS!
310
+ echo !C_GY!- Confirmacion con "SI" mayusculas!C_RS!
311
+ echo !C_GY!- Backup automatico pre-restore!C_RS!
312
+ echo !C_GY!- Modo overlay (no borra archivos)^^!C_RS!
313
+ echo.
314
+ goto :end
315
+
316
+ :end
317
+ call :shell_if_double_click
318
+ endlocal
319
+ exit /b 0
320
+
321
+ :shell_if_double_click
322
+ if "%NO_PAUSE%"=="1" goto :eof
323
+ echo %cmdcmdline% | find /i "%~nx0" >nul
324
+ if errorlevel 1 goto :eof
325
+ echo.
326
+ echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
327
+ echo.
328
+ cmd /k
329
+ goto :eof
@@ -0,0 +1,200 @@
1
+ @echo off
2
+ setlocal EnableDelayedExpansion
3
+ chcp 65001 >nul 2>nul
4
+
5
+ cd /d "%~dp0"
6
+ cls
7
+
8
+ set "ROOT=%~dp0"
9
+
10
+ REM --- Detectar donde esta lib/ y templates/ ---
11
+ if exist ".forge\lib\ui.cmd" (
12
+ set "LIB=%ROOT%.forge\lib"
13
+ set "TPL=%ROOT%.forge\templates"
14
+ set "CMDS=%ROOT%.forge\commands"
15
+ ) else (
16
+ set "LIB=%ROOT%lib"
17
+ set "TPL=%ROOT%templates"
18
+ set "CMDS=%ROOT%.forge\commands"
19
+ )
20
+
21
+ REM --- Force mode ---
22
+ set "FORCE=0"
23
+ if /i "%~1"=="--force" set "FORCE=1"
24
+ if /i "%~1"=="force" set "FORCE=1"
25
+ if /i "%~1"=="-f" set "FORCE=1"
26
+
27
+ call "%ROOT%config.cmd"
28
+
29
+ for %%a in ("%CD%") do set "PROJECT_NAME=%%~nxa"
30
+
31
+ call "%LIB%\ui.cmd" banner
32
+
33
+ REM --- STEP 1/17: Node.js ---
34
+ where node >nul 2>nul
35
+ if errorlevel 1 (
36
+ echo [1/17] Node.js MISSING
37
+ echo Descargalo desde: https://nodejs.org/
38
+ goto :abort
39
+ )
40
+ for /f "tokens=*" %%v in ('node --version 2^>nul') do set "NODE_VER=%%v"
41
+ call "%LIB%\ui.cmd" step 1/17 "Node.js !NODE_VER!" "OK"
42
+
43
+ REM --- STEP 2/17: Git ---
44
+ where git >nul 2>nul
45
+ if errorlevel 1 (
46
+ echo [2/17] Git MISSING
47
+ echo Descargalo desde: https://git-scm.com/download/win
48
+ goto :abort
49
+ )
50
+ for /f "tokens=*" %%v in ('git --version 2^>nul') do set "GIT_VER=%%v"
51
+ call "%LIB%\ui.cmd" step 2/17 "!GIT_VER!" "OK"
52
+
53
+ REM --- STEP 3/17: Init repo ---
54
+ call "%LIB%\git-ops.cmd" init
55
+
56
+ REM --- STEP 4/17: Branch main ---
57
+ call "%LIB%\git-ops.cmd" branch_main
58
+
59
+ REM --- STEP 5/17: Crear estructura .forge/ ---
60
+ if exist ".forge\commands" goto :step5_ok
61
+ mkdir ".forge" 2>nul
62
+ mkdir ".forge\commands" 2>nul
63
+ mkdir ".forge\lib" 2>nul
64
+ mkdir ".forge\templates" 2>nul
65
+ call "%LIB%\ui.cmd" step 5/17 "Estructura .forge/" "CREADO"
66
+ goto :step6
67
+ :step5_ok
68
+ call "%LIB%\ui.cmd" step 5/17 "Estructura .forge/" "YA EXISTE"
69
+
70
+ :step6
71
+ REM --- STEP 6/17: .gitignore ---
72
+ if exist ".gitignore" goto :step6_ok
73
+ call "%LIB%\templates.cmd" write_gitignore
74
+ call "%LIB%\ui.cmd" step 6/17 ".gitignore universal" "CREADO"
75
+ goto :step7
76
+ :step6_ok
77
+ call "%LIB%\ui.cmd" step 6/17 ".gitignore" "YA EXISTE"
78
+
79
+ :step7
80
+ REM --- STEP 7/17: README.md ---
81
+ if exist "README.md" goto :step7_ok
82
+ call "%LIB%\templates.cmd" write_readme
83
+ call "%LIB%\ui.cmd" step 7/17 "README.md adaptativo" "CREADO"
84
+ goto :step8
85
+ :step7_ok
86
+ call "%LIB%\ui.cmd" step 7/17 "README.md" "YA EXISTE"
87
+
88
+ :step8
89
+ REM --- STEP 8/17: forge.cmd ---
90
+ if exist "forge.cmd" goto :step8_ok
91
+ call "%LIB%\templates.cmd" write_forge
92
+ call "%LIB%\ui.cmd" step 8/17 "forge.cmd menu" "CREADO"
93
+ goto :step9
94
+ :step8_ok
95
+ call "%LIB%\ui.cmd" step 8/17 "forge.cmd" "YA EXISTE"
96
+
97
+ :step9
98
+ REM --- STEP 9/17: save.cmd ---
99
+ if exist ".forge\commands\save.cmd" goto :step9_ok
100
+ call "%LIB%\templates.cmd" write_save
101
+ call "%LIB%\ui.cmd" step 9/17 "save.cmd" "CREADO"
102
+ goto :step10
103
+ :step9_ok
104
+ call "%LIB%\ui.cmd" step 9/17 "save.cmd" "YA EXISTE"
105
+
106
+ :step10
107
+ REM --- STEP 10/17: push.cmd ---
108
+ if exist ".forge\commands\push.cmd" goto :step10_ok
109
+ call "%LIB%\templates.cmd" write_push
110
+ call "%LIB%\ui.cmd" step 10/17 "push.cmd" "CREADO"
111
+ goto :step11
112
+ :step10_ok
113
+ call "%LIB%\ui.cmd" step 10/17 "push.cmd" "YA EXISTE"
114
+
115
+ :step11
116
+ REM --- STEP 11/17: snapshots.cmd ---
117
+ if exist ".forge\commands\snapshots.cmd" goto :step11_ok
118
+ call "%LIB%\templates.cmd" write_snapshots
119
+ call "%LIB%\ui.cmd" step 11/17 "snapshots.cmd" "CREADO"
120
+ goto :step12
121
+ :step11_ok
122
+ call "%LIB%\ui.cmd" step 11/17 "snapshots.cmd" "YA EXISTE"
123
+
124
+ :step12
125
+ REM --- STEP 12/17: historial.cmd ---
126
+ if exist ".forge\commands\historial.cmd" goto :step12_ok
127
+ call "%LIB%\templates.cmd" write_historial
128
+ call "%LIB%\ui.cmd" step 12/17 "historial.cmd" "CREADO"
129
+ goto :step13
130
+ :step12_ok
131
+ call "%LIB%\ui.cmd" step 12/17 "historial.cmd" "YA EXISTE"
132
+
133
+ :step13
134
+ REM --- STEP 13/17: abrir.cmd ---
135
+ if exist ".forge\commands\abrir.cmd" goto :step13_ok
136
+ call "%LIB%\templates.cmd" write_abrir
137
+ call "%LIB%\ui.cmd" step 13/17 "abrir.cmd" "CREADO"
138
+ goto :step14
139
+ :step13_ok
140
+ call "%LIB%\ui.cmd" step 13/17 "abrir.cmd" "YA EXISTE"
141
+
142
+ :step14
143
+ REM --- STEP 14/17: auditar.cmd ---
144
+ if exist ".forge\commands\auditar.cmd" goto :step14_ok
145
+ call "%LIB%\templates.cmd" write_auditar
146
+ call "%LIB%\ui.cmd" step 14/17 "auditar.cmd" "CREADO"
147
+ goto :step15
148
+ :step14_ok
149
+ call "%LIB%\ui.cmd" step 14/17 "auditar.cmd" "YA EXISTE"
150
+
151
+ :step15
152
+ REM --- STEP 15/17: serve.cmd ---
153
+ if exist ".forge\commands\serve.cmd" goto :step15_ok
154
+ call "%LIB%\templates.cmd" write_serve
155
+ call "%LIB%\ui.cmd" step 15/17 "serve.cmd" "CREADO"
156
+ goto :step16
157
+ :step15_ok
158
+ call "%LIB%\ui.cmd" step 15/17 "serve.cmd" "YA EXISTE"
159
+
160
+ :step16
161
+ REM --- STEP 16/17: Commit ---
162
+ call "%LIB%\git-ops.cmd" has_changes
163
+ if errorlevel 1 (
164
+ set "USER_MSG="
165
+ set /p "USER_MSG= Mensaje del commit [Enter = default]: "
166
+ if "!USER_MSG!"=="" set "USER_MSG=%COMMIT_MESSAGE%"
167
+ call "%LIB%\git-ops.cmd" commit "!USER_MSG!"
168
+ call "%LIB%\ui.cmd" step 16/17 "Commit: !USER_MSG!" "CREADO"
169
+ ) else (
170
+ call "%LIB%\ui.cmd" step 16/17 "Sin cambios para commit" "SKIP"
171
+ )
172
+
173
+ REM --- STEP 17/17: Tag ---
174
+ call "%LIB%\git-ops.cmd" tag
175
+ if errorlevel 1 (
176
+ call "%LIB%\ui.cmd" step 17/17 "Tag %TAG_INITIAL%" "CREADO"
177
+ ) else (
178
+ call "%LIB%\ui.cmd" step 17/17 "Tag %TAG_INITIAL%" "YA EXISTE"
179
+ )
180
+
181
+ call "%LIB%\ui.cmd" done
182
+ call :shell_if_double_click
183
+ endlocal
184
+ exit /b 0
185
+
186
+ :abort
187
+ call "%LIB%\ui.cmd" abort
188
+ call :shell_if_double_click
189
+ endlocal
190
+ exit /b 1
191
+
192
+ :shell_if_double_click
193
+ if "%NO_PAUSE%"=="1" goto :eof
194
+ echo %cmdcmdline% | find /i "%~nx0" >nul
195
+ if errorlevel 1 goto :eof
196
+ echo.
197
+ echo Sesion interactiva abierta. Escribe 'exit' para cerrar.
198
+ echo.
199
+ cmd /k
200
+ goto :eof
File without changes
@@ -0,0 +1,92 @@
1
+ @echo off
2
+ REM ============================================================
3
+ REM forge-git / lib/git-ops.cmd
4
+ REM Git operations
5
+ REM
6
+ REM Usage:
7
+ REM call "git-ops.cmd" init - init repo
8
+ REM call "git-ops.cmd" branch_main - rename branch to main
9
+ REM call "git-ops.cmd" has_changes - check for pending changes
10
+ REM call "git-ops.cmd" commit "msg" - commit with message
11
+ REM call "git-ops.cmd" tag - create tag
12
+ REM
13
+ REM Return codes:
14
+ REM 0 = nothing to do (already exists / no changes)
15
+ REM 1 = action performed
16
+ REM ============================================================
17
+
18
+ REM --- Detectar PROJECT_ROOT ---
19
+ REM Si git-ops.cmd esta en .forge/lib/ -> PROJECT_ROOT = ..\..
20
+ REM Si git-ops.cmd esta en lib/ -> PROJECT_ROOT = ..
21
+ set "ROOT=%~dp0"
22
+ REM Detectar si estamos dentro de .forge
23
+ echo "%ROOT%" | find /i ".forge" >nul
24
+ if not errorlevel 1 (
25
+ set "PROJECT_ROOT=%ROOT%..\.."
26
+ ) else (
27
+ set "PROJECT_ROOT=%ROOT%.."
28
+ )
29
+
30
+ if "%~1"=="init" goto :init
31
+ if "%~1"=="branch_main" goto :branch_main
32
+ if "%~1"=="has_changes" goto :has_changes
33
+ if "%~1"=="commit" goto :commit
34
+ if "%~1"=="tag" goto :tag
35
+ goto :eof
36
+
37
+ :init
38
+ pushd "%PROJECT_ROOT%"
39
+ if exist ".git" (
40
+ popd
41
+ call "%~dp0ui.cmd" step 3/17 "Repositorio Git" "YA EXISTE"
42
+ exit /b 0
43
+ )
44
+ git init -q
45
+ if errorlevel 1 (
46
+ popd
47
+ call "%~dp0ui.cmd" step 3/17 "Repositorio Git" "ERROR"
48
+ exit /b 1
49
+ )
50
+ popd
51
+ call "%~dp0ui.cmd" step 3/17 "Repositorio Git" "CREADO"
52
+ exit /b 1
53
+
54
+ :branch_main
55
+ pushd "%PROJECT_ROOT%"
56
+ git branch -M %BRANCH_MAIN% >nul 2>nul
57
+ popd
58
+ call "%~dp0ui.cmd" step 4/17 "Rama principal: %BRANCH_MAIN%" "OK"
59
+ exit /b 0
60
+
61
+ :has_changes
62
+ pushd "%PROJECT_ROOT%"
63
+ git add -A >nul 2>nul
64
+ git diff --cached --quiet
65
+ set "RC=%ERRORLEVEL%"
66
+ popd
67
+ if %RC% NEQ 0 ( exit /b 1 ) else ( exit /b 0 )
68
+
69
+ :commit
70
+ set "MSG=%~2"
71
+ if "!MSG!"=="" set "MSG=%COMMIT_MESSAGE%"
72
+ pushd "%PROJECT_ROOT%"
73
+ git commit -q -m "!MSG!"
74
+ set "RC=%ERRORLEVEL%"
75
+ popd
76
+ if %RC% NEQ 0 ( exit /b 0 ) else ( exit /b 1 )
77
+
78
+ :tag
79
+ pushd "%PROJECT_ROOT%"
80
+ git rev-parse %TAG_INITIAL% >nul 2>nul
81
+ if not errorlevel 1 (
82
+ popd
83
+ exit /b 0
84
+ )
85
+ git rev-parse HEAD >nul 2>nul
86
+ if errorlevel 1 (
87
+ popd
88
+ exit /b 0
89
+ )
90
+ git tag -a %TAG_INITIAL% -m "%TAG_MESSAGE%" 2>nul
91
+ popd
92
+ exit /b 1