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.
Grammaire
Section intitulée « Grammaire »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_argsLes 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.
Directives
Section intitulée « Directives »feed <path>
Section intitulée « feed <path> »Charge une archive ou un répertoire GTFS en mémoire. Doit être la première directive non commentaire du fichier.
feed ./data/gtfs.zipfeed /absolute/path/to/gtfs/Une seule directive feed par script — la session est mono-tenant.
save [path]
Section intitulée « save [path] »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.zipsave n’est pas implicite. Un script sans directive save sort sans persister — c’est le point qui rend les .gl sûrs à relancer.
validate [--format FORMAT] [-o PATH]
Section intitulée « validate [--format FORMAT] [-o PATH] »Lance la suite complète de validation sur le flux en mémoire.
validatevalidate --format jsonvalidate --format json -o report.jsonFlags 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 stopsread stops -w "stop_name LIKE Gare%"read routes --format csv -o routes.csvFlags 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" --confirmupdate 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.
delete <target> [-w QUERY] [--confirm]
Section intitulée « delete <target> [-w QUERY] [--confirm] »Retire chaque enregistrement matchant -w. En script, --confirm est requis — le runner ne peut pas prompter.
delete trips -w "route_id=OLD_LINE" --confirmCommentaires
Section intitulée « Commentaires »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.Sémantique d’exécution
Section intitulée « Sémantique d’exécution »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
savea réussi plus tôt.
Voir concepts / modèle de session .gl pour la rationale.
Ce que .gl ne supporte pas
Section intitulée « Ce que .gl ne supporte pas »- Variables, substitution, interpolation. Chemins et valeurs sont littéraux.
- Control flow. Pas de
if, pas de boucles, pas de try/catch. - Scripts imbriqués.
runn’est pas une directive — un.glne peut pas appeler un autre. - Sous-commandes autres.
rulesetcompletionsont CLI-only.
Exemple minimal
Section intitulée « Exemple minimal »feed ./data/gtfs.zipvalidatesaveExemple réaliste
Section intitulée « Exemple réaliste »feed ./data/gtfs.zip
delete trips --where "route_id=OLD_LINE" --confirmdelete routes --where "route_id=OLD_LINE" --confirmupdate routes --where "route_type=700" --set route_type=3 --confirm
validate --format json -o reports/weekly.json
save ./data/gtfs-patched.zipVoir aussi
Section intitulée « Voir aussi »gapline run— la commande qui exécute un script.- Concepts / Modèle de session
.gl— cycle de vie mémoire et sémantique de save. - Guides / Écrire des scripts
.gl— parcours depuis zéro.