lingo pull

Max PrilutskiyPDG et cofondateurUpdated il y a 2 mois · 3 min read

Récupère les sorties du push le plus récent et les écrit sur le disque, avec détection des conflits par rapport au fichier de verrouillage.

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

Quand l’utiliser#

lingo push écrit déjà les sorties à la fin de l’exécution — pull n’est donc utile que si vous n’avez pas attendu la fin de manière synchrone, ou n’avez pas pu le faire :

  • Terminal fermé en pleine traduction. Rouvrez-le, lancez lingo pull — il reprend là où l’exécution s’est arrêtée.
  • Récupération depuis une autre machine. Le traducteur lance push sur son ordinateur portable ; la CI ou un coéquipier lance pull sur le même checkout, avec le même moteur et les mêmes identifiants, et récupère les sorties.
  • Reprise du travail une fois l’exécution terminée, mais avant que push ait pu écrire. Coupure réseau, processus interrompu — pull termine le travail.

Comment il retrouve l’exécution#

pull lit ~/.lingo/runs/<hash>.json, où <hash> est dérivé du chemin racine absolu du projet. Ce fichier enregistre le dernier runId de push. Sans lui, pull renvoie une erreur :

text
Error: No run state at ~/.lingo/runs/<hash>.json — run `lingo push` first so we
       know which run's outputs to pull.

Ce fichier est propre à chaque machine et se trouve en dehors du dépôt (voir Configuration pour comprendre pourquoi).

Détection des conflits#

Avant d’écrire chaque cible, pull compare :

  • Le hash du fichier local sur le disque
  • Le hash enregistré dans .lingo/lock.json comme dernière version connue côté serveur

S’ils correspondent → aucune modification locale, l’écrasement est sûr. S’ils diffèrent → des modifications locales existent ; un pull les écraserait. pull s’interrompt :

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

Le fichier de verrouillage fait foi ici — il suit ce que le serveur a écrit en dernier, pas le contenu source. Les modifications manuelles des fichiers traduits que vous souhaitez conserver doivent être commitéees (pour qu’elles survivent à pull) ou récupérées avec --force (pour qu’elles soient écrasées).

Options#

--force / -f#

Écrase les fichiers cibles locaux qui ont divergé du fichier de verrouillage. À utiliser après avoir passé en revue les conflits et décidé que la version du serveur fait autorité (par exemple, si quelqu’un d’autre a poussé une mise à jour du glossaire qui doit primer).

Workflow recommandé :

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#

Affiche ce que pull ferait sans toucher au système de fichiers :

bash
lingo pull --dry-run

Affiche le nombre de fichiers qui seraient écrits et combien sont déjà synchronisés. Utile en CI pour vérifier que rien n’a dérivé.

Sortie#

Succès :

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

Simulation :

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

Exécution pas encore terminée :

text
Run run_a8c... is running, not pulling yet.

(pull ne bloque pas sur les exécutions en cours — relancez plus tard, ou utilisez push la prochaine fois, qui, lui, attend.)

Cas limites#

  • Aucun push précédent. Même erreur que ci-dessus. Il n’existe pas de notion de « récupérer des traductions qui existent quelque part sur le serveur » — pull cible toujours une exécution précise.
  • État d’exécution pointant vers une exécution supprimée ou expirée. Le moteur renvoie 404 ; pull le signale clairement. Supprimez ~/.lingo/runs/<hash>.json et relancez push.
  • Moteur différent dans .lingo/config.json de celui sur lequel l’exécution a été créée. Incompatibilité d’ID du moteur — la CLI renvoie une erreur avec les ID. Relancez push avec le moteur actuel.