Re: [PATCH v3] doc: add maintainer book

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Nov 30, 2017 at 07:01:19AM -0200, Mauro Carvalho Chehab wrote:
> Em Thu, 30 Nov 2017 12:55:07 +1100
> "Tobin C. Harding" <me@xxxxxxxx> escreveu:
> 
> > There is currently very little documentation in the kernel on maintainer
> > level tasks. In particular there are no documents on creating pull
> > requests to submit to Linus.
> > 
> > Quoting Greg Kroah-Hartman on LKML:
> > 
> >     Anyway, this actually came up at the kernel summit / maintainer
> >     meeting a few weeks ago, in that "how do I make a
> >     good pull request to Linus" is something we need to document.
> > 
> >     Here's what I do, and it seems to work well, so maybe we should turn
> >     it into the start of the documentation for how to do it.
> > 
> > (quote references: kernel summit, Europe 2017)
> > 
> > Create a new kernel documentation book 'how to be a maintainer'
> > (suggested by Jonathan Corbet). Add chapters on 'configuring git' and
> > 'creating a pull request'.
> > 
> > Most of the content was written by Linus Torvalds and Greg Kroah-Hartman
> > in discussion on LKML. This is stated at the start of one of the
> > chapters and the original email thread is referenced in
> > 'pull-requests.rst'.
> > 
> > Signed-off-by: Tobin C. Harding <me@xxxxxxxx>
> > Reviewed-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
> > 
> > ---
> > 
> > v3:
> >  - Modified details for branch and tag naming, suggested by Mauro
> >    Carvalho Chehab.
> >  - Added example email subject line for submitting pull requests.
> >  - Re-added Greg's reviewed-by tag from version 1.
> > 
> > v2:
> >  - Change title of book, suggested by Dan Williams.
> > 
> > ---
> >  Documentation/index.rst                    |   1 +
> >  Documentation/maintainer/conf.py           |  10 ++
> >  Documentation/maintainer/configure-git.rst |  34 ++++++
> >  Documentation/maintainer/index.rst         |  10 ++
> >  Documentation/maintainer/pull-requests.rst | 182 +++++++++++++++++++++++++++++
> >  5 files changed, 237 insertions(+)
> >  create mode 100644 Documentation/maintainer/conf.py
> >  create mode 100644 Documentation/maintainer/configure-git.rst
> >  create mode 100644 Documentation/maintainer/index.rst
> >  create mode 100644 Documentation/maintainer/pull-requests.rst
> > 
> > diff --git a/Documentation/index.rst b/Documentation/index.rst
> > index cb7f1ba5b3b1..a4fb34dddcf3 100644
> > --- a/Documentation/index.rst
> > +++ b/Documentation/index.rst
> > @@ -52,6 +52,7 @@ merged much easier.
> >     dev-tools/index
> >     doc-guide/index
> >     kernel-hacking/index
> > +   maintainer/index
> >  
> >  Kernel API documentation
> >  ------------------------
> > diff --git a/Documentation/maintainer/conf.py b/Documentation/maintainer/conf.py
> > new file mode 100644
> > index 000000000000..81e9eb7a7884
> > --- /dev/null
> > +++ b/Documentation/maintainer/conf.py
> > @@ -0,0 +1,10 @@
> > +# -*- coding: utf-8; mode: python -*-
> > +
> > +project = 'Linux Kernel Development Documentation'
> > +
> > +tags.add("subproject")
> > +
> > +latex_documents = [
> > +    ('index', 'maintainer.tex', 'Linux Kernel Development Documentation',
> > +     'The kernel development community', 'manual'),
> > +]
> > diff --git a/Documentation/maintainer/configure-git.rst b/Documentation/maintainer/configure-git.rst
> > new file mode 100644
> > index 000000000000..78bbbb0d2c84
> > --- /dev/null
> > +++ b/Documentation/maintainer/configure-git.rst
> > @@ -0,0 +1,34 @@
> > +.. _configuregit:
> > +
> > +Configure Git
> > +=============
> > +
> > +This chapter describes maintainer level git configuration.
> > +
> > +Tagged branches used in :ref:`Documentation/maintainer/pull-requests.rst
> > +<pullrequests>` should be signed with the developers public GPG key. Signed
> > +tags can be created by passing the ``-u`` flag to ``git tag``. However,
> > +since you would *usually* use the same key for the same project, you can
> > +set it once with
> > +::
> > +
> > +	git config user.signingkey "keyname"
> > +
> > +Alternatively, edit your ``.git/config`` or ``~/.gitconfig`` file by hand:
> > +::
> > +
> > +	[user]
> > +		name = Jane Developer
> > +		email = jd@xxxxxxxxxx
> > +		signingkey = jd@xxxxxxxxxx
> > +
> > +You may need to tell ``git`` to use ``gpg2``
> > +::
> > +
> > +	[gpg]
> > +		program = /path/to/gpg2
> > +
> > +You may also like to tell ``gpg`` which ``tty`` to use (add to your shell rc file)
> > +::
> > +
> > +	export GPG_TTY=$(tty)
> > diff --git a/Documentation/maintainer/index.rst b/Documentation/maintainer/index.rst
> > new file mode 100644
> > index 000000000000..fa84ac9cae39
> > --- /dev/null
> > +++ b/Documentation/maintainer/index.rst
> > @@ -0,0 +1,10 @@
> > +==========================
> > +Kernel Maintainer Handbook
> > +==========================
> > +
> > +.. toctree::
> > +   :maxdepth: 2
> > +
> > +   configure-git
> > +   pull-requests
> > +
> > diff --git a/Documentation/maintainer/pull-requests.rst b/Documentation/maintainer/pull-requests.rst
> > new file mode 100644
> > index 000000000000..a25e1002a5b9
> > --- /dev/null
> > +++ b/Documentation/maintainer/pull-requests.rst
> > @@ -0,0 +1,182 @@
> > +.. _pullrequests:
> > +
> > +Creating Pull Requests
> > +======================
> > +
> > +This chapter describes how maintainers can create and submit pull requests
> > +to other maintainers. This is useful for transferring changes from one
> > +maintainers tree to another maintainers tree.
> > +
> > +This document was written by Tobin C. Harding (who at that time, was not an
> > +experienced maintainer) primarily from comments made by Greg Kroah-Hartman
> > +and Linus Torvalds on LKML. Suggestions and fixes by Jonathan Corbet.
> > +Misrepresentation was unintentional but inevitable, please direct abuse to
> > +Tobin C. Harding <me@xxxxxxxx>.
> > +
> > +Original email thread::
> > +
> > +	http://lkml.kernel.org/r/20171114110500.GA21175@xxxxxxxxx
> > +
> > +
> > +Create Branch
> > +-------------
> > +
> > +To start with you will need to have all the changes you wish to include in
> > +the pull request on a separate branch. Typically you will base this branch
> > +off of a branch in the developers tree whom you intend to send the pull
> > +request to.
> > +
> > +In order to create the pull request you must first tag the branch that you
> > +have just created. It is recommended that you choose a meaningful tag name,
> > +in a way that you and others can understand, even after some time.  A good
> > +practice is to include in the name an indicator of the sybsystem of origin
> > +and the target kernel version.
> > +
> > +So, by way of an example, Greg gives; a pull request with miscellaneous
> 
> Nitpick: there's an extra ";" character above:
> 	gives; -> gives

Ha ha, I thought for ages how to word this bit. The irony of grammar
corrections from a non-native speaker is not lost on me :)

Perhaps:

     By way of an example Greg gives, a pull request with miscellaneous

I'll take any nitpicks you have Mauro, striving for perfection here. Thanks.

> > +stuff for drivers/char, to be applied at the Kernel version 4.15-rc1 could
> > +be named as ``char-misc-4.15-rc1``. If such tag would be produced from a
> > +branch named ``char-misc-next``, you would be using the following command
> > +::
> > +
> > +        git tag -s char-misc-4.15-rc1 char-misc-next
> > +
> > +that will create a signed tag called ``char-misc-4.15-rc1`` based on the
> > +last commit in the ``char-misc-next`` branch, and sign it with your gpg key
> > +(see :ref:`Documentation/maintainer/configure_git.rst <configuregit>`).
> > +
> > +Linus will only accept pull requests based on a signed tag. Other
> > +maintainers may differ.
> > +
> > +When you run the above command ``git`` will drop you into an editor and ask
> > +you to describe the tag.  In this case, you are describing a pull request,
> > +so outline what is contained here, why it should be merged, and what, if
> > +any, testing has been done.  All of this information will end up in the tag
> > +itself, and then in the merge commit that the maintainer makes if/when they
> > +merge the pull request. So write it up well, as it will be in the kernel
> > +tree for forever.
> > +
> > +As said by Linus::
> > +
> > +	Anyway, at least to me, the important part is the *message*. I want
> > +	to understand what I'm pulling, and why I should pull it. I also
> > +	want to use that message as the message for the merge, so it should
> > +	not just make sense to me, but make sense as a historical record
> > +	too.
> > +
> > +	Note that if there is something odd about the pull request, that
> > +	should very much be in the explanation. If you're touching files
> > +	that you don't maintain, explain _why_. I will see it in the
> > +	diffstat anyway, and if you didn't mention it, I'll just be extra
> > +	suspicious.  And when you send me new stuff after the merge window
> > +	(or even bug-fixes, but ones that look scary), explain not just
> > +	what they do and why they do it, but explain the _timing_. What
> > +	happened that this didn't go through the merge window..
> > +
> > +	I will take both what you write in the email pull request _and_ in
> > +	the signed tag, so depending on your workflow, you can either
> > +	describe your work in the signed tag (which will also automatically
> > +	make it into the pull request email), or you can make the signed
> > +	tag just a placeholder with nothing interesting in it, and describe
> > +	the work later when you actually send me the pull request.
> > +
> > +	And yes, I will edit the message. Partly because I tend to do just
> > +	trivial formatting (the whole indentation and quoting etc), but
> > +	partly because part of the message may make sense for me at pull
> > +	time (describing the conflicts and your personal issues for sending
> > +	it right now), but may not make sense in the context of a merge
> > +	commit message, so I will try to make it all make sense. I will
> > +	also fix any speeling mistaeks and bad grammar I notice,
> > +	particularly for non-native speakers (but also for native ones
> > +	;^). But I may miss some, or even add some.
> > +
> > +			Linus
> > +
> > +Greg gives, as an example pull request::
> > +
> > +	Char/Misc patches for 4.15-rc1
> > +
> > +	Here is the big char/misc patch set for the 4.15-rc1 merge window.
> > +	Contained in here is the normal set of new functions added to all
> > +	of these crazy drivers, as well as the following brand new
> > +	subsystems:
> > +		- time_travel_controller: Finally a set of drivers for the
> > +		  latest time travel bus architecture that provides i/o to
> > +		  the CPU before it asked for it, allowing uninterrupted
> > +		  processing
> > +		- relativity_shifters: due to the affect that the
> > +		  time_travel_controllers have on the overall system, there
> > +		  was a need for a new set of relativity shifter drivers to
> > +		  accommodate the newly formed black holes that would
> > +		  threaten to suck CPUs into them.  This subsystem handles
> > +		  this in a way to successfully neutralize the problems.
> > +		  There is a Kconfig option to force these to be enabled
> > +		  when needed, so problems should not occur.
> > +
> > +	All of these patches have been successfully tested in the latest
> > +	linux-next releases, and the original problems that it found have
> > +	all been resolved (apologies to anyone living near Canberra for the
> > +	lack of the Kconfig options in the earlier versions of the
> > +	linux-next tree creations.)
> > +
> > +	Signed-off-by: Your-name-here <your_email@domain>
> > +
> > +
> > +The tag message format is just like a git commit id.  One line at the top
> > +for a "summary subject" and be sure to sign-off at the bottom.
> > +
> > +Now that you have a local signed tag, you need to push it up to where it
> > +can be retrieved
> > +::
> 
> There's no need to place :: on a new line. Just write it as:
> 
> 	can be retrieved::

Got it

> > +
> > +	git push origin char-misc-4.15-rc1
> > +
> > +
> > +Create Pull Request
> > +-------------------
> > +
> > +The last thing to do is create the pull request message.  ``git`` handily
> > +will do this for you with the ``git request-pull`` command, but it needs a
> > +bit of help determining what you want to pull, and on what to base the pull
> > +against (to show the correct changes to be pulled and the diffstat). The
> > +following command(s) will generate a pull request
> > +::
> > +
> > +	git request-pull master git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git/ char-misc-4.15-rc1
> > +
> > +Quoting Greg::
> > +
> > +	This is asking git to compare the difference from the
> > +	'char-misc-4.15-rc1' tag location, to the head of the 'master'
> > +	branch (which in my case points to the last location in Linus's
> > +	tree that I diverged from, usually a -rc release) and to use the
> > +	git:// protocol to pull from.  If you wish to use https://, that
> > +	can be used here instead as well (but note that some people behind
> > +	firewalls will have problems with https git pulls).
> > +
> > +	If the char-misc-4.15-rc1 tag is not present in the repo that I am
> > +	asking to be pulled from, git will complain saying it is not there,
> > +	a handy way to remember to actually push it to a public location.
> > +
> > +	The output of 'git request-pull' will contain the location of the
> > +	git tree and specific tag to pull from, and the full text
> > +	description of that tag (which is why you need to provide good
> > +	information in that tag).  It will also create a diffstat of the
> > +	pull request, and a shortlog of the individual commits that the
> > +	pull request will provide.
> > +
> > +Linus responded that he tends to prefer the ``git://`` protocol. Other
> > +maintainers may have different preferences. Also, note that if you are
> > +creating pull requests without a signed tag then ``https://`` may be a
> > +better choice. Please see the original thread for the full discussion.
> > +
> > +
> > +Submit Pull Request
> > +-------------------
> > +
> > +A pull request is submitted in the same way as an ordinary patch. Send as
> > +inline email to the maintainer and CC LKML and any sub-system specific
> > +lists if required. Pull requests to Linus typically have a subject line
> > +something like
> > +::
> > +
> > +	[GIT PULL] <subsystem> changes for v4.15-rc1
> 
> With the above:
> 
> Reviewed-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxxxxx>

Will re-spin, add your suggestions and your tag.

thanks,
Tobin.
--
To unsubscribe from this list: send the line "unsubscribe linux-doc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux