Maintainer guidelines
*********************

This document is intended for the maintainers of the BlueZ project. It
serves as basic guidelines for handling patch review and commit access.


Rule 1: Keep the GIT tree clean and linear
==========================================

The bluetooth.git, bluetooth-next.git and bluez.git trees are not your
private playground. The history is meant to be clean and linear.

	- NO merges
	- NO branches
	- NO tags

If anyone needs testing or work on a feature, clone the tree and do
it in your own copy. The master trees are off limits.

One advise to avoid any accidental errors in this area to set proper
options in global ~/.gitconfig or local .git/config files.

	[merge]
		ff = only

Violations of this rule are not acceptable. This rule is enforced. If
in doubt ask one of the seasoned maintainers.


Rule 2: Enforce clean commit messages
=====================================

The commit messages are required to be clean and follow style guidelines
to be consistent.

Commit messages should adhere to a 72 characters by line limit. That
makes it easy to read them via git log in a terminal window. Exceptions
to this rule are logs, trace or other verbatim copied information.

Every commit requires full names and email addresses. No synonyms or
nicknames are allowed. It is also important that the Outlook style
names with lastname, firstname are not allowed. It is the maintainers
job to ensure we get proper firstname lastname <email> authorship.

It is also important that the committer itself uses a valid name and
email address when committing patches. So ensure that either the
global ~/.gitconfig or local .git/config provides proper values.

	[user]
		name = Peter Mustermann
		email = peter@mustermann.de

Commit messages for bluez.git shall not contain Signed-off-by
signatures. They are not used in userspace and with that it is the
maintainers job to ensure they do not get committed to the repository.

For bluetooth.git and bluetooth-next.git The Signed-off-by process is
used and the signatures are required.

Tags like Change-Id generated from Gerrit are never acceptable. It is
the maintainers job to ensure that these are not committed into the
repositories.

Violations of this rule create a mess in the tree that can not be
reversed. If in doubt ask one of the seasoned maintainers.


Rule 3: Enforce correct coding style
====================================

The coding style follows roughly the kernel coding style with any
exceptions documented in doc/coding-style.txt.

To ensure trivial white-space errors don't get committed, have the
following in your .gitconfig:

	[apply]
		whitespace = error

It can also be helpful to use the checkpatch.pl script coming with the
Linux kernel to do some automated checking. Adding the following to your
.git/hooks/pre-commit and .git/hooks/pre-applypatch is a simple way to
do this:

	exec git diff --cached | ~/src/linux/scripts/checkpatch.pl -q \
		--no-tree --no-signoff --show-types \
		--ignore CAMELCASE,NEW_TYPEDEFS,INITIALISED_STATIC -

The above assumes that a kernel tree resides in ~/src/linux/.


Rule 4: Pay extra attention to adding new files to the tree
===========================================================

New files that are added to the tree require several things to be
verified first:

	- Check that the names are acceptible with other maintainers
	- Ensure that the file modes are correct
	- Verify that the license & copyright headers are correct
	- If the file is supposed to be part of the release tarball,
	  make sure that it gets picked up by 'make dist' (particularly
	  important for documentation or other files that are not code)


Rule 5: Keep the mailing list in sync with the commit process
=============================================================

When applying patches, be sure to send a response to the mailing list as
soon as the code has been pushed to the upstream tree. Usually this
means one email per patch, however patch-sets may only have one response
covering the entire set. If applying a subset of a patch-set clearly
state what was applied in your response.
