Skip to content
zit zit 0.12.1
Login

zit 0.12.1

zit 0.12.1 fixes two defects a forge found on a large file, and makes ls --long cheap on large trees.

This release is from trunk. Stores, caches and the wire are unchanged from 0.12.0; nothing is rebuilt on upgrade.

annotate no longer grows with the file's history

annotate of a 33,677-line file in a 4,900-check-in store grew past 4 GB and was killed by the kernel. Each step's working memory went into an arena that never freed it, and every version's text was kept until the end. annotate now frees each version once no later step reads it and bounds its content cache, so memory follows the file's size, not its history. On a 29,000-line file over 1,600 check-ins, peak memory went from 2.7 GB to 76 MB, with the same output and about the same time. A binary file is recognised before any version is compared.

log for a path lists newest first

zit log CHECKIN PATH listed a file's versions in the order its walk met them: the first-parent chain, then side branches. A history that crossed branches came out with older check-ins before newer ones, so paging with -n, or with the daemon's log cursor, repeated some versions and skipped others. Versions are now listed newest first by check-in time, as Fossil's finfo lists them, with ties broken as zit timeline breaks them. The set of versions listed is unchanged; only the order is.

ls --long reads sizes, not content

ls --long rebuilt every listed file to print its size. It now takes the size from the stored frame and the file's class from the record it keeps, as Fossil's ls -v reads its blob table, and rebuilds a file only the first time its class is unknown. A repeated whole-tree ls --long on a 68,000-file store dropped to about the cost of ls --size. A file whose stored delta is damaged now lists with its recorded size instead of as absent; zit verify is the command that proves content readable.

Notes for 0.12.0

The table of first-command rebuild costs in the 0.12.0 notes is corrected on trunk with a forge's measurements: the rebuild lands on whichever command runs first, and it grows with a store's history and file count far more than with its size in bytes.

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.