Quadern

Treure la biblioteca del binari

A 0.10 la capa de domini va sortir del binari i va passar a un crate propi. El CLI en depèn ara com en dependria qualsevol altre consumidor, i la TUI també.

A 0.10 la capa de domini va sortir del binari i va passar a un crate propi. El CLI en depèn ara com en dependria qualsevol altre consumidor, i la TUI també.

before 0.10 one crate cli.rs at 6.6k lines 97 tests 0.10 onwards torii (binary) torii tui next one torii-core — the domain layer vcs · platforms · workspace · config · auth 97 → 282 tests in the same release a surface you can call is a surface you can test without spawning a process

Per què valia una release

Un CLI que és amo de la seva pròpia lògica només es pot provar executant-lo. Llances un procés, li passes arguments, llegeixes stdout i afirmes sobre un text que existeix perquè el llegeixi una persona. Aquests tests són lents, es trenquen quan millores un missatge, i no arriben a la meitat interessant del codi.

El nombre de tests va passar de 97 a 282 a la mateixa release. Això no és diligència que apareix de cop: és el que passa quan les operacions es converteixen en funcions que pots cridar. Fixtures de parseig per plataforma, tests de client amb httpmock que afirmen sobre capçaleres d'autenticació i mapatge d'estats, tests d'estat de la TUI, tests de despatx del CLI — res d'això era assolible abans del split, i res d'això va necessitar un subprocés després.

Què més en va sortir

Els tres fitxers més grans es van partir a la mateixa passada. cli.rs tenia 6.600 línies i va passar a ser una superfície de clap més vint-i-quatre mòduls de domini. L'app.rs i l'events.rs de la TUI van passar a mòduls per vista. El codi de plataformes es va reorganitzar per plataforma en comptes de per funció, que és per això que els set directoris de client existeixen amb la forma que tenen.

I uns 415 punts d'error genèrics van rebre variants precises: Network, PlatformApi portant l'estat HTTP real, Auth, MalformedResponse, Subprocess, Fs, RepoState, Workspace, Unsupported i Usage. Abans d'això, moldíssimes fallades arribaven com a InvalidConfig, que és una mentida amb cara de veritat: vas a revisar la teva configuració, i la teva configuració està bé.

La fallada que només apareix amb una frontera de biblioteca

torii log | head

Això rebentava amb failed printing to stdout: Broken pipe. head tanca la canonada tan bon punt té les seves deu línies, l'escriptura falla, i la disposició per defecte de SIGPIPE a Rust converteix això en un pànic en comptes de la sortida silenciosa que fa qualsevol altra eina de línia de comandes. L'arranjament és una línia en arrencar —restaurar SIGPIPE al seu valor per defecte— i és la mena de cosa que trobes quan comences a preguntar-te què fa el procés i no només què retornen les funcions.

Dues més de la mateixa release, totes dues mundanes i totes dues de les que fan que una eina sembli inacabada: torii rename movia un directori al disc i després fallava en indexar-lo, perquè Index::add_path només accepta fitxers; i torii save es penjava per sempre sense TTY quan l'escàner trobava alguna cosa, esperant un [y/N] que ningú podia contestar. Ara falla ràpid i anomena --yes.

Què prepara

Una biblioteca, diversos frontals. El CLI i la TUI en són dos avui. L'aplicació gràfica del full de ruta és el tercer, i la raó que sigui una feina plausible i no una reescriptura és que hereta els snapshots, l'escàner i els clients de plataforma en comptes de reimplementar-los.