Skip to content
zit Releases without a copy in every clone
Login

Releases without a copy in every clone

Fossil keeps a project's downloads as unversioned files: no history, synced with fossil sync -u, served from the repository. zit's own releases have been published that way, to a stock Fossil server.

The plan was for zit to do what Fossil does: an unversioned table in every repository, synced alongside the history. Halfway into the design it stopped making sense. quarry, zit's forge, keeps a repository's unversioned files in its own storage and answers Fossil's protocol for them itself. A copy in every zit repository would be a second home for the same bytes, and a store format change that older zit could not open, for nothing quarry needs.

So 0.3.36 has the client half and no store:

zit uv list URL [-l]
zit uv pull URL NAME... [-o DIR]
zit uv push URL FILE... [--as NAME]
zit uv rm URL NAME...

Files move between the server and plain files; nothing is written to the repository. It speaks Fossil's protocol, so the server can be quarry or a stock fossil server, and the smoke suite checks it against the latter: what zit uv push sends is exactly what fossil uv cat serves.

One thing it does differently from Fossil. A Fossil server keeps whichever copy of a file is newer, and when it keeps its own it says nothing. zit uv refuses an older push with a message, and reads the catalog back after every change to confirm the server took it.

The same release adds the main-branch setting. Fossil never syncs it, so a mirror reports trunk until someone sets it, and now zit can say and set it.