Skip to content
zit Artifact [0a31178729]
Login

Artifact [0a31178729]

Artifact 0a311787299914deadaa39759ffb967d5ddf92987faa5454421f19496e81c9a1:


# zit 0.3.36

zit 0.3.36 adds `zit uv`, which lists, fetches, sends and deletes a
server's unversioned files, and the `main-branch` setting, which says and
sets a repository's main line.

No artifact, tag namespace, sync message, or on-disk repository format
changed.

## `zit uv`

Unversioned files are what a Fossil repository keeps without history:
releases, downloads. quarry keeps a repository's unversioned files in its
own storage and answers Fossil's protocol for them itself, so a zit
repository has no reason to hold a copy. `zit uv` moves them between the
server and plain files, and stores nothing in `.zit`:

```
zit uv list URL [-l]
zit uv pull URL NAME... [-o DIR]       # or --all
zit uv push URL FILE... [--as NAME] [--mtime SECONDS]
zit uv rm URL NAME...
```

It speaks Fossil's own unversioned-file protocol, so the server can be
quarry or a stock `fossil server`. The newest time wins, as in Fossil, but
where Fossil's server quietly keeps its own newer copy, `zit uv` refuses an
older push or delete with a message, and confirms every change against the
server's catalog afterwards. Reading takes the server's `o` capability and
changing takes `y`; a server that shares nothing with the account says so.
The login is the repository's, as for `push`.

`sync`, `push`, `pull` and `clone` still leave unversioned files alone.

## `main-branch`

`zit settings main-branch` prints a repository's main line, and
`zit settings main-branch NAME` sets it, as in Fossil. A forge needs the
main branch for its CI and branch rules, and guessing it from branch names
is wrong for any repository whose main line is not called `trunk`.

Fossil keeps `main-branch` local, and so does zit: it never arrives by
sync, so a clone or mirror reports `trunk` until whoever serves it sets it.
It belongs to one repository: it has no `--global` value and is never read
from a versioned settings file. `zit settings --changed` lists it only when
a repository chose something other than `trunk`, which is how a caller
tells a configured main branch from the default.

`import-fossil --submanifest` used to reset a converted store's main branch
to `trunk`. It now keeps the store's own.

## Compatibility

- No on-disk repository or wire format changed; Fossil RFC revision 00
  remains the target.
- `zit uv` and the `main-branch` setting are new. `zit settings` lists one
  more setting.

## Qualification

`zig fmt --check`, `zig build test`, `e2e`, `smoke` (now 18 scenarios, the
new one `zit uv` against a stock fossil server), `git-import-e2e`,
`git-export-e2e`, and `dst`, plus the three-runner CI battery.