Operações em lote seguras: dry-run, marcador e repositório sujo
Pôr um link de volta em quarenta repositórios, trocar um rodapé em cem páginas, corrigir um canônico em todo o site: é aqui que o agente economiza horas e é aqui que um erro se espalha. Três proteções resolvem quase tudo: mostrar antes de fazer, não duplicar e não mexer no que outra pessoa está mexendo.
1Dry-run por padrão: ver o que faria antes de fazer
2Marcador: rodar duas vezes não duplica
3Pular o repositório com trabalho não salvo
4Conferir no ar por amostra depois do push
Objetivo: rodar uma operação em vários repositórios com dry-run, marcador contra duplicar e pulo de repo sujo, conferindo por amostra.
01 · O caminho de um lote seguro
Clique em cada bloco.
Clique em cada bloco do diagrama para ver o que ele faz.
Três proteções: dry-run, marcador e pulo de repositório sujo.
02 · As proteções, uma por uma
Clique em cada passo.
1. Dry-run
O padrão do script é não gravar. Gravar exige pedir: --apply. Assim um erro no mapa aparece na lista, não no site.
Peça a mesma coisa a qualquer agente: primeiro a lista do que ele faria, depois a execução.
2. Marcador
O bloco gravado vai entre dois comentários com o marcador link-de-volta:v1. Antes de gravar, o script procura o marcador: se já existe, responde "OK: já tinha".
É o que deixa rodar de novo depois de uma falha sem criar dois links na mesma página.
3. Repositório sujo
Se o repositório tem alteração não commitada, o script pula. Quase sempre é outra sessão (sua ou de outro agente) trabalhando nele.
Pula também o repositório fora da branch esperada e o que não tem HTML. No INEMA, repositórios pulados por árvore suja ficaram para a rodada seguinte.
4. Onde o link vai
Se o index.html é só um redirecionamento (meta refresh), o link vai na página de destino. Se o HTML é gerado por script, o link vai no gerador, senão some no próximo build.
No INEMA: 35 de 40 repositórios em 24/09, mais 25 em 02/10 e mais 21 em 05/10.
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 ao agente
Monte o mapa.json com os repositórios da lista e rode o link_de_volta.py SEM opções (dry-run).
Me mostre a saída inteira e pare.
Não use --apply nem --commit até eu responder "aplica".
Repositório com PULA: não force, não faça stash, não commite por ele. Só me diga qual é.
Exemplo do repositório
$ 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
Quatro repositórios de teste montados para a aula.
curso-pao: limpo, recebe o bloco no index.html.
curso-cafe: tem alteração não salva; pulado nas duas rodadas.
curso-queijo: o marcador já estava lá; nada muda.
curso-vinho: o index.html é só um redirecionamento, então o bloco vai na landing.html.
Depois do --apply sem --commit, curso-pao e curso-vinho ficam com alteração não commitada: rodar de novo sem commitar faz o script pular os dois. Commite ou descarte antes da próxima rodada.
04 · Veja o lote com interrupção e retomada
Rode, interrompa no meio e rode de novo. O que já foi feito não é refeito.
a fazer/
aplicando/
feito (com marcador)/
pulado/
Simulação ilustrativa no navegador: nada é gravado de verdade. O pulo é proposital, para mostrar o repositório sujo.
05 · Prática: um lote de verdade, com rede
Use 3 ou mais repositórios seus (ou crie repositórios de teste com um index.html simples).
E1 · O dry-run
25 min
Peça ao agente o mapa.json e o dry-run, com o pedido acima. Deixe de propósito um repositório com uma alteração não commitada.
Pronto quando: a saída mostra pelo menos um DRY e um PULA com o motivo, e o git status dos repositórios não mudou.
E2 · Aplicar e conferir
25 min
Responda "aplica", rode com --apply, confira o diff de cada repositório, commite (ou use --commit) e rode o dry-run de novo.
Pronto quando: a segunda rodada responde "OK: já tinha" nos repositórios aplicados, e você abriu pelo menos 2 páginas publicadas e viu o link no HTML.
06 · Teste o que aprendeu
A explicação aparece depois da sua resposta.
Pergunta 1 de 4
O que o link_de_volta.py faz quando você roda sem nenhuma opção?competência
Correto
Dry-run é o padrão. Gravar exige --apply; publicar exige --commit. O erro comum é inverter: script que grava por padrão e pede opção para simular.
Não é essa
Dry-run é o padrão. Gravar exige --apply; publicar exige --commit. O erro comum é inverter: script que grava por padrão e pede opção para simular.Rever: O caminho de um lote seguro
Pergunta 2 de 4
Um repositório aparece como "PULA: alterações não commitadas". O que fazer?
Correto
Alteração não salva é trabalho de alguém. Forçar mistura o seu commit com o dela. No INEMA, os pulados ficaram para a rodada seguinte.
Não é essa
Alteração não salva é trabalho de alguém. Forçar mistura o seu commit com o dela. No INEMA, os pulados ficaram para a rodada seguinte.Rever: As proteções, uma por uma
Pergunta 3 de 4
Para que serve o marcador link-de-volta:v1?
Correto
Antes de gravar, o script procura o marcador. Se já existe, responde "OK: já tinha". É isso que torna a retomada segura.
O index.html de um curso é só um redirecionamento. Onde o link deve entrar?
Correto
O buscador segue o redirecionamento e lê o destino. Um link no arquivo de redirecionamento não é visto. Se o HTML é gerado, o link vai no gerador.
Não é essa
O buscador segue o redirecionamento e lê o destino. Um link no arquivo de redirecionamento não é visto. Se o HTML é gerado, o link vai no gerador.Rever: O link de volta em lote
Teste concluído
Você acertou {a} de {n}. Acertando todas, a aula é marcada como concluída.
Escolha uma alternativa. A explicação aparece depois da sua tentativa.
07 · Para levar
Dry-run por padrãoVer a lista antes; gravar só com --apply.
MarcadorRodar duas vezes não duplica; a retomada fica segura.
Sujo é de outroRepositório com alteração não salva é pulado, não forçado.
Push é publicação--commit faz push: passe pelo portão antes e confira por amostra depois.