Operaciones en lote seguras: dry-run, marcador y repositorio sucio
Poner un enlace de vuelta en cuarenta repositorios, cambiar un pie de página en cien páginas, corregir un canónico en todo el sitio: aquí es donde el agente ahorra horas y también donde un error se esparce. Tres protecciones resuelven casi todo: mostrar antes de hacer, no duplicar y no tocar lo que otra persona está tocando.
1Dry-run por defecto: ver lo que haría antes de hacerlo
2Marcador: ejecutar dos veces no duplica
3Saltar el repositorio con trabajo sin guardar
4Verificar en vivo por muestra después del push
Objetivo: ejecutar una operación en varios repositorios con dry-run, marcador contra duplicar y salto de repositorio sucio, verificando por muestra.
01 · El camino de un lote seguro
Toca cada bloque.
Haz clic en cada bloque del diagrama para ver qué hace.
Tres protecciones: dry-run, marcador y salto de repositorio sucio.
02 · Las protecciones, una por una
Toca cada paso.
1. Dry-run
El comportamiento predeterminado del script es no escribir. Escribir exige pedirlo: --apply. Así un error en el mapa aparece en la lista, no en el sitio.
Pídele lo mismo a cualquier agente: primero la lista de lo que haría, después la ejecución.
2. Marcador
El bloque escrito va entre dos comentarios con el marcador link-de-volta:v1. Antes de escribir, el script busca el marcador: si ya existe, responde "OK: já tinha".
Es lo que permite volver a ejecutar después de una falla sin crear dos enlaces en la misma página.
3. Repositorio sucio
Si el repositorio tiene un cambio sin commit, el script lo salta. Casi siempre es otra sesión (tuya o de otro agente) trabajando en él.
También salta el repositorio que está fuera de la rama esperada y el que no tiene HTML. En INEMA, los repositorios saltados por árbol de trabajo sucio quedaron para la ronda siguiente.
4. Dónde va el enlace
Si el index.html es solo una redirección (meta refresh), el enlace va en la página de destino. Si el HTML lo genera un script, el enlace va en el generador; si no, desaparece en el próximo build.
En INEMA: 35 de 40 repositorios el 24/09, otros 25 el 02/10 y otros 21 el 05/10.
Dry-run, aplicar y (después de la compuerta) hacer commit
python3 tools/link_de_volta.py mapa.json # dry-run: só mostra
python3 tools/link_de_volta.py mapa.json --apply # grava, sem commit
python3 tools/link_de_volta.py mapa.json --apply --commit # grava, commita e faz push
Pedido al agente
Arma el mapa.json con los repositorios de la lista y ejecuta link_de_volta.py SIN opciones (dry-run).
Muéstrame la salida completa y detente.
No uses --apply ni --commit hasta que yo responda "aplica".
Repositorio con PULA: no fuerces, no hagas stash, no hagas commit por él. Solo dime cuál es.
Ejemplo del repositorio
$ python3 tools/link_de_volta.py mapa.json
repos/curso-pao: DRY: entraria em index.html
repos/curso-cafe: PULA: alterações não commitadas
repos/curso-queijo: OK: já tinha
repos/curso-vinho: DRY: entraria em landing.html
$ python3 tools/link_de_volta.py mapa.json --apply
repos/curso-pao: APLICADO em index.html
repos/curso-cafe: PULA: alterações não commitadas
repos/curso-queijo: OK: já tinha
repos/curso-vinho: APLICADO em landing.html
Cuatro repositorios de prueba armados para la clase.
curso-pao: limpio, recibe el bloque en el index.html.
curso-cafe: tiene un cambio sin guardar; saltado en las dos rondas.
curso-queijo: el marcador ya estaba ahí; no cambia nada.
curso-vinho: el index.html es solo una redirección, así que el bloque va en la landing.html.
Después del --apply sin --commit, curso-pao y curso-vinho quedan con cambios sin commit: volver a ejecutar sin hacer commit hace que el script salte a los dos. Haz commit o descarta los cambios antes de la próxima ronda.
04 · Mira el lote con interrupción y reanudación
Ejecuta, interrumpe a la mitad y ejecuta de nuevo. Lo que ya se hizo no se rehace.
por hacer/
aplicando/
hecho (con marcador)/
saltado/
Simulación ilustrativa en el navegador: no se escribe nada de verdad. El salto es intencional, para mostrar el repositorio sucio.
05 · Práctica: un lote de verdad, con red
Usa 3 o más repositorios tuyos (o crea repositorios de prueba con un index.html simple).
E1 · El dry-run
25 min
Pídele al agente el mapa.json y el dry-run, con el pedido de arriba. Deja a propósito un repositorio con un cambio sin commitear.
Listo cuando: la salida muestra al menos un DRY y un PULA con el motivo, y el git status de los repositorios no cambió.
E2 · Aplicar y verificar
25 min
Responde "aplica", ejecuta con --apply, revisa el diff de cada repositorio, haz commit (o usa --commit) y ejecuta el dry-run de nuevo.
Listo cuando: la segunda ronda responde "OK: já tinha" en los repositorios aplicados, y abriste al menos 2 páginas publicadas y viste el enlace en el HTML.
06 · Prueba lo que aprendiste
La explicación aparece después de tu respuesta.
Pregunta 1 de 4
¿Qué hace link_de_volta.py cuando lo ejecutas sin ninguna opción?competencia
Correcto
El dry-run es lo predeterminado. Escribir exige --apply; publicar exige --commit. El error común es invertirlo: un script que escribe por defecto y pide una opción para simular.
No es esa
El dry-run es lo predeterminado. Escribir exige --apply; publicar exige --commit. El error común es invertirlo: un script que escribe por defecto y pide una opción para simular.Repasar: El camino de un lote seguro
Pregunta 2 de 4
Un repositorio aparece como "PULA: alterações não commitadas". ¿Qué haces?
Correcto
Un cambio sin guardar es trabajo de alguien. Forzar mezcla tu commit con el de esa persona. En INEMA, los omitidos quedaron para la ronda siguiente.
No es esa
Un cambio sin guardar es trabajo de alguien. Forzar mezcla tu commit con el de esa persona. En INEMA, los omitidos quedaron para la ronda siguiente.Repasar: Las protecciones, una por una
Pregunta 3 de 4
¿Para qué sirve el marcador link-de-volta:v1?
Correcto
Antes de escribir, el script busca el marcador. Si ya existe, responde "OK: já tinha". Eso es lo que hace segura la reanudación.
El index.html de un curso es solo una redirección. ¿Dónde debe entrar el enlace?
Correcto
El buscador sigue la redirección y lee el destino. Un enlace en el archivo de redirección no se ve. Si el HTML se genera, el enlace va en el generador.
No es esa
El buscador sigue la redirección y lee el destino. Un enlace en el archivo de redirección no se ve. Si el HTML se genera, el enlace va en el generador.Repasar: El enlace de vuelta en lote
Prueba terminada
Acertaste {a} de {n}. Si aciertas todas, la clase se marca como completada.
Elige una alternativa. La explicación aparece después de tu intento.
07 · Para llevar
Dry-run por defectoVer la lista antes; escribir solo con --apply.
MarcadorEjecutar dos veces no duplica; la reanudación es segura.
Lo sucio es de otroUn repositorio con cambios sin guardar se omite, no se fuerza.
Push es publicación--commit hace push: pasa por la compuerta antes y verifica por muestreo después.