zit 0.8.1 makes pull request refs safe to fetch for a Git mirror. In 0.8.0,
a source clone holding refs/pull/*/head exported every pull request's
commits into the import (open, closed unmerged and fast-forwarded alike),
mostly as stray forks of trunk. Now only the pull requests a squash merge
took are imported. Each lands on a branch of its own, closed at the head
the squash took, and every other pull request ref is ignored.
This release is from trunk. Stores and the wire are unchanged from 0.8.0.
Only the pull requests a squash took are imported
0.8.0 records a squash merge as a cherry-pick of the pull request head it
took, which needs that head in the import. But import-git exported every
ref in the source, so fetching refs/pull/*/head for that purpose also
brought in every pull request a repository ever had. On a repository with
hundreds of pull requests, each one became check-ins on trunk with nothing
to join them.
The export now leaves refs/pull/ out, then names only the heads that a
squash on the default branch pairs with. Those commits are imported on a
branch named pull/N and closed at the head, the same way a branch
that a merge commit names is closed once Git deleted it. An open pull
request, one closed without merging, and one merged by fast-forward or
merge commit are never imported from their ref. A pull request whose
branch still exists is imported from that branch, as before, and keeps
its branch's name. The squash's Q card points at the head either way.
Pull request refs are also left out of the refs an import records and
reconciles with --into. They are read only to pair squashes.
A mirror can now fetch +refs/pull/*/head:refs/pull/*/head with this
release.
Compatibility
Stores and the wire are unchanged from 0.8.0. A source without
refs/pull/ refs imports exactly as 0.8.0 imports it. A store 0.8.0 wrote
from a source with pull refs keeps every check-in it holds, because zit never
rewrites one. A fresh import gives the history this release describes.
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.