No dia a dia
Diff e revisão
O agente escreve rápido, e ler o que ele fez é o gargalo. O Deck coloca o diff ao lado do terminal, para a revisão acontecer sem trocar de aplicativo.
Três lugares, três perguntas
| Onde | Responde |
|---|---|
| Painel de git, ao lado do terminal | O que mudou nesta sessão, agora? |
| Tela de review | O que mudou no projeto inteiro? |
| Aba de código do pull request | O que esta proposta muda na base? |
Os dois primeiros leem o seu disco. O terceiro lê o GitHub, e está em Pull requests.
O painel de git
Abre com ⌘⇧B e acompanha a pasta da sessão em foco. No topo ficam a branch, quantos commits ela está à frente e atrás do remoto, e um botão para trazer o que falta.
~/ingestao ❯ git log --oneline -3
4a093ce Testes da sincronização
4edff57 Evita registros duplicados na sincronização
3b1d01c Fila com limite configurável
~/ingestao ❯ npm test --silent
✔ salva cada registro uma vez (2.3ms)
✔ ignora repetidos ao repetir (0.4ms)
✔ informa recebidos e salvos (0.5ms)
ℹ tests 3 · pass 3 · fail 0
~/ingestao ❯
@@ -1,7 +1,14 @@
-// Sincronização da ingestão.
+// Sincronização da ingestão com proteção contra duplicatas.
export async function sincronizar(registros, salvar) {
- for (const registro of registros) {
+ const encontrados = new Set();
+ const novos = registros.filter(registro => {
+ if (encontrados.has(registro.id)) return false;
+ encontrados.add(registro.id);
+ return true;
+ });
+ for (const registro of novos) {
await salvar(registro);
}
- return { recebidos: registros.length, salvos: registros.length };
+ return { recebidos: registros.length, salvos: novos.length };
Contra a base 2
src/sincronizar.js+10 -3
test/sincronizar.test.js+21
Ele tem três abas:
- Arquivos, para navegar pela pasta e abrir qualquer arquivo.
- Alterações, com o que mudou, agrupado em não preparadas, preparadas e contra a base.
- Revisão, que mostra o pull request desta branch com checks, decisão da revisão e comentários.
Na aba de alterações você escolhe o escopo: tudo que a branch trouxe em relação à base, só o que ainda não tem commit, ou um commit específico. Dá para preparar arquivo por arquivo, buscar entre os arquivos alterados e alternar entre lista e árvore.
A tela de review
Em ⌘⇧G, a tela de review mostra o projeto inteiro, e não só a pasta da sessão. São três abas: as mudanças, as branches e o histórico.
- Mudanças. A árvore de arquivos alterados de todos os repositórios do projeto, com o sinal de quantas linhas entraram e saíram. Um ponto marca o arquivo que o agente está editando neste momento.
- Branches. A lista com o último commit de cada uma e um botão para trocar.
- Histórico. O grafo dos commits, com busca na mensagem.
O diff abre unificado ou lado a lado, como você preferir. Arquivo muito grande vem cortado, com um botão para mostrar mais, e o app avisa quando não há diff a mostrar, como em arquivo binário ou mudança só de permissão.
O que o diff compara
Vale saber, porque muda o que você vê:
- Por padrão, o estado do disco contra o último commit. É a pergunta o que mudou e ainda não entrou.
- Contra a base, tudo que esta branch trouxe desde que saiu da base, o que é a leitura mais próxima do que vai virar pull request.
- Em um commit, aquele commit contra o pai dele.
Arquivo novo aparece por inteiro, listado um a um, sem esconder pasta nova. Quando o Deck não consegue comparar, ele diz por quê, como base que não existe mais ou histórico incompleto no clone.
Editar sem sair
Clicar em um arquivo abre o diff. Clicando com a tecla de comando, ou com duplo clique, abre o arquivo para editar, no mesmo painel, com realce de sintaxe. Salvar é ⌘S.
A partir do diff há dois caminhos: editar a versão atual com as alterações destacadas, ou abrir o arquivo limpo. Arquivo em markdown alterna entre o texto e a prévia.
O rascunho fica guardado pelo Deck e sobrevive a fechar a aba. Se o arquivo mudar no disco enquanto você edita, o app avisa e preserva o que você escreveu, em vez de sobrescrever em silêncio.
Commit e push
Na tela de review, o cabeçalho tem o campo da mensagem e dois botões, um que faz o commit e outro que já envia. Eles só ficam disponíveis com algo preparado. Se o envio falhar, o commit continua feito e o app diz isso, em vez de fingir que nada aconteceu.
Com a branch pronta, o caminho segue em Pull requests.