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.