Aller au contenu

Syntaxe .gl

Un fichier .gl est un script orienté ligne exécuté par gapline run. Chaque ligne non vide et non commentaire est une directive : soit un contrôle de session (feed, save), soit une commande gapline sans le flag -f.

script := (ligne "\n")*
ligne := comment | vide | directive [comment]
comment := "#" <any char>*
vide := /[ \t]*/
directive := session_directive | command_directive
session_directive := "feed" path
| "save" [path]
command_directive := "validate" validate_args
| "read" crud_target read_args
| "create" crud_target create_args
| "update" crud_target update_args
| "delete" crud_target delete_args

Les valeurs contenant des espaces peuvent être entre guillemets doubles ("Gare du Nord"). Les séquences d’échappement dans les guillemets ne sont pas traitées — le contenu est pris tel quel jusqu’au guillemet de fin.

Charge une archive ou un répertoire GTFS en mémoire. Doit être la première directive non commentaire du fichier.

feed ./data/gtfs.zip
feed /absolute/path/to/gtfs/

Une seule directive feed par script — la session est mono-tenant.

Réécrit le flux en mémoire sur disque de façon atomique. Sans argument, save écrase le chemin passé à feed ; avec argument, il écrit à ce chemin (source intacte).

save # Écrase le flux source.
save ./data/gtfs-patched.zip

save n’est pas implicite. Un script sans directive save sort sans persister — c’est le point qui rend les .gl sûrs à relancer.

Lance la suite complète de validation sur le flux en mémoire.

validate
validate --format json
validate --format json -o report.json

Flags acceptés : --format, -o / --output.

--min-severity et --disable-rule ne sont pas acceptés dans un .gl — fixez-les dans gapline.toml. Le runner lit la même chaîne de config que le CLI top-level.

read <target> [-w QUERY] [--format FORMAT] [-o PATH]

Section intitulée « read <target> [-w QUERY] [--format FORMAT] [-o PATH] »

Lit des enregistrements d’un fichier GTFS en mémoire.

read stops
read stops -w "stop_name LIKE Gare%"
read routes --format csv -o routes.csv

Flags acceptés : -w / --where, --format, -o / --output.

create <target> -s KEY=VALUE [KEY=VALUE...] [--confirm]

Section intitulée « create <target> -s KEY=VALUE [KEY=VALUE...] [--confirm] »

Insère un nouvel enregistrement.

create stops -s stop_id=NEW_01 stop_name="Place du marché" stop_lat=45.5017 stop_lon=-73.5673 --confirm

-s / --set est requis. Tout ce qui suit -s jusqu’au prochain flag est consommé comme paires KEY=VALUE.

Dans un script, --confirm est généralement requis — pas de prompt interactif en non-TTY.

update <target> -w QUERY -s KEY=VALUE [KEY=VALUE...] [--confirm] [--cascade]

Section intitulée « update <target> -w QUERY -s KEY=VALUE [KEY=VALUE...] [--confirm] [--cascade] »

Met à jour chaque enregistrement matchant -w.

update stops -w "stop_id=S01" -s stop_name="Gare Centrale" --confirm
update stops -w "stop_id=S01" -s stop_id=STOP_MAIN --cascade --confirm

-w / --where et -s / --set sont requis. --cascade requis quand -s réécrit une PK.

Retire chaque enregistrement matchant -w. En script, --confirm est requis — le runner ne peut pas prompter.

delete trips -w "route_id=OLD_LINE" --confirm

Les lignes commençant par # sont des commentaires. # peut aussi apparaître en fin de ligne de directive — tout ce qui suit # est ignoré (les tokens dans une chaîne entre guillemets doubles ne sont pas affectés).

feed ./data/gtfs.zip # Charge une fois.
# Commentaire de bloc entre directives.
validate --format json -o report.json # Snapshot.

Les scripts .gl sont linéaires et stop-on-error :

  • Les directives exécutent dans l’ordre source.
  • Le premier échec avorte avec code non nul.
  • Rien n’est persisté sauf si un save a réussi plus tôt.

Voir concepts / modèle de session .gl pour la rationale.

  • Variables, substitution, interpolation. Chemins et valeurs sont littéraux.
  • Control flow. Pas de if, pas de boucles, pas de try/catch.
  • Scripts imbriqués. run n’est pas une directive — un .gl ne peut pas appeler un autre.
  • Sous-commandes autres. rules et completion sont CLI-only.
minimal.gl
feed ./data/gtfs.zip
validate
save
weekly-fix.gl
feed ./data/gtfs.zip
delete trips --where "route_id=OLD_LINE" --confirm
delete routes --where "route_id=OLD_LINE" --confirm
update routes --where "route_type=700" --set route_type=3 --confirm
validate --format json -o reports/weekly.json
save ./data/gtfs-patched.zip