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