The patch queue¶
MuchAdo does not fork upstream. It pins an upstream revision and applies a series of patches to it, each one a commit with a message explaining what it is for.
build/pins.toml the upstream revisions, by hash
build/patches/core/ 21 patches
build/patches/web-apps/ 4 patches
build/build.sh fetch resets each repository to its pinned hash, cleans it, and applies the series with git am — no fuzz. A patch that has stopped applying is news, not something to guess at.
Why a queue rather than a branch¶
The queue is the answer to "what did MuchAdo change?", and it is a short answer that anyone can check. On a long-lived branch that question becomes a diff against a moving target, and a pin bump becomes one large merge instead of a series of small rebases that each say what they were for.
It also makes the AGPL obligation concrete: the corresponding source for a release is a commit hash plus a patch series that provably applies to it.
What is in it¶
core — 21 patches, all macOS. Upstream ported the build from qmake to CMake and the port dropped the Mac branches wholesale; the root .pro files are gone. These patches put them back: boost, ICU, OpenSSL and V8 on macOS, the Cocoa file transporter, Core Text font enumeration, Mach-O link options and rpath, and a handful of platform defines.
web-apps — 4 patches. One build fix (theme tokens were not substituted when deploying HTML), one rendering fix (unsized SVG icons in the language picker rendering at 300×150, the CSS default for a replaced element with no intrinsic size), and two configuration changes that are ours alone.
One idea per patch¶
Each patch does one thing and says why. When a patch needs to change, the queue is regenerated from the build tree with git format-patch — never edited by hand.
Two traps worth knowing, both of which cost real time:
git am strips carriage returns. It parses a patch as mail, and mailinfo removes the trailing CR from every line — so any patch touching upstream's CRLF files is rejected with nothing to suggest that line endings were the cause. The queue is applied with --keep-cr.
Do not git add -A in the build tree. The payload build stages generated assets into it, and a blanket add sweeps them into your patch.
Upstreaming¶
Most of these are upstream's bugs and should go back. See the project's notes/06-upstream.md for which ones, and in what order.