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.