Skip to content
zit Artifact [de309bf8d9]
Login

Artifact [de309bf8d9]

Artifact de309bf8d9257d090ef8909fee221fe3f79032a43c46bba18ffa5928b838fa48:


zit 0.13.0

zit 0.13.0 aligns its line diff and three-way merge with Fossil's, and makes the reads a forge pages through cheap on large stores: annotate, the history of one file, and the daemon's start and feed.

This release is from trunk. Stores and the wire are unchanged from 0.12.1. Two caches beside each store are rebuilt once; see Compatibility.

Diff and merge follow Fossil

annotate

log for a path

Daemon

Compatibility

Stores, check-ins, the sync protocol and the daemon protocol version are unchanged.

Two caches in .zit-cache are rebuilt from the store, because the line diff behind them changed: the blame cache, by the first annotate of each file, and the line counts, by the first crosslink --lines. The line counts are the whole upgrade cost, and they grow with a store's history, not its size: stores with long histories take longest. Measured on a forge's stores (8 cores, zit at low CPU priority beside the live forge), first command after upgrading from caches 0.12.1 built:

store size crosslink --lines peak memory info ls --long tip annotate -n 50
tcl 420 MB 717 s 218 MB 0.01 s 0.11 s 0.54 s
sqlite 331 MB 366 s 220 MB 0.02 s 0.04 s 0.28 s
pkgsrc (sub-manifests) 632 MB 299 s 781 MB 0.13 s 0.94 s 0.16 s

Later crosslink --lines calls take under a second. A store with no .zit-cache at all builds every cache on its first commands; on the same forge, from an empty cache, crosslink --lines took 1,524 s on netbsd-src (3.8 GB, 928 MB peak), 681 s on tcl, 353 s on sqlite, 341 s on fossil and 275 s on pkgsrc, and under 50 s on every smaller store.

A server can build the new caches ahead of time on a copy of each store, taken with its .zit-cache (crosslink --lines, then ls --long tip), then move the copy's .zit-cache into place at the switch, as for 0.12.0. Do not let an older zit open a store whose caches are in the new format: it rebuilds its own over them.

Merges that both add lines at the same point now conflict where 0.12.1 took both sides; see above.

Qualification

The release manifest records native qualification against the exact tagged source archive on macOS ARM64, Linux x86-64 and Linux ARM64, using the pinned Zig 0.17.0 toolchain. Publication is gated on unit and end-to-end tests, Git differentials, deterministic simulation, seeded fuzzing, and Fossil interoperability checks on every distributed target.

For the basis of the conformance claim, see the 0.1.0 release notes.