forgegit 1.4.1 → 1.5.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/{config.cmd → .forge/config.cmd} +1 -1
- package/.forge/init.cmd +99 -126
- package/WORKFLOW.md +354 -0
- package/forge.cmd +9 -3
- package/package.json +3 -6
- package/init.cmd +0 -200
- package/lib/git-ops.cmd +0 -92
- package/lib/templates.cmd +0 -98
- package/lib/ui.cmd +0 -59
- package/templates/abrir.cmd.tpl +0 -51
- package/templates/auditar.cmd.tpl +0 -340
- package/templates/forge.cmd.tpl +0 -114
- package/templates/gitignore.tpl +0 -78
- package/templates/historial.cmd.tpl +0 -85
- package/templates/push.cmd.tpl +0 -97
- package/templates/readme.md.tpl +0 -34
- package/templates/save.cmd.tpl +0 -73
- package/templates/snapshots.cmd.tpl +0 -329
- /package/{templates/serve.cmd.tpl → .forge/commands/serve.cmd} +0 -0
- /package/{templates → .forge}/serve-static.js +0 -0
package/templates/push.cmd.tpl
DELETED
|
@@ -1,97 +0,0 @@
|
|
|
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! PUSH!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 "guardar.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
|
package/templates/readme.md.tpl
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
# {{PROJECT_NAME}}
|
|
2
|
-
|
|
3
|
-
Proyecto inicializado con `forge.cmd`.
|
|
4
|
-
|
|
5
|
-
## Estructura
|
|
6
|
-
|
|
7
|
-
- `forge.cmd` - Menu interactivo + CLI
|
|
8
|
-
- `.forge/` - Infraestructura (helpers, templates, lib)
|
|
9
|
-
|
|
10
|
-
## Comandos
|
|
11
|
-
|
|
12
|
-
### CLI directo
|
|
13
|
-
|
|
14
|
-
forge Menu interactivo
|
|
15
|
-
forge save Commit de cambios
|
|
16
|
-
forge push Push a GitHub
|
|
17
|
-
forge log Ver commits recientes
|
|
18
|
-
forge snap Crear/restaurar snapshots
|
|
19
|
-
forge audit Generar reporte diff
|
|
20
|
-
forge open Abrir en VS Code
|
|
21
|
-
forge help Ayuda completa
|
|
22
|
-
|
|
23
|
-
### Helper scripts en .forge/commands/
|
|
24
|
-
|
|
25
|
-
- save.cmd - Commit
|
|
26
|
-
- push.cmd - Push a GitHub
|
|
27
|
-
- snapshots.cmd - Backups
|
|
28
|
-
- historial.cmd - Log
|
|
29
|
-
- auditar.cmd - Reportes
|
|
30
|
-
- abrir.cmd - VS Code
|
|
31
|
-
|
|
32
|
-
---
|
|
33
|
-
|
|
34
|
-
Generado por forge-git v{{FG_VERSION}}
|
package/templates/save.cmd.tpl
DELETED
|
@@ -1,73 +0,0 @@
|
|
|
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 SAVE.!C_RS!
|
|
27
|
-
exit /b 0
|
|
28
|
-
)
|
|
29
|
-
|
|
30
|
-
echo.
|
|
31
|
-
echo !C_CY!------------------------------------------------------------!C_RS!
|
|
32
|
-
echo !C_BC! SAVE!C_RS! !C_GY!- Commit local!C_RS!
|
|
33
|
-
echo !C_CY!------------------------------------------------------------!C_RS!
|
|
34
|
-
echo.
|
|
35
|
-
echo !C_GY!Archivos a SAVE:!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
|
|
@@ -1,329 +0,0 @@
|
|
|
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
|
|
File without changes
|
|
File without changes
|