zit 0.3.41 makes the crosslink line counts opt-in. A forge that shows
"+15 −3" on its timeline asks for them with zit crosslink --lines; every
other caller gets the stream 0.3.39 printed, at 0.3.39's cost.
No artifact, tag namespace, wire, or on-disk repository format changed. The
crosslink record format is still crosslink 1.
Action for forge clients
If you read lines lines from zit crosslink, add --lines to the call.
Without it, 0.3.41 prints no lines lines at all. A consumer that does not
read them needs no change.
Line counts are opt-in
0.3.40 counted every changed file of every check-in the first time
crosslink ran over a repository, whether or not the caller wanted the
counts. On a long history that first run took many times longer than it
used to. Now:
zit crosslinkcounts nothing, prints nolineslines, and reads and writes no line-count cache.zit crosslink --linesprints them exactly as 0.3.40 did: the countszit diff --numstat --checkingives,- -for a binary file,0 0for a mode-only change, and nolinesline when the store cannot produce a side's content.- A cache written by 0.3.40 is reused as it is.
A shun no longer recounts everything
A check-in's counts are fixed by its name, so they are counted once. Under
0.3.40 a shun threw every stored count away. Now a shun recounts only the
check-ins that touch a path a shunned blob was written to: the check-in that
wrote it, and any later one that read it as the parent side. Those lose the
lines line for that file; everything else is served as stored.
The one exception is a history that holds a check-in whose changed files are unknown. A shunned blob could sit at a path nothing records, so the counts are taken again in full.
Compatibility
zit crosslinkwithout--linesis byte-identical to 0.3.39.zit crosslink --linesis byte-identical to 0.3.40, except for files a shun has made uncountable.--lines --no-cachestill matches the cached run byte for byte.