Skip to content
zit Artifact [af1092498f]
Login

Artifact [af1092498f]

Artifact af1092498fa20fcbd9477a23dd408d3f9d57b9efaab8d46d378a5ac4db50ee9e:


zit 0.3.2

zit 0.3.2 is a point release with one change in it: a listing verb no longer reads a manifest per row. zit leaves on SQLite's history — 472 leaves — went from 1.15s to 0.23s, and every verb that renders a comment or a login from a warm store takes the same path.

Nothing else changed. No artifact, tag namespace, sync message, command, or output differs from 0.3.1.

The change

zit leaves read and parsed a whole check-in manifest for every row it printed — through whatever delta chain that manifest sat on — to obtain two strings: the first line of the comment, and the login. On SQLite's 472 leaves that was the entire second the verb cost, and it grew with the number of leaves rather than with anything the reader asked for.

The derived state has carried the comment since the listings were first made to stop re-reading manifests. What it did not carry was the login, and — more to the point — the materialized image carried neither. A store with a warm .zit-cache is image-backed, so both accessors returned "unknown" and every row fell back to the manifest read. The optimization existed and never applied to the case that matters.

The image now materializes both columns:

RepoState.commentOf and a new userOf read them, and answer null exactly where the derived maps do — for a rid with no event — so the two backings stay query-equivalent, which the image tests assert directly.

Measured

0.3.1 0.3.2
zit leaves, SQLite (131k artifacts, 472 leaves) 1.15s 0.23s
zit leaves, Tcl (254k artifacts, 303 leaves) 0.38s 0.29s

leaves, leaves --all, and timeline print byte-identical output before and after on both histories.

Compatibility

Qualification

zig build test, e2e, smoke (Fossil interop against a real fossil), muscle (41 differential steps), git-import-e2e, git-export-e2e, and dst, plus the three-runner CI battery (macOS ARM64, Linux x86-64, Linux ARM64).