[[[
You'll probably need customize this heavily for the particular person
you're offering partial commit access to.  Also, remember to replace
instances of "{AT}" with real "@" signs.  It's just masked in this
template to fool the spam address harvesters.
]]]

### see https://www.apache.org/dev/pmc.html#newcommitter for procedure

From: "Some Committer" <a.committer@wherever.example.com>
To: New Partial Committer <new.committer@wherever.new.committers.live>
Cc: private{AT}subversion.apache.org
Subject: Commit access for Subversion FROBLINGS area

Hi New Partial Committer,

The other committers and I would like to offer you partial commit
access for maintenance of the Subversion FROBLINGS area.

#ifdef THE_INVITEE_ALREADY_HAS_PARTIAL_COMMIT_ACCESS_TO_ANOTHER_AREA
Since you already have partial commit access to another area, you can
accept this offer by simply replying to this mail.  We'll update the
COMMITTERS file (or you can do it yourself, that's fine too).

#else
You can accept this offer by replying to this mail and following the
instructions at <http://www.apache.org/dev/new-committers-guide.html#cla>.
You will receive an email with details on how to access your account.
Once you have access to your account, you are encouraged to modify the
COMMITTERS file appropriately, which also serves as a test of your new
username and password.

#endif
Remember that you can still post patches for review before committing,
when you want to.  Commit access just means that you can rely on your
own judgment to decide when something is ready for commit.  Also, if
you haven't done so already, please read

   http://subversion.apache.org/docs/community-guide/

Thanks for all your work so far!

- Some Full Committer
