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

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 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 it uses 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 this will also call get_maintainer.pl on each of your
patches automatically.


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 will
locate and use the file 'doc/git-mailrc' in your U-Boot directory.
This contains most of the aliases you will need.

For Linux 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 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

<<<


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 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.

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.

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.

 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.

 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.

 Cc: Their Name <email>
	This copies a single patch to another email address.

Series-process-log: sort, uniq
	This tells patman to sort and/or uniq the change logs. It is
	assumed that each change log entry is only a single line long.
	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.

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

BUG=...
TEST=...
Change-Id:
Review URL:
Reviewed-on:


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 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.

    Cc: sandbox, mikef, ag
    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 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.


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.


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 flag to run them,
and make sure you are in the tools/patman directory first:

    $ cd /path/to/u-boot
    $ cd 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
