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.
File without changes
@@ -0,0 +1,51 @@
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
+ where code >nul 2>nul
20
+ if errorlevel 1 (
21
+ echo.
22
+ echo !C_RE![X]!C_RS! VS Code CLI no esta en el PATH.
23
+ echo.
24
+ echo !C_GY!Instala:!C_RS!
25
+ echo !C_WH!1.!C_RS! Abre VS Code
26
+ echo !C_WH!2.!C_RS! Ctrl+Shift+P
27
+ echo !C_WH!3.!C_RS! "Shell Command: Install 'code' command in PATH"
28
+ echo.
29
+ call :shell_if_double_click
30
+ exit /b 1
31
+ )
32
+
33
+ if "%~1"=="" (
34
+ echo !C_GY!Abriendo proyecto en VS Code...!C_RS!
35
+ code .
36
+ ) else (
37
+ echo !C_GY!Abriendo en VS Code:!C_RS! !C_WH!%*!C_RS!
38
+ code %*
39
+ )
40
+
41
+ exit /b 0
42
+
43
+ :shell_if_double_click
44
+ if "%NO_PAUSE%"=="1" goto :eof
45
+ echo %cmdcmdline% | find /i "%~nx0" >nul
46
+ if errorlevel 1 goto :eof
47
+ echo.
48
+ echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
49
+ echo.
50
+ cmd /k
51
+ goto :eof
@@ -0,0 +1,340 @@
1
+ @echo off
2
+ setlocal EnableDelayedExpansion
3
+ chcp 65001 >nul 2>nul
4
+
5
+ cd /d "%~dp0..\.."
6
+
7
+ REM - Detectar soporte ANSI (Windows 10+ / Windows Terminal) -
8
+ set "ANSI=1"
9
+ for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
10
+
11
+ REM - Fallback si no hay soporte ANSI -
12
+ if "!ESC!"=="" set "ANSI=0"
13
+
14
+ if "!ANSI!"=="1" (
15
+ set "C_CYAN=!ESC![36m"
16
+ set "C_BCYAN=!ESC![96m"
17
+ set "C_GREEN=!ESC![32m"
18
+ set "C_YELLOW=!ESC![33m"
19
+ set "C_RED=!ESC![31m"
20
+ set "C_GRAY=!ESC![90m"
21
+ set "C_DIM=!ESC![2m"
22
+ set "C_WHITE=!ESC![97m"
23
+ set "C_RESET=!ESC![0m"
24
+ ) else (
25
+ set "C_CYAN="
26
+ set "C_BCYAN="
27
+ set "C_GREEN="
28
+ set "C_YELLOW="
29
+ set "C_RED="
30
+ set "C_GRAY="
31
+ set "C_DIM="
32
+ set "C_WHITE="
33
+ set "C_RESET="
34
+ )
35
+
36
+ REM - Help flag -
37
+ if /i "%~1"=="-help" goto :help
38
+ if /i "%~1"=="-h" goto :help
39
+ if /i "%~1"=="help" goto :help
40
+
41
+ if not exist ".git" (
42
+ echo !C_RED![X]!C_RESET! No hay repositorio Git. Ejecuta: init.cmd
43
+ exit /b 1
44
+ )
45
+
46
+ REM - Banner -
47
+ echo.
48
+ echo !C_CYAN!============================================!C_RESET!
49
+ echo !C_BCYAN! AUDITAR!C_RESET! !C_GRAY!- Reportes de cambios!C_RESET!
50
+ echo !C_CYAN!============================================!C_RESET!
51
+ echo.
52
+ echo !C_GRAY!Genera un .txt con los cambios entre dos puntos del!C_RESET!
53
+ echo !C_GRAY!historial. Ideal para auditar con IA o revisar un rango.!C_RESET!
54
+ echo.
55
+
56
+ REM - 1. Estado actual -
57
+ for /f "tokens=*" %%b in ('git branch --show-current 2^>nul') do set "BRANCH=%%b"
58
+
59
+ echo !C_CYAN!-!C_RESET! !C_GRAY!Branch:!C_RESET! !C_WHITE!!BRANCH!!C_RESET!
60
+
61
+ git add -A >nul 2>nul
62
+ git diff --cached --quiet
63
+ if errorlevel 1 (
64
+ set "NCH=0"
65
+ for /f %%c in ('git diff --cached --name-only ^| find /c /v ""') do set "NCH=%%c"
66
+ echo !C_CYAN!-!C_RESET! !C_GRAY!Cambios:!C_RESET! !C_YELLOW!!NCH! archivos sin commitear!C_RESET!
67
+ ) else (
68
+ echo !C_CYAN!-!C_RESET! !C_GRAY!Cambios:!C_RESET! !C_GREEN!limpio!C_RESET!
69
+ )
70
+ echo.
71
+
72
+ REM - 2. Cuantos commits listar -
73
+ set "LIMIT=10"
74
+ set "INPUT="
75
+ set /p "INPUT= !C_BCYAN!Cuantos commits listar?!C_RESET! !C_GRAY![10 por defecto, T=todos]!C_RESET!: "
76
+ if /i "!INPUT!"=="T" (
77
+ set "LIMIT=9999"
78
+ ) else if not "!INPUT!"=="" (
79
+ set "LIMIT=!INPUT!"
80
+ )
81
+
82
+ REM - 3. Log a temp -
83
+ set "TMPLOG=%TEMP%\forge_git_log.txt"
84
+ git log -n !LIMIT! --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:"%%h %%ad %%s" > "!TMPLOG!" 2>nul
85
+
86
+ REM - 4. Tabla con separadores -
87
+ echo.
88
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET!
89
+ echo !C_BCYAN! HISTORIAL!C_RESET!
90
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET!
91
+ echo !C_GRAY! IDX FECHA HASH MENSAJE!C_RESET!
92
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET!
93
+
94
+ set "IDX=0"
95
+ set "FIRST=1"
96
+ for /f "delims=" %%L in ('type "!TMPLOG!"') do (
97
+ if "!FIRST!"=="0" (
98
+ echo !C_DIM!!C_GRAY! . . . . . . . . . . . . . . . . . . .!C_RESET!
99
+ )
100
+ set "LINE=%%L"
101
+ set "HASH=!LINE:~0,7!"
102
+ set "DATETIME=!LINE:~8,19!"
103
+ set "MSG=!LINE:~28!"
104
+ set "H_!IDX!=!HASH!"
105
+ echo !C_BCYAN![!IDX!]!C_RESET! !C_GRAY!!DATETIME!!C_RESET! !C_YELLOW!!HASH!!C_RESET! !C_WHITE!!MSG!!C_RESET!
106
+ set /a IDX=IDX+1
107
+ set "FIRST=0"
108
+ )
109
+ del "!TMPLOG!" >nul 2>nul
110
+
111
+ if !IDX! EQU 0 (
112
+ echo !C_RED![X]!C_RESET! No hay commits.
113
+ goto :end
114
+ )
115
+
116
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET!
117
+ echo !C_GRAY!Total: !IDX! commits ^(0 = mas reciente^)!C_RESET!
118
+ echo.
119
+
120
+ REM - 5. Modos de uso (ordenados por frecuencia) -
121
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET!
122
+ echo !C_BCYAN! MODOS DE USO!C_RESET!
123
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET!
124
+ echo !C_YELLOW!0,W!C_RESET! !C_GRAY!Comparar ultimo commit vs estado actual!C_RESET! !C_GREEN![recomendado]!C_RESET!
125
+ echo !C_YELLOW!0,3!C_RESET! !C_GRAY!Comparar commit [0] vs commit [3]!C_RESET!
126
+ echo !C_YELLOW!0-3!C_RESET! !C_GRAY!Alias de 0,3!C_RESET!
127
+ echo !C_YELLOW![Enter]!C_RESET! !C_GRAY!Solo ver historial (sin reporte)!C_RESET!
128
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET!
129
+ echo.
130
+
131
+ REM - 6. Pedir rango -
132
+ set "RANGE="
133
+ set /p "RANGE= !C_BCYAN!Rango a auditar:!C_RESET! !C_GRAY![Enter=0,W]!C_RESET!: "
134
+ if "!RANGE!"=="" (
135
+ set "RANGE=0,W"
136
+ echo !C_GRAY!Usando default: 0,W!C_RESET!
137
+ )
138
+
139
+ set "A="
140
+ set "B="
141
+ for /f "tokens=1,2 delims=,-" %%a in ("!RANGE!") do (
142
+ set "A=%%a"
143
+ if not "%%b"=="" set "B=%%b"
144
+ )
145
+ if "!A!"=="" (
146
+ echo !C_RED![X]!C_RESET! Rango invalido.
147
+ goto :end
148
+ )
149
+ if "!B!"=="" set "B=!A!"
150
+
151
+ if /i "!A!"=="W" (
152
+ echo !C_RED![X]!C_RESET! El primer valor debe ser indice numerico. Formato: !C_YELLOW!5,W!C_RESET!
153
+ goto :end
154
+ )
155
+ if /i "!A!"=="WORK" (
156
+ echo !C_RED![X]!C_RESET! El primer valor debe ser indice numerico. Formato: !C_YELLOW!5,W!C_RESET!
157
+ goto :end
158
+ )
159
+ if /i "!A!"=="HEAD" (
160
+ echo !C_RED![X]!C_RESET! El primer valor debe ser indice numerico. Formato: !C_YELLOW!5,W!C_RESET!
161
+ goto :end
162
+ )
163
+
164
+ set "HA=!H_%A%!"
165
+ if "!HA!"=="" (
166
+ echo !C_RED![X]!C_RESET! Indice !A! no existe.
167
+ goto :end
168
+ )
169
+
170
+ set "H_NEW="
171
+ set "H_OLD=!HA!"
172
+ set "IS_WORK=0"
173
+
174
+ if /i "!B!"=="W" set "IS_WORK=1"
175
+ if /i "!B!"=="WORK" set "IS_WORK=1"
176
+ if /i "!B!"=="HEAD" set "IS_WORK=1"
177
+
178
+ if "!IS_WORK!"=="1" (
179
+ set "H_OLD=!HA!"
180
+ set "H_NEW="
181
+ set "OLD_IDX=!A!"
182
+ set "NEW_IDX=WORK"
183
+ set "NEW_LABEL=working tree"
184
+ ) else (
185
+ set "HB=!H_%B%!"
186
+ if "!HB!"=="" (
187
+ echo !C_RED![X]!C_RESET! Indice !B! no existe.
188
+ goto :end
189
+ )
190
+ set "OLD_IDX=!A!"
191
+ set "NEW_IDX=!B!"
192
+ if !A! LSS !B! (
193
+ set "OLD_IDX=!B!"
194
+ set "NEW_IDX=!A!"
195
+ )
196
+ set "H_OLD=!H_%OLD_IDX%!"
197
+ set "H_NEW=!H_%NEW_IDX%!"
198
+ set "NEW_LABEL=!H_NEW!"
199
+ )
200
+
201
+ echo.
202
+ echo !C_CYAN!-------------------------------------------------------------!C_RESET! !C_GRAY!Comparando:!C_RESET!
203
+ echo !C_GRAY![antiguo]!C_RESET! !C_YELLOW!!H_OLD!!C_RESET! !C_GRAY!^(idx !OLD_IDX!^)!C_RESET!
204
+ if "!IS_WORK!"=="1" (
205
+ echo !C_GRAY![reciente]!C_RESET! !C_GREEN!working tree!C_RESET!
206
+ ) else (
207
+ echo !C_GRAY![reciente]!C_RESET! !C_YELLOW!!H_NEW!!C_RESET! !C_GRAY!^(idx !NEW_IDX!^)!C_RESET!
208
+ )
209
+ echo.
210
+
211
+ REM - 7. Crear audits/ -
212
+ if not exist "audits" mkdir "audits"
213
+
214
+ for /f %%i in ('powershell -NoProfile -Command "Get-Date -Format yyyy-MM-dd_HHmmss"') do set "TS=%%i"
215
+
216
+ if "!IS_WORK!"=="1" (
217
+ set "REPORT=audits\audit_!TS!_!OLD_IDX!-WORK.txt"
218
+ ) else (
219
+ set "REPORT=audits\audit_!TS!_!OLD_IDX!-!NEW_IDX!.txt"
220
+ )
221
+
222
+ REM - 8. Escribir reporte (SIN colores) -
223
+ (
224
+ echo # Reporte de auditoria
225
+ echo.
226
+ echo # Generado: %DATE% %TIME%
227
+ echo # Proyecto: %CD%
228
+ echo # Rango: !H_OLD! -^> !NEW_LABEL!
229
+ echo.
230
+ if "!IS_WORK!"=="1" (
231
+ echo # Comparar: git diff !H_OLD!
232
+ ) else (
233
+ echo # Comparar: git diff !H_OLD! !H_NEW!
234
+ )
235
+ echo.
236
+ echo # ============================================================
237
+ echo # COMMITS EN EL RANGO
238
+ echo # ============================================================
239
+ echo.
240
+ if "!IS_WORK!"=="1" (
241
+ git log !H_OLD!..HEAD --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:" %%ad %%h %%s"
242
+ ) else (
243
+ git log !H_OLD!^..!H_NEW! --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:" %%ad %%h %%s"
244
+ )
245
+ echo.
246
+ echo.
247
+ echo # ============================================================
248
+ echo # DIFF COMPLETO
249
+ echo # ============================================================
250
+ echo.
251
+ if "!IS_WORK!"=="1" (
252
+ git diff !H_OLD!
253
+ ) else (
254
+ git diff !H_OLD! !H_NEW!
255
+ )
256
+ echo.
257
+ echo.
258
+ echo # ============================================================
259
+ echo # ESTADO ACTUAL (sin commitear)
260
+ echo # ============================================================
261
+ echo.
262
+ git status -short
263
+ ) > "!REPORT!" 2>&1
264
+
265
+ REM - 9. Resumen -
266
+ echo !C_GREEN![OK]!C_RESET! Reporte generado
267
+ echo.
268
+ for %%f in ("!REPORT!") do set "SIZE=%%~zf"
269
+ for /f %%l in ('find /c /v "" ^< "!REPORT!"') do set "LINES=%%l"
270
+
271
+ echo !C_GRAY!Archivo:!C_RESET! !C_WHITE!!REPORT!!C_RESET!
272
+ echo !C_GRAY!Tamano:!C_RESET! !C_WHITE!!SIZE! bytes!C_RESET!
273
+ echo !C_GRAY!Lineas:!C_RESET! !C_WHITE!!LINES!!C_RESET!
274
+ echo.
275
+
276
+ REM - 10. Abrir -
277
+ where code >nul 2>nul
278
+ if not errorlevel 1 (
279
+ set "OPEN="
280
+ set /p "OPEN= !C_BCYAN!Abrir en VS Code?!C_RESET! !C_GRAY![S/n]!C_RESET!: "
281
+ if /i not "!OPEN!"=="n" (
282
+ echo !C_GRAY!Abriendo...!C_RESET!
283
+ code "!REPORT!"
284
+ )
285
+ ) else (
286
+ echo !C_GRAY![INFO] VS Code CLI no disponible.!C_RESET!
287
+ )
288
+
289
+ echo.
290
+ goto :end
291
+
292
+ REM ============================================================
293
+ REM :help
294
+ REM ============================================================
295
+ :help
296
+ echo.
297
+ echo !C_CYAN!============================================!C_RESET!
298
+ echo !C_BCYAN! AUDITAR!C_RESET! !C_GRAY!- Ayuda!C_RESET!
299
+ echo !C_CYAN!============================================!C_RESET!
300
+ echo.
301
+ echo !C_BCYAN!USO:!C_RESET!
302
+ echo !C_WHITE!auditar.cmd!C_RESET! Modo interactivo
303
+ echo !C_WHITE!auditar.cmd -help!C_RESET! Esta ayuda
304
+ echo.
305
+ echo !C_BCYAN!QUE HACE:!C_RESET!
306
+ echo !C_GRAY!Genera un reporte .txt en audits/ con los cambios!C_RESET!
307
+ echo !C_GRAY!entre dos puntos del historial Git.!C_RESET!
308
+ echo.
309
+ echo !C_BCYAN!MODOS:!C_RESET!
310
+ echo !C_YELLOW!0,W!C_RESET! !C_GRAY!Comparar ultimo commit vs estado actual!C_RESET! !C_GREEN![recomendado]!C_RESET!
311
+ echo !C_YELLOW!0,3!C_RESET! !C_GRAY!Comparar commit 0 vs commit 3!C_RESET!
312
+ echo !C_YELLOW!0-3!C_RESET! !C_GRAY!Alias de 0,3!C_RESET!
313
+ echo !C_YELLOW![Enter]!C_RESET! !C_GRAY!Solo ver historial!C_RESET!
314
+ echo.
315
+ echo !C_BCYAN!EJEMPLOS:!C_RESET!
316
+ echo !C_WHITE!auditar.cmd!C_RESET!
317
+ echo !C_GRAY!Cuantos commits? 10!C_RESET!
318
+ echo !C_GRAY!Rango: 0,W!C_RESET!
319
+ echo !C_GRAY!-> audits\audit_2026-09-12_163200_0-WORK.txt!C_RESET!
320
+ echo.
321
+ echo !C_BCYAN!SALIDA:!C_RESET!
322
+ echo !C_GRAY!Los reportes se guardan en audits\!C_RESET!
323
+ echo !C_GRAY!(excluida del repo por .gitignore^)!C_RESET!
324
+ echo.
325
+ goto :end
326
+
327
+ :end
328
+ call :shell_if_double_click
329
+ endlocal
330
+ exit /b 0
331
+
332
+ :shell_if_double_click
333
+ if "%NO_PAUSE%"=="1" goto :eof
334
+ echo %cmdcmdline% | find /i "%~nx0" >nul
335
+ if errorlevel 1 goto :eof
336
+ echo.
337
+ echo Sesion interactiva. Escribe 'exit' para cerrar.
338
+ echo.
339
+ cmd /k
340
+ goto :eof
@@ -0,0 +1,85 @@
1
+ @echo off
2
+ setlocal EnableDelayedExpansion
3
+ chcp 65001 >nul 2>nul
4
+
5
+ cd /d "%~dp0..\.."
6
+
7
+ REM --- Colores ANSI ---
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
+ echo.
20
+ echo !C_CY!============================================!C_RS!
21
+ echo !C_BC! HISTORIAL!C_RS! !C_GY!- Vista rapida del proyecto!C_RS!
22
+ echo !C_CY!============================================!C_RS!
23
+ echo.
24
+
25
+ REM --- COMMITS ---
26
+ if not exist ".git" (
27
+ echo !C_RE![X]!C_RS! Sin repositorio Git.
28
+ goto :tags
29
+ )
30
+
31
+ echo !C_CY!-------------------------------------------------------------!C_RS!
32
+ echo !C_BC! ULTIMOS 20 COMMITS!C_RS!
33
+ echo !C_CY!-------------------------------------------------------------!C_RS!
34
+ echo !C_GY! IDX FECHA HASH MENSAJE!C_RS!
35
+ echo !C_CY!-------------------------------------------------------------!C_RS!
36
+
37
+ git log -n 20 --date=format:"%%Y-%%m-%%d %%H:%%M:%%S" --pretty=format:"%%h %%ad %%s" > "%TEMP%\fgh_log.txt" 2>nul
38
+
39
+ set "IDX=0"
40
+ for /f "delims=" %%L in ('type "%TEMP%\fgh_log.txt"') do (
41
+ set "LINE=%%L"
42
+ set "HASH=!LINE:~0,7!"
43
+ set "DT=!LINE:~8,19!"
44
+ set "MSG=!LINE:~28!"
45
+ echo !C_YE![!IDX!]!C_RS! !C_GY!!DT!!C_RS! !C_YE!!HASH!!C_RS! !C_WH!!MSG!!C_RS!
46
+ set /a IDX+=1
47
+ )
48
+ del "%TEMP%\fgh_log.txt" >nul 2>nul
49
+ echo !C_CY!-------------------------------------------------------------!C_RS!
50
+ echo.
51
+
52
+ :tags
53
+ echo !C_CY!-------------------------------------------------------------!C_RS!
54
+ echo !C_BC! TAGS!C_RS!
55
+ echo !C_CY!-------------------------------------------------------------!C_RS!
56
+ if exist ".git" git tag -l
57
+ echo.
58
+
59
+ echo !C_CY!-------------------------------------------------------------!C_RS!
60
+ echo !C_BC! SNAPSHOTS!C_RS!
61
+ echo !C_CY!-------------------------------------------------------------!C_RS!
62
+ if exist "versiones" goto :show_snaps
63
+ echo !C_GY!sin snapshots!C_RS!
64
+ goto :end_snaps
65
+
66
+ :show_snaps
67
+ dir /b /o-n "versiones" 2>nul
68
+
69
+ :end_snaps
70
+ echo !C_CY!-------------------------------------------------------------!C_RS!
71
+ echo.
72
+
73
+ call :shell_if_double_click
74
+ endlocal
75
+ exit /b 0
76
+
77
+ :shell_if_double_click
78
+ if "%NO_PAUSE%"=="1" goto :eof
79
+ echo %cmdcmdline% | find /i "%~nx0" >nul
80
+ if errorlevel 1 goto :eof
81
+ echo.
82
+ echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
83
+ echo.
84
+ cmd /k
85
+ goto :eof
@@ -0,0 +1,97 @@
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
+ echo.
20
+ echo !C_CY!============================================!C_RS!
21
+ echo !C_BC! SUBIR!C_RS! !C_GY!- Push a GitHub!C_RS!
22
+ echo !C_CY!============================================!C_RS!
23
+ echo.
24
+
25
+ if not exist ".git" (
26
+ echo !C_RE![X]!C_RS! No hay repositorio Git. Ejecuta: !C_WH!init.cmd!C_RS!
27
+ call :shell_if_double_click
28
+ exit /b 1
29
+ )
30
+
31
+ git diff --cached --quiet
32
+ set "STAGED=!ERRORLEVEL!"
33
+ git diff --quiet
34
+ set "UNSTAGED=!ERRORLEVEL!"
35
+
36
+ if !STAGED! NEQ 0 goto :has_changes
37
+ if !UNSTAGED! NEQ 0 goto :has_changes
38
+ goto :check_remote
39
+
40
+ :has_changes
41
+ echo !C_YE![!]!C_RS! Hay cambios sin commitear.
42
+ echo.
43
+ set "SAVE="
44
+ set /p "SAVE= !C_BC!Guardar cambios primero?!C_RS! !C_GY![S/n]!C_RS!: "
45
+ if /i "!SAVE!"=="n" goto :check_remote
46
+ echo.
47
+ set "SKIP_HISTORIAL=1"
48
+ set "NO_PAUSE=1"
49
+ call "%~dp0save.cmd"
50
+ set "SKIP_HISTORIAL="
51
+ set "NO_PAUSE="
52
+ echo.
53
+
54
+ :check_remote
55
+ git remote get-url origin >nul 2>nul
56
+ if errorlevel 1 (
57
+ echo !C_RE![X]!C_RS! No hay remote 'origin' configurado.
58
+ echo.
59
+ echo !C_GY!Para vincular tu repo a GitHub:!C_RS!
60
+ echo.
61
+ echo !C_WH!git remote add origin https://github.com/TU-USUARIO/TU-REPO.git!C_RS!
62
+ echo.
63
+ call :shell_if_double_click
64
+ exit /b 1
65
+ )
66
+
67
+ echo !C_GY!Subiendo a GitHub...!C_RS!
68
+ echo.
69
+
70
+ git push -u origin main --follow-tags
71
+ set "RC=!ERRORLEVEL!"
72
+
73
+ echo.
74
+ if !RC! EQU 0 (
75
+ echo !C_GR![OK]!C_RS! Push completado
76
+ ) else (
77
+ echo !C_RE![ERROR]!C_RS! Push fallo con codigo !RC!
78
+ )
79
+ echo.
80
+
81
+ set "NO_PAUSE=1"
82
+ call "%~dp0historial.cmd"
83
+ set "NO_PAUSE="
84
+
85
+ call :shell_if_double_click
86
+ endlocal
87
+ exit /b 0
88
+
89
+ :shell_if_double_click
90
+ if "%NO_PAUSE%"=="1" goto :eof
91
+ echo %cmdcmdline% | find /i "%~nx0" >nul
92
+ if errorlevel 1 goto :eof
93
+ echo.
94
+ echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
95
+ echo.
96
+ cmd /k
97
+ goto :eof
@@ -0,0 +1,73 @@
1
+ @echo off
2
+ setlocal EnableDelayedExpansion
3
+ chcp 65001 >nul 2>nul
4
+
5
+ cd /d "%~dp0..\.."
6
+
7
+ for /F %%a in ('echo prompt $E ^| cmd') do set "ESC=%%a"
8
+ if "!ESC!"=="" (
9
+ set "C_CY=" & set "C_BC=" & set "C_GR=" & set "C_YE="
10
+ set "C_RE=" & set "C_GY=" & set "C_WH=" & set "C_RS="
11
+ ) else (
12
+ set "C_CY=!ESC![36m" & set "C_BC=!ESC![96m"
13
+ set "C_GR=!ESC![32m" & set "C_YE=!ESC![33m"
14
+ set "C_RE=!ESC![31m" & set "C_GY=!ESC![90m"
15
+ set "C_WH=!ESC![97m" & set "C_RS=!ESC![0m"
16
+ )
17
+
18
+ if not exist ".git" (
19
+ echo !C_RE![X]!C_RS! No hay repositorio Git. Ejecuta: !C_WH!init.cmd!C_RS!
20
+ exit /b 1
21
+ )
22
+
23
+ git add -A >nul 2>nul
24
+ git diff --cached --quiet
25
+ if not errorlevel 1 (
26
+ echo !C_GY!Sin cambios para guardar.!C_RS!
27
+ exit /b 0
28
+ )
29
+
30
+ echo.
31
+ echo !C_CY!------------------------------------------------------------!C_RS!
32
+ echo !C_BC! GUARDAR!C_RS! !C_GY!- Commit local!C_RS!
33
+ echo !C_CY!------------------------------------------------------------!C_RS!
34
+ echo.
35
+ echo !C_GY!Archivos a guardar:!C_RS!
36
+ git diff --cached --name-only | findstr /n "^"
37
+ echo.
38
+ echo !C_GY!Evita usar: " # : + / , en el mensaje!C_RS!
39
+ echo.
40
+ echo !C_BC!Mensaje del commit!C_RS! !C_GY![Enter = Sin definir]!C_RS!
41
+ set "MSG="
42
+ set /p MSG=
43
+ if "!MSG!"=="" set "MSG=Sin definir"
44
+
45
+ git commit -q -m "!MSG!"
46
+ if errorlevel 1 (
47
+ echo.
48
+ echo !C_RE![X]!C_RS! Commit fallo. Revisa el mensaje.
49
+ exit /b 1
50
+ )
51
+ echo.
52
+ echo !C_GR![OK]!C_RS! Commit: !C_WH!!MSG!!C_RS!
53
+ echo.
54
+
55
+ if "%SKIP_HISTORIAL%"=="1" goto :skip_hist
56
+ set "NO_PAUSE=1"
57
+ call "%~dp0historial.cmd"
58
+ set "NO_PAUSE="
59
+ :skip_hist
60
+
61
+ call :shell_if_double_click
62
+ endlocal
63
+ exit /b 0
64
+
65
+ :shell_if_double_click
66
+ if "%NO_PAUSE%"=="1" goto :eof
67
+ echo %cmdcmdline% | find /i "%~nx0" >nul
68
+ if errorlevel 1 goto :eof
69
+ echo.
70
+ echo !C_GY!Sesion interactiva. Escribe 'exit' para cerrar.!C_RS!
71
+ echo.
72
+ cmd /k
73
+ goto :eof