lingo pull

Max PrilutskiyCEO y cofundador3 min de lectura

Recupera los resultados del push más reciente y escríbelos en disco, con detección de conflictos frente al archivo de bloqueo.

text
lingo pull [--force] [--dry-run]

Cuándo usarlo#

lingo push termina en cuanto se envía la ejecución, así que pull es la forma de recoger sus resultados. Ejecútalo después de cualquier push sin --wait y también cuando un push con --wait no haya escrito nada:

  • Has cerrado la terminal a mitad de la traducción. Vuelve a abrirla y ejecuta lingo pull: retomará el proceso donde lo dejó la ejecución.
  • Más adelante, en el mismo trabajo de CI. Un paso ejecuta lingo push y, más tarde, otro paso en el mismo runner y con el mismo checkout ejecuta lingo pull y recupera los resultados. En otras máquinas estarán disponibles una vez que se hayan confirmado con un commit.
  • Has retomado el trabajo después de que terminara la ejecución, pero antes de que push pudiera escribir. Un corte puntual de red, un proceso forzado a cerrarse... pull remata el trabajo.

Cómo encuentra la ejecución#

pull lee ~/.lingo/runs/<hash>.json, donde <hash> se deriva de la ruta absoluta de la raíz del proyecto. El archivo registra el último runId de push. Sin él, pull devuelve un error:

text
Error: No saved run state for this project (looked for ~/.lingo/runs/<hash>.json) — run
       `lingo push` first so we know which run's outputs to pull.

Este archivo es específico de cada máquina y está fuera del repositorio (consulta Configuration para ver por qué).

Detección de conflictos#

Antes de escribir cada destino, pull compara:

  • El hash del archivo local en disco
  • El hash registrado en .lingo/lock.json como última versión conocida del servidor

Si coinciden → no hay cambios locales y se puede sobrescribir sin problema. Si difieren → hay cambios locales; hacer pull los descartaría. pull aborta:

text
Error: 3 conflict(s) — rerun with --force

Aquí, el archivo de bloqueo es la única fuente de verdad: registra lo último que escribió el servidor, no el contenido fuente. Las ediciones manuales en archivos traducidos que quieras conservar deben confirmarse con un commit (para que sobrevivan a pull) o recuperarse con --force (para que se sobrescriban).

Flags#

--force / -f#

Sobrescribe los archivos de destino locales que hayan divergido del archivo de bloqueo. Úsalo después de revisar los conflictos y decidir que la versión del servidor es la canónica (por ejemplo, si otra persona hizo push de una actualización del glosario que debe prevalecer).

Flujo de trabajo recomendado:

bash
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#

Muestra lo que haría pull sin tocar el sistema de archivos:

bash
lingo pull --dry-run

Muestra cuántos archivos se escribirían y cuántos ya están sincronizados. Útil en CI para comprobar que no se ha desviado nada.

Salida#

Correcto:

text
✓ Pulled run lrg_a8c...: wrote 12 file(s), 4 already in sync.

Simulación:

text
Dry run complete. 16 file(s) already in sync.

La ejecución ha fallado o se ha cancelado:

text
Run lrg_a8c... is failed, not pulling yet.

(pull espera a una ejecución que sigue pendiente o en curso, con la misma visualización de progreso que push --wait, y después escribe los resultados. Una ejecución fallida o cancelada no tiene nada que recuperar; consulta Ejecuciones, estado y recuperación.)

Casos límite#

  • No hay ningún push previo. Error como el anterior. No existe el concepto de «hacer pull de traducciones que existen en algún punto del servidor»: pull siempre apunta a una ejecución concreta.
  • El estado de la ejecución apunta a una ejecución eliminada o caducada. El motor devuelve un 404; pull lo informa con claridad. Elimina ~/.lingo/runs/<hash>.json y vuelve a ejecutar push.
  • En .lingo/config.json hay un motor distinto del que se usó para crear la ejecución. El ID del motor no coincide: la CLI devuelve un error con los ID. Vuelve a ejecutar push con el motor actual.