.
C Line\scounts\sin\sthe\scrosslink\sstream
D 2026-10-07T06:16:15.712
E 2026-10-07T06:20:00 357a2468f1f90aa2726bd1455724baba223ff0b0
N text/x-markdown
U dmestas
W 1197
A forge timeline wants "+15 −3" on every check-in card, and a file history
wants the same per file. Until now `zit crosslink` said which paths a
check-in touched but not how many lines changed, so a forge ran
`zit diff --numstat` once per check-in: fifty child processes for a
fifty-card page, paid again by every consumer for history it had already
indexed.
0.3.40 puts the counts in the stream. Each `file` line is followed by a
`lines ADDED REMOVED` line against the primary parent, `- -` for a binary
file. The counts are the ones `zit diff --numstat --checkin` gives, because
both now count with the same function. A file whose content the store cannot
produce gets no `lines` line rather than a guess.
Counting reads both sides of every change, so it is kept where only
`crosslink` pays for it. The counts live in a cache file of their own; the
cache every other command builds on first open is untouched, and so is the
time it takes. A check-in's counts are fixed by its name, so they are counted
once and never go stale as the repository grows. The first run over a long
history does the counting, keeps what it has counted if it is cut short, and
later runs count only new check-ins.
Z 097e10a3d23fdaaf36300075254fe8e5