Skip to content
zit Artifact [65abf8c412]
Login

Artifact [65abf8c412]

Artifact 65abf8c412a2e3d86338a4c84a7b8239973146c6f96c7c0dc7563e9d2f88e348:


# 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](RELEASE-NOTES-0.1.0.md).