Obtém os resultados do push mais recente e escreve-os em disco, com deteção de conflitos face ao ficheiro de bloqueio.
lingo pull [--force] [--dry-run]Quando utilizar#
lingo push já escreve os resultados quando a execução termina — por isso, pull só é útil quando não esperou (ou não pôde esperar) de forma síncrona:
- Fechou o terminal a meio da tradução. Reabra-o, execute
lingo pull— retoma a partir do ponto onde a execução ficou. - A fazer pull a partir de outra máquina. O tradutor executa
pushno portátil; o CI / um colega de equipa executapullno mesmo checkout, no mesmo motor, com as mesmas credenciais, e obtém os resultados. - Retomou o trabalho depois de a execução terminar, mas antes de
pushconseguir escrever. Uma falha momentânea de rede, processo terminado à força —pullconclui o processo.
Como encontra a execução#
pull lê ~/.lingo/runs/<hash>.json, onde <hash> é derivado do caminho absoluto da raiz do projeto. O ficheiro regista o último runId de push. Sem isso, pull devolve um erro:
Error: No run state at ~/.lingo/runs/<hash>.json — run `lingo push` first so we
know which run's outputs to pull.Este ficheiro é específico de cada máquina e fica fora do repositório (consulte Configuration para perceber porquê).
Deteção de conflitos#
Antes de escrever cada destino, pull compara:
- Hash do ficheiro local em disco
- Hash registado em
.lingo/lock.jsoncomo a última versão conhecida no servidor
Se corresponderem → não há edições locais, por isso é seguro substituir. Se forem diferentes → existem edições locais; fazer pull iria descartá-las. pull aborta:
Error: 3 conflict(s) — rerun with --forceO ficheiro de bloqueio é aqui a única fonte de verdade — regista o que o servidor escreveu pela última vez, não o conteúdo de origem. As edições manuais em ficheiros traduzidos que queira manter devem ser commitadas (para sobreviverem a pull) ou deve fazer pull com --force (para serem substituídas).
Opções#
--force / -f#
Substitui os ficheiros de destino locais que divergiram do ficheiro de bloqueio. Utilize esta opção depois de rever os conflitos e decidir que a versão do servidor é a canónica (por exemplo, outra pessoa fez push de uma atualização do glossário que deve ter precedência).
Workflow recomendado:
git status # stash or commit local edits first
git stash # if you want to keep them aside
lingo pull --force
git stash pop # re-apply your edits, resolve conflicts manually--dry-run#
Mostra o que pull faria sem alterar o sistema de ficheiros:
lingo pull --dry-runMostra o número de ficheiros que seriam escritos e quantos já estão sincronizados. Útil em CI para confirmar que nada ficou dessincronizado.
Resultado#
Sucesso:
✓ Pulled run run_a8c...: wrote 12 file(s), 4 already in sync.Execução simulada:
Dry run complete. 16 file(s) already in sync.Execução ainda não concluída:
Run run_a8c... is running, not pulling yet.(pull não bloqueia execuções em curso — volte a executá-lo mais tarde ou utilize push da próxima vez, que espera.)
Casos limite#
- Sem push anterior. Erro como acima. Não existe o conceito de "fazer pull das traduções que existem algures no servidor" —
pullaponta sempre para uma execução específica. - Estado da execução a apontar para uma execução eliminada/expirada. O motor devolve 404;
pullcomunica isso de forma clara. Elimine~/.lingo/runs/<hash>.jsone volte a executarpush. - Motor diferente em
.lingo/config.jsondaquele em que a execução foi criada. Incompatibilidade de ID do motor — a CLI devolve um erro com os IDs. Volte a executarpushno motor atual.
