Skip to content
zit zit 0.6.5
Login

zit 0.6.5

zit 0.6.5 lets a path cone clone of a very large repository complete, fixes a commit failure on repositories with SHA-1 history, and adds zit forum edit for editing and deleting forum posts.

This release is from trunk. Horizon clones and their protocol extensions are not included.

Path cones on large repositories

A sparse-cone clone with path members (zit clone --cone=PATH) from a zit server over a large repository did not finish: the server classified the cone by reading every tree manifest in the history, and on a repository the size of NetBSD src (about 2.5 million artifacts) it ran out of memory or time before answering. The server now keeps a cone index beside the store (.zit-cache/coneidx): which blobs each path has held, and which artifacts are structural. A path cone is classified from that index in a fraction of a second; the index is built once, then extended as the store grows, and the server falls back to reading whenever it is missing, stale, or cannot answer. The answer is the same either way.

The client side of such a clone was also bounded. It returns the store it received to the operating system before deriving its caches, instead of holding both at once, and zit verify on a cone store no longer copies every tree's sub-manifest references into memory. A path cone clone of usr.bin from NetBSD src, about 930,000 artifacts, now completes and verifies within 4 GB.

Commit on repositories with SHA-1 history

A repository whose history predates SHA3 carries SHA-1 file hashes forward in its check-ins. When computing a new check-in's aggregate checksum, zit commit looked each parent file up among the blobs it had just captured, which are always SHA3, by a fixed-length key. A 40-digit SHA-1 name made that lookup read past its key: a debug build stopped on an assertion, and an optimized build relied on undefined behaviour. The lookup now treats a SHA-1 name as not among the captures.

Forum edits and deletions

zit forum edit POST writes the artifact Fossil writes when a post is edited: a new forum post whose P card names the version it replaces, carrying the thread root (G), the opener's title (H) or the reply's parent (I), and the mimetype (N) as Fossil's own forum page does. Naming any version of a post edits its newest version, so a chain never forks, and the lookup and write happen under the store's write lock. zit forum edit --delete POST writes Fossil's deletion: an empty W card, and an empty H card on a thread opener. An empty body without --delete is refused, so an empty pipe cannot delete a post. The verb prints the new artifact's hash, as post and reply do.

zit now also reads the empty H card Fossil writes when an opener is deleted; it refused those artifacts before.

Drafts

The artifact format draft now says an H card's thread title may be empty, and the collected ABNF names it accordingly. The change is listed in the draft's Changes in This Revision appendix.

Compatibility

The artifact and repository store formats and the wire protocol are unchanged. The cone index is a new advisory cache file; deleting it costs only time. Stores written by 0.6.4 are read unchanged.

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.