Skip to content

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.