thunderbird-patch-review
Simple email patch review tool for Thunderbird
git clone git://mccd.space/thunderbird-patch-reviewcommit 5989a166b6193b155296f099cc7d829a21339100
parent 757f76f663162a6357b637073e2ace0b5bfc8e37
Author: Marc <marc@coquand.email>
Date: Sun, 19 Jul 2026 10:39:13 +0200
Delete old README
Diffstat:
| D | README | | | 162 | ------------------------------------------------------------------------------- |
1 file changed, 0 insertions(+), 162 deletions(-)
diff --git a/README b/README
@@ -1,162 +0,0 @@
-PATCH-REVIEW(1) Thunderbird Patch Review PATCH-REVIEW(1)
-
-NAME
- patch-review - review git patches from email inside Thunderbird
-
-SYNOPSIS
- A Thunderbird MailExtension. Open a patch email, press Review, comment
- on hunks, send the review as a mailing-list reply, and apply the series
- to a local repository with git-am(1).
-
-DESCRIPTION
- patch-review brings a review interface to git-by-email workflows
- (git-send-email(1) style). When the selected messages (or thread) look
- like a patch -- a [PATCH] subject tag or a unified diff in the body --
- the Review button in the main toolbar becomes active. It opens a
- dedicated review tab that shows the whole series: cover letter, per-
- patch commit messages, and every file and hunk rendered as a colored
- diff. Within replaced lines, the span that actually changed gets a
- stronger highlight, computed from the common prefix and suffix of each
- deleted/added line pair.
-
- Clicking a diff line attaches an inline comment to it; comments are
- saved as drafts (keyed by Message-ID) and survive restarting
- Thunderbird. Send review turns the comments of each commented patch
- into one plain-text reply-to-all, quoting the relevant hunks kernel-
- style with the comments interleaved unquoted below the lines they
- target, and sends the replies immediately; the draft comments are then
- cleared and the review tab closes. The attached drop-down offers
- Preview in compose instead, which leaves the reply drafts open in
- compose windows. A reply that fails to send also stays open, so
- nothing is lost. Apply series runs git am --3way on the raw patch
- messages in the configured repository. On conflict git am --abort is
- run and its output reported, leaving the repository untouched. Its
- drop-down offers Modify and apply -- apply, then open the touched files
- in your editor -- and Download patchset -- save the raw series as one
- mbox file, ready for git am.
-
-INSTALLATION
- Package the extension as an .xpi and install it via the Add-ons Manager
- gear menu (Install Add-on From File...). From the project root:
-
- (cd extension && zip -qrX ../patch-review.xpi .)
-
- The subshell runs the zip(1) from inside extension/ so the archive
- holds manifest.json at its root, not under extension/. git(1) is a
- dependency (for Apply). For development, instead pick Tools ->
- Developer Tools -> Debug Add-ons -> Load Temporary Add-on..., and
- select extension/manifest.json; it is dropped on restart.
-
-CONFIGURATION
- Open the extension's preferences:
-
- Editor command
- Run from the repository after a successful apply, with the
- changed files as arguments. Use a non-blocking GUI-capable
- command such as code -n or emacsclient -n; a bare terminal
- editor has no terminal to open in. Empty means $EDITOR.
-
- Apply strategy
- git am --3way (default) or plain git am.
-
- Repository mappings
- Substring matches against a patch's List-Id header or sender,
- mapped to an absolute repository path. When no mapping matches,
- the last path a series was applied to is used; it is remembered
- until changed.
-
- Repository paths can be chosen with the Browse button, which opens
- Thunderbird's native directory chooser; the path field stays editable
- either way.
-
-PERMISSIONS
- The extension requests the fewest permissions it needs; none are
- granted to remote content.
-
- messagesRead
- Reads the selected message and its sibling patches in the same
- folder (subject, author, body) to build the review.
-
- accountsRead
- Resolves the default identity of the account that owns the
- reviewed message, for the From-address label and send-as.
-
- storage
- Persists draft comments (keyed by Message-ID) across restarts,
- plus the editor command, apply strategy, repo mappings, and the
- last applied repository path.
-
- compose, (compose.send)
- Opens reply-to-all compose windows from Send review and sends
- them in Send now mode. Without compose.send the review can only
- be previewed in compose, never sent.
-
- downloads
- Writes the Download patchset .mbox to disk.
-
- tabs Opens the review tab and removes it after a successful send.
-
- The privileged Apply, Browse... , and Open editor code does not use a
- Mozilla permission: it is a WebExtension Experiment
- (experiment_apis.patchHost) shipped inside the XPI and runs only when
- the extension is loaded.
-
-SOURCEHUT INTEGRATION
- When the series arrives via a sourcehut mailing list (a lists.sr.ht
- address in the List-Id or recipients), the review tab shows a set
- status checkbox with the patchset states sourcehut understands:
- APPROVED, NEEDS_REVISION, REJECTED, PROPOSED, SUPERSEDED, APPLIED.
- When enabled, the first reply of the review carries an
- X-Sourcehut-Patchset-Update header with the chosen status, which
- sourcehut applies to the patchset. A status can also be sent without
- any line comments -- Send review then sends a single, empty reply to
- the cover letter (or first patch) carrying just the header.
-
-REVIEW WORKFLOW
- 1. Select any message of the series -- or the whole
- thread -- and press Review in the main toolbar.
- 2. The tab collects the sibling patches from the same folder
- (same series tag, version, and patch count).
- 3. Click lines, write comments; Ctrl+Enter saves.
- "Comment on patch" attaches a general remark instead.
- 4. Send review: one reply per commented patch, sent
- immediately (or use the drop-down to preview first).
- 5. Apply series: git am into the mapped repository,
- then Open editor on the touched files.
-
-FILES
- extension/
- The MailExtension (manifest v2, vanilla ES modules, no build
- step).
-
- extension/api/patchHost/
- The privileged part (a WebExtension Experiment): runs git-am(1)
- and the editor through Thunderbird's Subprocess API and shows
- the directory chooser with nsIFilePicker. Everything outside
- this directory runs as ordinary sandboxed WebExtension code.
-
- tests/ node tests/run.mjs exercises the pure modules (subject parsing,
- diff parsing, reply formatting) against fixtures generated by
- git-format-patch(1), and checks the experiment's manifest
- wiring. Regenerate fixtures with tests/gen-fixtures.sh.
-
-CAVEATS
- Patches arriving as attachments, HTML-only mail, and reviewing from a
- git worktree preview are not supported yet. Series collection searches
- the folder of the opened message only.
-
-SEE ALSO
- The introductory post can be found at
- <https://mccd.space/posts/26-07-18/3-patch-review-tool-for-thunderbird>
-
-CONTRIBUTING
- Disclaimer: this plugin was vibe coded -- written by an AI agent under
- human direction.
-
- Contributions and bug reports go to the mailing list:
- <~marcc/thunderbird-review-plugin@lists.sr.ht>
-
-AUTHOR
- Marc Coquand <marc@coquand.email>
-
-patch-review 0.1.0 July 2026 PATCH-REVIEW(1)