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.
- package/.forge/commands/.gitkeep +0 -0
- package/.forge/commands/abrir.cmd +51 -0
- package/.forge/commands/auditar.cmd +340 -0
- package/.forge/commands/historial.cmd +85 -0
- package/.forge/commands/push.cmd +97 -0
- package/.forge/commands/save.cmd +73 -0
- package/.forge/commands/snapshots.cmd +329 -0
- package/.forge/init.cmd +200 -0
- package/.forge/lib/.gitkeep +0 -0
- package/.forge/lib/git-ops.cmd +92 -0
- package/.forge/lib/templates.cmd +98 -0
- package/.forge/lib/ui.cmd +59 -0
- package/.forge/templates/.gitkeep +0 -0
- package/.forge/templates/abrir.cmd.tpl +51 -0
- package/.forge/templates/auditar.cmd.tpl +340 -0
- package/.forge/templates/forge.cmd.tpl +114 -0
- package/.forge/templates/gitignore.tpl +78 -0
- package/.forge/templates/historial.cmd.tpl +85 -0
- package/.forge/templates/push.cmd.tpl +97 -0
- package/.forge/templates/readme.md.tpl +34 -0
- package/.forge/templates/save.cmd.tpl +73 -0
- package/.forge/templates/serve-static.js +86 -0
- package/.forge/templates/serve.cmd.tpl +209 -0
- package/.forge/templates/snapshots.cmd.tpl +329 -0
- package/config.cmd +1 -1
- package/forge.cmd +114 -0
- package/package.json +38 -36
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
REM ============================================================
|
|
3
|
+
REM forge-git / lib/templates.cmd
|
|
4
|
+
REM Copies templates from templates/ to destinations
|
|
5
|
+
REM ============================================================
|
|
6
|
+
|
|
7
|
+
if "%~1"=="write_gitignore" goto :write_gitignore
|
|
8
|
+
if "%~1"=="write_readme" goto :write_readme
|
|
9
|
+
if "%~1"=="write_forge" goto :write_forge
|
|
10
|
+
if "%~1"=="write_save" goto :write_save
|
|
11
|
+
if "%~1"=="write_push" goto :write_push
|
|
12
|
+
if "%~1"=="write_snapshots" goto :write_snapshots
|
|
13
|
+
if "%~1"=="write_historial" goto :write_historial
|
|
14
|
+
if "%~1"=="write_abrir" goto :write_abrir
|
|
15
|
+
if "%~1"=="write_auditar" goto :write_auditar
|
|
16
|
+
if "%~1"=="write_serve" goto :write_serve
|
|
17
|
+
goto :eof
|
|
18
|
+
|
|
19
|
+
:write_gitignore
|
|
20
|
+
call :copy_root "gitignore.tpl" ".gitignore"
|
|
21
|
+
goto :eof
|
|
22
|
+
|
|
23
|
+
:write_readme
|
|
24
|
+
call :apply_root "readme.md.tpl" "README.md"
|
|
25
|
+
goto :eof
|
|
26
|
+
|
|
27
|
+
:write_forge
|
|
28
|
+
call :copy_root "forge.cmd.tpl" "forge.cmd"
|
|
29
|
+
goto :eof
|
|
30
|
+
|
|
31
|
+
:write_save
|
|
32
|
+
call :copy_cmd "save.cmd.tpl" "save.cmd"
|
|
33
|
+
goto :eof
|
|
34
|
+
|
|
35
|
+
:write_push
|
|
36
|
+
call :copy_cmd "push.cmd.tpl" "push.cmd"
|
|
37
|
+
goto :eof
|
|
38
|
+
|
|
39
|
+
:write_snapshots
|
|
40
|
+
call :copy_cmd "snapshots.cmd.tpl" "snapshots.cmd"
|
|
41
|
+
goto :eof
|
|
42
|
+
|
|
43
|
+
:write_historial
|
|
44
|
+
call :copy_cmd "historial.cmd.tpl" "historial.cmd"
|
|
45
|
+
goto :eof
|
|
46
|
+
|
|
47
|
+
:write_abrir
|
|
48
|
+
call :copy_cmd "abrir.cmd.tpl" "abrir.cmd"
|
|
49
|
+
goto :eof
|
|
50
|
+
|
|
51
|
+
:write_auditar
|
|
52
|
+
call :copy_cmd "auditar.cmd.tpl" "auditar.cmd"
|
|
53
|
+
goto :eof
|
|
54
|
+
|
|
55
|
+
:write_serve
|
|
56
|
+
call :copy_cmd "serve.cmd.tpl" "serve.cmd"
|
|
57
|
+
call :copy_forge_root "serve-static.js" "serve-static.js"
|
|
58
|
+
goto :eof
|
|
59
|
+
|
|
60
|
+
:copy_root
|
|
61
|
+
set "SRC=%~dp0..\templates\%~1"
|
|
62
|
+
set "DST=%~dp0..\..\%~2"
|
|
63
|
+
if not exist "%SRC%" (
|
|
64
|
+
echo [X] Template no encontrado: %SRC%
|
|
65
|
+
exit /b 1
|
|
66
|
+
)
|
|
67
|
+
copy /Y "%SRC%" "%DST%" >nul
|
|
68
|
+
exit /b 0
|
|
69
|
+
|
|
70
|
+
:copy_cmd
|
|
71
|
+
set "SRC=%~dp0..\templates\%~1"
|
|
72
|
+
set "DST=%~dp0..\commands\%~2"
|
|
73
|
+
if not exist "%SRC%" (
|
|
74
|
+
echo [X] Template no encontrado: %SRC%
|
|
75
|
+
exit /b 1
|
|
76
|
+
)
|
|
77
|
+
copy /Y "%SRC%" "%DST%" >nul
|
|
78
|
+
exit /b 0
|
|
79
|
+
|
|
80
|
+
:copy_forge_root
|
|
81
|
+
set "SRC=%~dp0..\templates\%~1"
|
|
82
|
+
set "DST=%~dp0..\%~2"
|
|
83
|
+
if not exist "%SRC%" (
|
|
84
|
+
echo [X] Template no encontrado: %SRC%
|
|
85
|
+
exit /b 1
|
|
86
|
+
)
|
|
87
|
+
copy /Y "%SRC%" "%DST%" >nul
|
|
88
|
+
exit /b 0
|
|
89
|
+
|
|
90
|
+
:apply_root
|
|
91
|
+
set "SRC=%~dp0..\templates\%~1"
|
|
92
|
+
set "DST=%~dp0..\..\%~2"
|
|
93
|
+
if not exist "%SRC%" (
|
|
94
|
+
echo [X] Template no encontrado: %SRC%
|
|
95
|
+
exit /b 1
|
|
96
|
+
)
|
|
97
|
+
powershell -NoProfile -ExecutionPolicy Bypass -Command "$c = Get-Content -Raw -LiteralPath '%SRC%'; $c = $c.Replace('{{PROJECT_NAME}}', '%PROJECT_NAME%'); $c = $c.Replace('{{FG_VERSION}}', '%FG_VERSION%'); [System.IO.File]::WriteAllText('%DST%', $c, [System.Text.UTF8Encoding]::new($false))"
|
|
98
|
+
exit /b 0
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
@echo off
|
|
2
|
+
REM ============================================================
|
|
3
|
+
REM forge-git / lib/ui.cmd
|
|
4
|
+
REM UI helpers
|
|
5
|
+
REM ============================================================
|
|
6
|
+
|
|
7
|
+
if "%~1"=="banner" goto :banner
|
|
8
|
+
if "%~1"=="step" goto :step
|
|
9
|
+
if "%~1"=="done" goto :done
|
|
10
|
+
if "%~1"=="abort" goto :abort
|
|
11
|
+
goto :eof
|
|
12
|
+
|
|
13
|
+
:banner
|
|
14
|
+
echo.
|
|
15
|
+
echo ############################################
|
|
16
|
+
echo # forge-git v%FG_VERSION% #
|
|
17
|
+
echo # Bootstrap universal de proyecto #
|
|
18
|
+
echo ############################################
|
|
19
|
+
echo.
|
|
20
|
+
echo Proyecto: %PROJECT_NAME%
|
|
21
|
+
echo Ruta: %CD%
|
|
22
|
+
echo.
|
|
23
|
+
goto :eof
|
|
24
|
+
|
|
25
|
+
:step
|
|
26
|
+
echo [%~2] %~3 %~4
|
|
27
|
+
goto :eof
|
|
28
|
+
|
|
29
|
+
:done
|
|
30
|
+
echo.
|
|
31
|
+
echo ############################################
|
|
32
|
+
echo # Bootstrap completado #
|
|
33
|
+
echo ############################################
|
|
34
|
+
echo.
|
|
35
|
+
echo Comandos disponibles:
|
|
36
|
+
echo.
|
|
37
|
+
echo Esenciales:
|
|
38
|
+
echo init.cmd Bootstrap
|
|
39
|
+
echo forge.cmd Menu interactivo
|
|
40
|
+
echo.
|
|
41
|
+
echo Uso CLI directo:
|
|
42
|
+
echo forge save Commit de cambios
|
|
43
|
+
echo forge push Push a GitHub
|
|
44
|
+
echo forge log Ver commits
|
|
45
|
+
echo.
|
|
46
|
+
echo Otros:
|
|
47
|
+
echo forge snap Snapshots
|
|
48
|
+
echo forge audit Reporte diff
|
|
49
|
+
echo forge open Abrir en VS Code
|
|
50
|
+
echo forge serve Servidor de desarrollo
|
|
51
|
+
echo forge help Ayuda completa
|
|
52
|
+
echo.
|
|
53
|
+
goto :eof
|
|
54
|
+
|
|
55
|
+
:abort
|
|
56
|
+
echo.
|
|
57
|
+
echo Bootstrap abortado. Instala los requisitos y vuelve a intentar.
|
|
58
|
+
pause
|
|
59
|
+
goto :eof
|
|
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,114 @@
|
|
|
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
|
+
set "CMD_DIR=.forge\commands"
|
|
20
|
+
|
|
21
|
+
REM --- Verificar instalacion ---
|
|
22
|
+
if not exist "%CMD_DIR%\save.cmd" (
|
|
23
|
+
echo.
|
|
24
|
+
echo !C_RE![X]!C_RS! forgeGit no esta instalado aqui.
|
|
25
|
+
echo !C_GY!Ejecuta desde un proyecto nuevo:!C_RS! forge
|
|
26
|
+
echo.
|
|
27
|
+
pause
|
|
28
|
+
exit /b 1
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
REM --- Modo CLI directo ---
|
|
32
|
+
if not "%~1"=="" (
|
|
33
|
+
if /i "%~1"=="save" ( call "%CMD_DIR%\save.cmd" & exit /b 0 )
|
|
34
|
+
if /i "%~1"=="push" ( call "%CMD_DIR%\push.cmd" & exit /b 0 )
|
|
35
|
+
if /i "%~1"=="snap" ( call "%CMD_DIR%\snapshots.cmd" & exit /b 0 )
|
|
36
|
+
if /i "%~1"=="log" ( call "%CMD_DIR%\historial.cmd" & exit /b 0 )
|
|
37
|
+
if /i "%~1"=="audit" ( call "%CMD_DIR%\auditar.cmd" & exit /b 0 )
|
|
38
|
+
if /i "%~1"=="open" ( call "%CMD_DIR%\abrir.cmd" & exit /b 0 )
|
|
39
|
+
if /i "%~1"=="serve" ( call "%CMD_DIR%\serve.cmd" & exit /b 0 )
|
|
40
|
+
if /i "%~1"=="help" goto :help
|
|
41
|
+
if /i "%~1"=="-h" goto :help
|
|
42
|
+
if /i "%~1"=="--help" goto :help
|
|
43
|
+
echo !C_RE![X]!C_RS! Comando desconocido: %~1
|
|
44
|
+
echo !C_GY!Usa: forge help!C_RS!
|
|
45
|
+
exit /b 1
|
|
46
|
+
)
|
|
47
|
+
|
|
48
|
+
REM ============================================================
|
|
49
|
+
REM MENU PRINCIPAL
|
|
50
|
+
REM ============================================================
|
|
51
|
+
:menu
|
|
52
|
+
cls
|
|
53
|
+
echo.
|
|
54
|
+
echo !C_CY!============================================!C_RS!
|
|
55
|
+
echo !C_BC! forgeGit!C_RS! !C_GY!- Menu!C_RS!
|
|
56
|
+
echo !C_CY!============================================!C_RS!
|
|
57
|
+
echo.
|
|
58
|
+
echo !C_BC!Trabajo diario:!C_RS!
|
|
59
|
+
echo !C_YE![1]!C_RS! Guardar cambios !C_GY!(commit)!C_RS!
|
|
60
|
+
echo !C_YE![2]!C_RS! Subir a GitHub !C_GY!(push)!C_RS!
|
|
61
|
+
echo !C_YE![3]!C_RS! Historial !C_GY!(ver commits)!C_RS!
|
|
62
|
+
echo.
|
|
63
|
+
echo !C_BC!Herramientas:!C_RS!
|
|
64
|
+
echo !C_YE![4]!C_RS! Snapshots !C_GY!(backup/restore)!C_RS!
|
|
65
|
+
echo !C_YE![5]!C_RS! Auditar cambios !C_GY!(diff report)!C_RS!
|
|
66
|
+
echo !C_YE![6]!C_RS! Abrir en VS Code
|
|
67
|
+
echo !C_YE![7]!C_RS! Servidor dev !C_GY!(auto-detect)!C_RS!
|
|
68
|
+
echo.
|
|
69
|
+
echo !C_BC!Sistema:!C_RS!
|
|
70
|
+
echo !C_YE![0]!C_RS! Salir
|
|
71
|
+
echo.
|
|
72
|
+
echo !C_CY!--------------------------------------------!C_RS!
|
|
73
|
+
echo.
|
|
74
|
+
|
|
75
|
+
set "OPT="
|
|
76
|
+
set /p "OPT= !C_BC!Opcion!C_RS!: "
|
|
77
|
+
|
|
78
|
+
if "!OPT!"=="1" ( call "%CMD_DIR%\save.cmd" & echo. & pause & goto :menu )
|
|
79
|
+
if "!OPT!"=="2" ( call "%CMD_DIR%\push.cmd" & echo. & pause & goto :menu )
|
|
80
|
+
if "!OPT!"=="3" ( call "%CMD_DIR%\historial.cmd" & echo. & pause & goto :menu )
|
|
81
|
+
if "!OPT!"=="4" ( call "%CMD_DIR%\snapshots.cmd" & echo. & pause & goto :menu )
|
|
82
|
+
if "!OPT!"=="5" ( call "%CMD_DIR%\auditar.cmd" & echo. & pause & goto :menu )
|
|
83
|
+
if "!OPT!"=="6" ( call "%CMD_DIR%\abrir.cmd" & echo. & pause & goto :menu )
|
|
84
|
+
if "!OPT!"=="7" ( call "%CMD_DIR%\serve.cmd" & echo. & pause & goto :menu )
|
|
85
|
+
if "!OPT!"=="0" goto :end
|
|
86
|
+
if /i "!OPT!"=="q" goto :end
|
|
87
|
+
|
|
88
|
+
goto :menu
|
|
89
|
+
|
|
90
|
+
REM ============================================================
|
|
91
|
+
REM HELP
|
|
92
|
+
REM ============================================================
|
|
93
|
+
:help
|
|
94
|
+
echo.
|
|
95
|
+
echo !C_CY!============================================!C_RS!
|
|
96
|
+
echo !C_BC! forgeGit!C_RS! !C_GY!- Ayuda!C_RS!
|
|
97
|
+
echo !C_CY!============================================!C_RS!
|
|
98
|
+
echo.
|
|
99
|
+
echo !C_BC!USO:!C_RS!
|
|
100
|
+
echo !C_WH!forge!C_RS! Menu interactivo
|
|
101
|
+
echo !C_WH!forge save!C_RS! Guardar cambios
|
|
102
|
+
echo !C_WH!forge push!C_RS! Subir a GitHub
|
|
103
|
+
echo !C_WH!forge snap!C_RS! Snapshots
|
|
104
|
+
echo !C_WH!forge log!C_RS! Historial
|
|
105
|
+
echo !C_WH!forge audit!C_RS! Auditar cambios
|
|
106
|
+
echo !C_WH!forge open!C_RS! Abrir en VS Code
|
|
107
|
+
echo !C_WH!forge serve!C_RS! Servidor de desarrollo
|
|
108
|
+
echo !C_WH!forge help!C_RS! Esta ayuda
|
|
109
|
+
echo.
|
|
110
|
+
goto :end
|
|
111
|
+
|
|
112
|
+
:end
|
|
113
|
+
endlocal
|
|
114
|
+
exit /b 0
|