Skip to content
zit Artifact [875179f369]
Login

Artifact [875179f369]

Artifact 875179f36959d47e298bcc201d84da51368b2d07b1b7743df5406bae35220264:


zit 0.6.6

zit 0.6.6 lets a forge shun and pack bare stores, stacks merges the way Fossil does, and changes how import-git stores tracked files that are themselves Fossil artifacts. That last change asks for one full re-import of affected repositories; see below.

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

Shun and pack on a bare store

zit shun and zit pack worked only inside a checkout, so a forge, which holds bare stores, could not purge anything. Both now take -R:

zit shun -R STORE --force [--reason TEXT] [--defer] HASH...
zit shun -R STORE --list
zit pack -R STORE [--drop-elided]

The semantics are those of a checkout: the shun table every sync direction honours, the rewrite that removes the bytes, the table carried into clones, the write lock and the refusal while another rewrite runs. A bare store has no working tree to protect, so it refuses nothing more; a -R that names a checkout still protects the check-in that checkout is on. The rewrite swaps in a new store generation exactly as pack does, so a zit frames --verify cursor taken before it is refused.

zit shun --porcelain prints one line per named hash once the work is done, ACTION HASH, where ACTION is reclaimed, deferred, recorded (the store did not hold it) or gone (already shunned and removed).

Stacked merges

zit merge refused to run while another merge was pending. Fossil allows it, and zit now does too: a merge, --integrate, --cherrypick or --backout is added after those already pending, and merging the same check-in twice records it once. With plain merges pending, the merge base is Fossil's pivot over the current check-in and every pending merge. The commit records the current check-in and then each merged check-in in order as P cards, and the Q cards Fossil writes. zit status lists every pending merge, and zit undo takes back only the last. A checkout with one pending merge is stored exactly as before; a checkout with several is refused by older releases rather than read wrong. A backout of the check-in being committed from no longer writes a Q card, as Fossil does not.

Git imports of tracked Fossil artifacts

A Git repository that keeps raw Fossil artifacts as files, for instance as test fixtures, came out of zit import-git with extra check-ins, technotes and tags: a stored blob that parses as an artifact is one, by Fossil's rule, and both zit and Fossil crosslinked those files. The import now stores such a file sterilized, as fossil commit does: it appends Fossil's line # Remove this line to create a well-formed Fossil control artifact. after the file's last card. Nothing crosslinks it, in zit or in a Fossil clone of the result. zit export-git removes exactly the line the import added, so a Git round trip is byte-identical.

The files affected gain that one line in a checkout. A repository imported by an earlier release that holds such files stored them verbatim, and import-git --into now refuses to add to it, naming a full re-import as the remedy.

Attributing imports to the Git author

zit import-git --use-author, Fossil's name for it, records each commit's Git author as the check-in's user instead of the committer; it is the same as --attribution author. The default stays the committer, as in fossil import --git, so existing imports keep their names. The choice is recorded with the import, and --into reuses it when no flag is given, which it previously refused.

Compatibility

The artifact and repository store formats and the wire protocol are unchanged. The checkout file gains a form for several pending merges, which older releases refuse instead of misreading. Import maps written by earlier releases are read, but an --into import into one is refused when its fixture files were stored verbatim.

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.