Artifact 4ddefa6f4434e12a041d3d35655c9f8722e212521a6bf5a91bdbda22d8b19790:
- File
docs/RELEASE-NOTES-0.3.26.md
— part of check-in
[28cd7f506a]
at
2026-09-20 22:07:15
on branch trunk
— tarball and zip: consume the end-of-options marker
The marker branch fell through to the operand slots, so it took VERSION's place and OUTPUTFILE was refused. A value option's argument is now also taken before the marker is considered. Release 0.3.26. (user: dmestas, size: 2612) [annotate] [blame] [check-ins using]
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
- No on-disk repository or wire format changed; Fossil RFC revision 00 remains the target.
zit tarball -- VERSIONandzit zip -- VERSIONpreviously archived the check-in named by the token after the marker, treating the marker itself as VERSION only when nothing followed. Archives written by earlier versions are unchanged and still readable.zit tarball --name -- ...previously ended the options; it now names a top-level directory--.
Qualification
zig fmt --check, zig build test, e2e, smoke, git-import-e2e,
git-export-e2e, and dst, plus the three-runner CI battery.