If you maintain patches against more than one U-Boot tree (or another project), you have probably wished that patman could remember which mailing list, SMTP identity and patchwork server to use for each one. A new 32-patch series adds exactly that: first-class support for multiple upstreams, each with its own send settings and patchwork integration.
This post walks through the major features and shows how to set them up.
The problem
Until now, patman assumed a single upstream workflow. If you sent to both U-Boot mainline and the U-Boot Concept tree you had to remember to pass the right flags every time: the correct –identity, –series-to, –no-maintainers and so on. Forget one flag and your patches go to the wrong list, use the wrong SMTP credentials, or skip the maintainer Cc list when they should not.
The solution: named upstreams
Patman now lets you register multiple upstream repositories, each carrying its own send configuration. When a series is associated with an upstream, the correct settings are applied automatically at send time.
Adding upstreams
Register each upstream once:
patman upstream add us https://source.denx.de/u-boot/u-boot.git \
-p https://patchwork.ozlabs.org -t u-boot
patman upstream add ci https://concept.u-boot.org/u-boot/u-boot.git \
-p https://patchwork.u-boot.org -t concept -I concept -m --no-tags
The flags are:
- -p — Patchwork server URL for this upstream
- -t — Patman alias for the To address (defined in ~/.patman)
- -I — Git sendemail identity (selects a [sendemail “<name>”] section from .gitconfig)
- -m — Skip get_maintainer.pl
- –no-tags — Skip subject-tag alias processing
Check your configuration at any time with:
patman upstream ls
which now produces a tidy table:
Name Def Project URL Options
------ --- ---------- -------------------------------------------- ----------
us U-Boot https://source.denx.de/u-boot/u-boot.git pw:...
ci U-Boot https://concept.u-boot.org/u-boot/u-boot.git pw:... no-maintainers no-tags
You can also set a default upstream and update individual fields later:
patman upstream default us
patman upstream set ci -I concept
Per-upstream send settings
Each upstream can carry four send settings that are applied automatically when you run patman series send:
Sendemail identity (“-I“)
Selects a [sendemail “<name>”] section from .gitconfig, so each upstream can use different SMTP servers or credentials without any command-line flags.
Series-to (“-t“)
Sets the default To address for the series. If a Series-to: tag in the cover letter does not match the upstream’s expected address, patman raises an error — preventing patches from going to the wrong list.
No-maintainers (“-m“)
Skips get_maintainer.pl for upstreams where it is not wanted.
No-tags (“–no-tags“)
Skips subject-tag alias processing for upstreams that do not use it.
These settings are stored in patman’s database and looked up from the series’ upstream association, so you never need to remember them.
Patchwork integration
Each upstream can point to a different patchwork server. Once configured, patman automatically uses the right server when linking or checking series status.
Set up patchwork projects per upstream:
patman patchwork set-project U-Boot us
patman patchwork set-project U-Boot ci
The patman patchwork list command (also pw ls) shows all configured projects grouped by upstream.
Associating series with upstreams
When adding a series, specify its upstream with -S:
patman series add -S us
Or set it later:
patman series set-upstream us
The patman series list output now shows a two-character upstream abbreviation next to each series, making it easy to see which remote each series targets at a glance.
Sending with automatic settings
Once everything is wired up, sending is a single command:
patman series send
Patman looks up the upstream for the current series and automatically:
- passes –identity to git send-email
- sets the To address from the upstream’s series-to alias
- skips get_maintainer.pl if the upstream has –no-maintainers
- skips tag processing if the upstream has –no-tags
Other improvements
Autolink with backoff
The autolink feature, which links a sent series to its patchwork entry, now uses exponential backoff (5 s to 30 s) when polling the server. The output is cleaner too: a single progress line replaces the repeated match tables, and on failure patman prints the exact command to retry later.
AI co-developer tag filtering
Patches are now stripped of Co-developed-by and Co-Authored-By tags that reference noreply@ addresses (typically added by AI tools). Human co-developer tags are preserved.
Series metadata sync
When scanning a branch or adding a new version, patman now updates the series description in the database if the cover-letter subject has changed. This keeps the series list output accurate without manual intervention.
Command aliases
All list subcommands now accept both ls and list as aliases, for consistency across series, upstream and patchwork commands.
Getting started
If you already use patman, the database is migrated automatically. Existing series will need an upstream association, which you can set with patman series set-upstream. During migration, patman attempts to auto-detect the upstream for each series based on the git remote-tracking branch.
Here is the quick version:
# 1. Register upstreams
patman upstream add us https://source.denx.de/u-boot/u-boot.git \
-p https://patchwork.ozlabs.org -t u-boot
patman upstream add ci https://concept.u-boot.org/u-boot/u-boot.git \
-p https://patchwork.u-boot.org -t concept -I concept -m --no-tags
# 2. Set up patchwork projects
patman patchwork set-project U-Boot us
patman patchwork set-project U-Boot ci
# 3. Add a series with its upstream
patman series add -S us
# 4. Send -- settings applied automatically
patman series send
Check out the documentation too!


