Skip to content
zit Artifact [4ddefa6f44]
Login

Artifact [4ddefa6f44]

Artifact 4ddefa6f4434e12a041d3d35655c9f8722e212521a6bf5a91bdbda22d8b19790:


zit 0.3.26

zit 0.3.26 finishes the end-of-options work 0.3.25 started: tarball and zip now consume the marker instead of counting it as an operand.

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

tarball and zip accept -- VERSION OUTPUTFILE

0.3.25 gated twenty-five verbs' option branches behind a bare --. The parser these two verbs share was among them, but the branch that sets the marker fell through to the operand slots below instead of ending the iteration. The marker therefore took the VERSION slot, VERSION took OUTPUTFILE's, and the real OUTPUTFILE was refused:

$ zit tarball -- trunk out.tar.gz
zit tarball: unexpected argument 'out.tar.gz'

A caller that adopted the marker uniformly — the intended migration — lost both verbs outright. Downstream, a forge cutting archives on demand answered 503 for every archive route, because the verb underneath could no longer be spelled.

The shape of the defect is why it survived a sweep: with one operand the marker is absorbed silently and the command still succeeds, so nothing goes wrong until a second operand appears. A verb that neither honours the marker nor ignores it is worse than one that never supported it, since the failure shows up one argument late.

Two things changed in that parser. The marker branch now ends the iteration, so the token is consumed. And a value option's argument is now taken before the marker is considered, so --name -- names a directory -- rather than ending the options — which is how every other verb that takes an option argument already behaved.

A new test drives every verb with two operand slots — tarball, zip, cat, annotate, clone, import-git, export-git, import-fossil, settings, and grep — through -- A B and asserts both operands arrive. One-operand coverage cannot catch this class, and the gap here was a verb family a sweep missed rather than a decision taken per verb.

Compatibility

Qualification

zig fmt --check, zig build test, e2e, smoke, git-import-e2e, git-export-e2e, and dst, plus the three-runner CI battery.