# SPDX-License-Identifier: GPL-2.0+
# Copyright (c) 2011 The Chromium OS Authors.

What is this?
=============

This tool is a Python script which:
- Creates patch directly from your branch
- Cleans them up by removing unwanted tags
- Inserts a cover letter with change lists
- Runs the patches through checkpatch.pl and its own checks
- Optionally emails them out to selected people

It also has some Patchwork features:
- shows review tags from Patchwork so you can update your local patches
- pulls these down into a new branch on request

It is intended to automate patch creation and make it a less
error-prone process. It is useful for U-Boot and Linux work so far,
since they use the checkpatch.pl script.

It is configured almost entirely by tags it finds in your commits.
This means that you can work on a number of different branches at
once, and keep the settings with each branch rather than having to
git format-patch, git send-email, etc. with the correct parameters
each time. So for example if you put:

Series-to: fred.blogs@napier.co.nz

in one of your commits, the series will be sent there.

In Linux and U-Boot this will also call get_maintainer.pl on each of your
patches automatically (unless you use -m to disable this).


How to use this tool
====================

This tool requires a certain way of working:

- Maintain a number of branches, one for each patch series you are
working on
- Add tags into the commits within each branch to indicate where the
series should be sent, cover letter, version, etc. Most of these are
normally in the top commit so it is easy to change them with 'git
commit --amend'
- Each branch tracks the upstream branch, so that this script can
automatically determine the number of commits in it (optional)
- Check out a branch, and run this script to create and send out your
patches. Weeks later, change the patches and repeat, knowing that you
will get a consistent result each time.


How to configure it
===================

For most cases of using patman for U-Boot development, patman can use the
file 'doc/git-mailrc' in your U-Boot directory to supply the email aliases
you need. To make this work, tell git where to find the file by typing
this once:

    git config sendemail.aliasesfile doc/git-mailrc

For both Linux and U-Boot the 'scripts/get_maintainer.pl' handles figuring
out where to send patches pretty well.

During the first run patman creates a config file for you by taking the default
user name and email address from the global .gitconfig file.

To add your own, create a file ~/.patman like this:

>>>>
# patman alias file

[alias]
me: Simon Glass <sjg@chromium.org>

u-boot: U-Boot Mailing List <u-boot@lists.denx.de>
wolfgang: Wolfgang Denk <wd@denx.de>
others: Mike Frysinger <vapier@gentoo.org>, Fred Bloggs <f.bloggs@napier.net>

<<<<

Aliases are recursive.

The checkpatch.pl in the U-Boot tools/ subdirectory will be located and
used. Failing that you can put it into your path or ~/bin/checkpatch.pl

If you want to avoid sending patches to email addresses that are picked up
by patman but are known to bounce you can add a [bounces] section to your
.patman file. Unlike the [alias] section these are simple key: value pairs
that are not recursive.

>>>

[bounces]
gonefishing: Fred Bloggs <f.bloggs@napier.net>

<<<


If you want to change the defaults for patman's command-line arguments,
you can add a [settings] section to your .patman file.  This can be used
for any command line option by referring to the "dest" for the option in
patman.py.  For reference, the useful ones (at the moment) shown below
(all with the non-default setting):

>>>

[settings]
ignore_errors: True
process_tags: False
verbose: True
smtp_server: /path/to/sendmail

<<<


If you want to adjust settings (or aliases) that affect just a single
project you can add a section that looks like [project_settings] or
[project_alias].  If you want to use tags for your linux work, you could
do:

>>>

[linux_settings]
process_tags: True

<<<


How to run it
=============

First do a dry run:

$ ./tools/patman/patman -n

If it can't detect the upstream branch, try telling it how many patches
there are in your series:

$ ./tools/patman/patman -n -c5

This will create patch files in your current directory and tell you who
it is thinking of sending them to. Take a look at the patch files.

$ ./tools/patman/patman -n -c5 -s1

Similar to the above, but skip the first commit and take the next 5. This
is useful if your top commit is for setting up testing.


How to install it
=================

The most up to date version of patman can be found in the U-Boot sources.
However to use it on other projects it may be more convenient to install it as
a standalone application. A distutils installer is included, this can be used
to install patman:

$ cd tools/patman && python setup.py install


How to add tags
===============

To make this script useful you must add tags like the following into any
commit. Most can only appear once in the whole series.

Series-to: email / alias
	Email address / alias to send patch series to (you can add this
	multiple times)

Series-cc: email / alias, ...
	Email address / alias to Cc patch series to (you can add this
	multiple times)

Series-version: n
	Sets the version number of this patch series

Series-prefix: prefix
	Sets the subject prefix. Normally empty but it can be RFC for
	RFC patches, or RESEND if you are being ignored. The patch subject
	is like [RFC PATCH] or [RESEND PATCH].
	In the meantime, git format.subjectprefix option will be added as
	well. If your format.subjectprefix is set to InternalProject, then
	the patch shows like: [InternalProject][RFC/RESEND PATCH]

Series-name: name
	Sets the name of the series. You don't need to have a name, and
	patman does not yet use it, but it is convenient to put the branch
	name here to help you keep track of multiple upstreaming efforts.

Series-links: [id | version:id]...
	Set the ID of the series in patchwork. You can set this after you send
	out the series and look in patchwork for the resulting series. The
	URL you want is the one for the series itself, not any particular patch.
	E.g. for http://patchwork.ozlabs.org/project/uboot/list/?series=187331
	the series ID is 187331. This property can have a list of series IDs,
	one for each version of the series, e.g.

	   Series-links: 1:187331 2:188434 189372

	Patman always uses the one without a version, since it assumes this is
	the latest one. When this tag is provided, patman can compare your local
	branch against patchwork to see what new reviews your series has
	collected ('patman status').

Cover-letter:
This is the patch set title
blah blah
more blah blah
END
	Sets the cover letter contents for the series. The first line
	will become the subject of the cover letter

Cover-letter-cc: email / alias
	Additional email addresses / aliases to send cover letter to (you
	can add this multiple times)

Series-notes:
blah blah
blah blah
more blah blah
END
	Sets some notes for the patch series, which you don't want in
	the commit messages, but do want to send, The notes are joined
	together and put after the cover letter. Can appear multiple
	times.

Commit-notes:
blah blah
blah blah
more blah blah
END
	Similar, but for a single commit (patch). These notes will appear
	immediately below the --- cut in the patch file.

 Signed-off-by: Their Name <email>
	A sign-off is added automatically to your patches (this is
	probably a bug). If you put this tag in your patches, it will
	override the default signoff that patman automatically adds.
	Multiple duplicate signoffs will be removed.

 Tested-by: Their Name <email>
 Reviewed-by: Their Name <email>
 Acked-by: Their Name <email>
	These indicate that someone has tested/reviewed/acked your patch.
	When you get this reply on the mailing list, you can add this
	tag to the relevant commit and the script will include it when
	you send out the next version. If 'Tested-by:' is set to
	yourself, it will be removed. No one will believe you.

Series-changes: n
- Guinea pig moved into its cage
- Other changes ending with a blank line
<blank line>
	This can appear in any commit. It lists the changes for a
	particular version n of that commit. The change list is
	created based on this information. Each commit gets its own
	change list and also the whole thing is repeated in the cover
	letter (where duplicate change lines are merged).

	By adding your change lists into your commits it is easier to
	keep track of what happened. When you amend a commit, remember
	to update the log there and then, knowing that the script will
	do the rest.

Commit-changes: n
- This line will not appear in the cover-letter changelog
<blank line>
	This tag is like Series-changes, except changes in this changelog will
	only appear in the changelog of the commit this tag is in. This is
	useful when you want to add notes which may not make sense in the cover
	letter. For example, you can have short changes such as "New" or
	"Lint".

Cover-changes: n
- This line will only appear in the cover letter
<blank line>
	This tag is like Series-changes, except changes in this changelog will
	only appear in the cover-letter changelog. This is useful to summarize
	changes made with Commit-changes, or to add additional context to
	changes.

Patch-cc: Their Name <email>
	This copies a single patch to another email address. Note that the
	Cc: used by git send-email is ignored by patman, but will be
	interpreted by git send-email if you use it.

Series-process-log: sort, uniq
	This tells patman to sort and/or uniq the change logs. Changes may be
	multiple lines long, as long as each subsequent line of a change begins
	with a whitespace character. For example,

- This change
  continues onto the next line
- But this change is separate

	Use 'sort' to sort the entries, and 'uniq' to include only
	unique entries. If omitted, no change log processing is done.
	Separate each tag with a comma.

Change-Id:
	This tag is stripped out but is used to generate the Message-Id
	of the emails that will be sent. When you keep the Change-Id the
	same you are asserting that this is a slightly different version
	(but logically the same patch) as other patches that have been
	sent out with the same Change-Id.

Various other tags are silently removed, like these Chrome OS and
Gerrit tags:

BUG=...
TEST=...
Review URL:
Reviewed-on:
Commit-xxxx: (except Commit-notes)

Exercise for the reader: Try adding some tags to one of your current
patch series and see how the patches turn out.


Where Patches Are Sent
======================

Once the patches are created, patman sends them using git send-email. The
whole series is sent to the recipients in Series-to: and Series-cc.
You can Cc individual patches to other people with the Patch-cc: tag. Tags
in the subject are also picked up to Cc patches. For example, a commit like
this:

>>>>
commit 10212537b85ff9b6e09c82045127522c0f0db981
Author: Mike Frysinger <vapier@gentoo.org>
Date:	Mon Nov 7 23:18:44 2011 -0500

    x86: arm: add a git mailrc file for maintainers

    This should make sending out e-mails to the right people easier.

    Patch-cc: sandbox, mikef, ag
    Patch-cc: afleming
<<<<

will create a patch which is copied to x86, arm, sandbox, mikef, ag and
afleming.

If you have a cover letter it will get sent to the union of the Patch-cc
lists of all of the other patches. If you want to sent it to additional
people you can add a tag:

Cover-letter-cc: <list of addresses>

These people will get the cover letter even if they are not on the To/Cc
list for any of the patches.


Patchwork Integration
=====================

Patman has a very basic integration with Patchwork. If you point patman to
your series on patchwork it can show you what new reviews have appears since
you sent your series.

To set this up, add a Series-link tag to one of the commits in your series
(see above).

Then you can type

    patman status

and patman will show you each patch and what review tags have been collected,
for example:

...
 21 x86: mtrr: Update the command to use the new mtrr
    Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
  + Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
 22 x86: mtrr: Restructure so command execution is in
    Reviewed-by: Wolfgang Wallner <wolfgang.wallner@br-automation.com>
  + Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
...

This shows that patch 21 and 22 were sent out with one review but have since
attracted another review each. If the series needs changes, you can update
these commits with the new review tag before sending the next version of the
series.

To automatically pull into these tags into a new branch, use the -d option:

    patman status -d mtrr4

This will create a new 'mtrr4' branch which is the same as your current branch
but has the new review tags in it. The tags are added in alphabetic order and
are placed immediately after any existing ack/review/test/fixes tags, or at the
end. You can check that this worked with:

    patman -b mtrr4 status

which should show that there are no new responses compared to this new branch.


Example Work Flow
=================

The basic workflow is to create your commits, add some tags to the top
commit, and type 'patman' to check and send them.

Here is an example workflow for a series of 4 patches. Let's say you have
these rather contrived patches in the following order in branch us-cmd in
your tree where 'us' means your upstreaming activity (newest to oldest as
output by git log --oneline):

    7c7909c wip
    89234f5 Don't include standard parser if hush is used
    8d640a7 mmc: sparc: Stop using builtin_run_command()
    0c859a9 Rename run_command2() to run_command()
    a74443f sandbox: Rename run_command() to builtin_run_command()

The first patch is some test things that enable your code to be compiled,
but that you don't want to submit because there is an existing patch for it
on the list. So you can tell patman to create and check some patches
(skipping the first patch) with:

    patman -s1 -n

If you want to do all of them including the work-in-progress one, then
(if you are tracking an upstream branch):

    patman -n

Let's say that patman reports an error in the second patch. Then:

    git rebase -i HEAD~6
    <change 'pick' to 'edit' in 89234f5>
    <use editor to make code changes>
    git add -u
    git rebase --continue

Now you have an updated patch series. To check it:

    patman -s1 -n

Let's say it is now clean and you want to send it. Now you need to set up
the destination. So amend the top commit with:

    git commit --amend

Use your editor to add some tags, so that the whole commit message is:

    The current run_command() is really only one of the options, with
    hush providing the other. It really shouldn't be called directly
    in case the hush parser is bring used, so rename this function to
    better explain its purpose.

    Series-to: u-boot
    Series-cc: bfin, marex
    Series-prefix: RFC
    Cover-letter:
    Unified command execution in one place

    At present two parsers have similar code to execute commands. Also
    cmd_usage() is called all over the place. This series adds a single
    function which processes commands called cmd_process().
    END

    Change-Id: Ica71a14c1f0ecb5650f771a32fecb8d2eb9d8a17


You want this to be an RFC and Cc the whole series to the bfin alias and
to Marek. Two of the patches have tags (those are the bits at the front of
the subject that say mmc: sparc: and sandbox:), so 8d640a7 will be Cc'd to
mmc and sparc, and the last one to sandbox.

Now to send the patches, take off the -n flag:

   patman -s1

The patches will be created, shown in your editor, and then sent along with
the cover letter. Note that patman's tags are automatically removed so that
people on the list don't see your secret info.

Of course patches often attract comments and you need to make some updates.
Let's say one person sent comments and you get an Acked-by: on one patch.
Also, the patch on the list that you were waiting for has been merged,
so you can drop your wip commit. So you resync with upstream:

    git fetch origin		(or whatever upstream is called)
    git rebase origin/master

and use git rebase -i to edit the commits, dropping the wip one. You add
the ack tag to one commit:

    Acked-by: Heiko Schocher <hs@denx.de>

update the Series-cc: in the top commit:

    Series-cc: bfin, marex, Heiko Schocher <hs@denx.de>

and remove the Series-prefix: tag since it it isn't an RFC any more. The
series is now version two, so the series info in the top commit looks like
this:

    Series-to: u-boot
    Series-cc: bfin, marex, Heiko Schocher <hs@denx.de>
    Series-version: 2
    Cover-letter:
    ...

Finally, you need to add a change log to the two commits you changed. You
add change logs to each individual commit where the changes happened, like
this:

    Series-changes: 2
    - Updated the command decoder to reduce code size
    - Wound the torque propounder up a little more

(note the blank line at the end of the list)

When you run patman it will collect all the change logs from the different
commits and combine them into the cover letter, if you have one. So finally
you have a new series of commits:

    faeb973 Don't include standard parser if hush is used
    1b2f2fe mmc: sparc: Stop using builtin_run_command()
    cfbe330 Rename run_command2() to run_command()
    0682677 sandbox: Rename run_command() to builtin_run_command()

so to send them:

    patman

and it will create and send the version 2 series.

General points:

1. When you change back to the us-cmd branch days or weeks later all your
information is still there, safely stored in the commits. You don't need
to remember what version you are up to, who you sent the last lot of patches
to, or anything about the change logs.

2. If you put tags in the subject, patman will Cc the maintainers
automatically in many cases.

3. If you want to keep the commits from each series you sent so that you can
compare change and see what you did, you can either create a new branch for
each version, or just tag the branch before you start changing it:

    git tag sent/us-cmd-rfc
    ...later...
    git tag sent/us-cmd-v2

4. If you want to modify the patches a little before sending, you can do
this in your editor, but be careful!

5. If you want to run git send-email yourself, use the -n flag which will
print out the command line patman would have used.

6. It is a good idea to add the change log info as you change the commit,
not later when you can't remember which patch you changed. You can always
go back and change or remove logs from commits.

7. Some mailing lists have size limits and when we add binary contents to
our patches it's easy to exceed the size limits. Use "--no-binary" to
generate patches without any binary contents. You are supposed to include
a link to a git repository in your "Commit-notes", "Series-notes" or
"Cover-letter" for maintainers to fetch the original commit.

8. Patches will have no changelog entries for revisions where they did not
change. For clarity, if there are no changes for this patch in the most
recent revision of the series, a note will be added. For example, a patch
with the following tags in the commit

    Series-version: 5
    Series-changes: 2
    - Some change

    Series-changes: 4
    - Another change

would have a changelog of

    (no changes since v4)

    Changes in v4:
    - Another change

    Changes in v2:
    - Some change

Other thoughts
==============

This script has been split into sensible files but still needs work.
Most of these are indicated by a TODO in the code.

It would be nice if this could handle the In-reply-to side of things.

The tests are incomplete, as is customary. Use the 'test' subcommand to run
them:

    $ tools/patman/patman test

Error handling doesn't always produce friendly error messages - e.g.
putting an incorrect tag in a commit may provide a confusing message.

There might be a few other features not mentioned in this README. They
might be bugs. In particular, tags are case sensitive which is probably
a bad thing.


Simon Glass <sjg@chromium.org>
v1, v2, 19-Oct-11
revised v3 24-Nov-11
