Skip to content
zit zit 0.3.12
Login

zit 0.3.12

zit 0.3.12 makes sync announce only what its clusters do not already say. A pull or push between two peers used to open with one igot line for every held artifact — 904,898 lines, about 63 MB per direction, per round on pkgsrc, whether or not anything had changed. zit now indexes the cluster artifacts it holds, announces only the unclustered tail, and mints clusters of its own where fossil does. The same no-op pull sends 4.7 KB.

No artifact, tag namespace, sync message, or on-disk format changed. The cluster index lives in .zit-cache/ and is rebuilt from the log if lost.

Bounded announcement over the cluster index (zit#184)

A cluster artifact (M cards and a Z card, nothing else) is igot in bulk: once a peer folds an artifact into a cluster it stops announcing it individually, and a later cluster names the earlier one, so the whole repository is reachable from the newest. zit consumed clusters on receipt but never used them on send and never minted any. Now:

Measured, no-op pull, release build, loopback:

store artifacts clusters request before request after warm pull
pkgsrc (fossil-imported, flat) 904,898 2,439 ~63 MB 4,748 B 5.4s
sqlite (fossil-imported) 131,558 1,004 ~9.2 MB 1,183 B 0.74s
zit-native, 161 artifacts 161 0 → 1 minted 161 igot 201 B —

The index costs one walk of the store the first time a sync opens it (pkgsrc 210s, sqlite 19s — once), then a ~100 KB sidecar adopted with no walk. Evidence seam: ZIT_SYNC_STATS=1 prints rounds, bytes each way, clusters indexed, and rids walked.

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. The table's before figures are the 0.3.11 announcement volume (one 70-byte igot line per held artifact); the after figures are ZIT_SYNC_STATS on the same stores.