blob: 919c032c61f2566b422d964419ef1c005c5b8e3b [file] [log] [blame] [view]
The [Melange project](MelangeIntro.md) has a variety of opportunities for the
community to contribute, including:
* [Filing an issue](http://code.google.com/p/soc/issues/entry) reporting a defect or requesting a new feature
* Contributing a change to Melange's code implementing new behavior
Each of these contributions is subject to review by other members of the
Melange community. The guidelines for the review of various types of
contributions are described here.
## CLA
<h4>All contributors must <a href='ContributorLicenseAgreements.md'>sign the CLA</a> before we can accept their contributions.<h4>
<h2>Committers</h2>
Committers in the Melange community are those individuals who have been<br>
made project members or project owners in the<br>
<a href='http://code.google.com/p/soc/'>SoC project</a> on<br>
<a href='http://code.google.com'>Google Code</a>. These individuals have been given<br>
commit privileges as a result of their previous contributions to the<br>
Melange community, usually in the form of<br>
<a href='ContributionReviews#Patches.md'>patches</a>. These individuals are the<br>
"gatekeepers" of the community, helping to insure that standards such<br>
as <a href='PythonStyleGuide.md'>programming style</a> and<br>
<a href='TestingGuidelines.md'>testing</a> that are important to the community as a<br>
whole are adhered to by each contributor and for each contribution.<br>
<br>
<a href='Hidden comment:
Each committer will:
* be a project member (or possibly project owner) at http://code.google.com/p/soc/
* be a [MailingListsGuidelines#Developer_list developer mailing list] manager (or possibly list owner) at http://groups.google.com/group/melange-soc-dev
* have an account at at [http://mail.google.com/a/googleopensourceprograms.com googleopensourceprograms.com]
* be able to [ContributionReviews#Using_Rietveld_for_code_reviews conduct code reviews] at http://codereviews.googleopensourceprograms.com/
* have ACCESS template VOP (AUTOVOICE) in the [IrcChannelGuidelines `#melange` IRC channel]
'></a><br>
<br>
<h3>Casual contributors</h3>
Casual developers can contribute to the <a href='MelangeIntro.md'>Melange project</a>
primarily through the <a href='ContributionReviews#Patches.md'>patch process</a>
described below. Casual contributors still need to agree to the<br>
<a href='ContributionTerms.md'>guidelines for contributors</a> before their patch<br>
can be accepted and commmitted by a<br>
<a href='ContributionReviews#Committer.md'>committer</a>.<br>
<br>
<h2>Code reviews</h2>
Code reviews are handled in a variety of ways, depending on the size of<br>
the change and the role of the contributor in the Melange community. Most<br>
contributions will be in the form of small<br>
<a href='ContributionReviews#Suggested_patches_from_casual_contributors.md'>patches</a> and<br>
<a href='ContributionReviews#Reviews_after_committed_patches.md'>commits</a>. Larger<br>
contributions, such as entire new features, probably require a different<br>
approach, such as incremental patches and communication with the other<br>
developers. These have similar review approaches, but tailored to the<br>
specific situation.<br>
<br>
<h3>Code changes should be atomic</h3>
The commit of a source code change should result in a source repository<br>
where the software <a href='BuildingMelange.md'>builds</a> and passes any existing<br>
<a href='TestingGuidelines.md'>tests</a>. So, all related changes need to be committed<br>
in such a way that each patch passes the test suite. That usually means<br>
that new functionality is introduced in one patch, 'enabled' in another one,<br>
and the old functionality removed in a third one.<br>
<br>
<h3>Patches</h3>
The term "patches" is used to refer to relatively small changes to the<br>
code (and, yes, this definition is intentionally vague).<br>
<br>
Patches should be sent for review via our <a href='Gerrit.md'>Gerrit</a> instance.<br>
<br>
<h3>Patchfiles</h3>
It is prefered that all Patches be sent via <a href='Gerrit.md'>Gerrit</a>, but if you need to<br>
create a traditional Patchfile, you can follow these instructions:<br>
<br>
Usually these<br>
are in the form of output from the <code>git diff</code> command.<br>
<br>
Patches should be sent for review to the<br>
<a href='MailingListsGuidelines#Developer_list.md'>developer mailing list</a> and<br>
presented in the "unified <code>diff</code>" format, which is de-facto standard<br>
for many tools and the output from the <code>git diff</code> command (the same<br>
format as that produced by <code>diff -uNr</code>). Using Git:<br>
<br>
<pre><code>git diff --no-prefix &gt; your-patch-name.patch<br>
</code></pre>
The reviewer can then apply the patch using something like:<br>
<br>
<pre><code>patch -p0 &lt; your-patch-name.patch<br>
</code></pre>
<h4>Patch emails</h4>
Patch emails sent to the developer mailing list should begin with<br>
<code>[PATCH]</code> as the first text in the email subject line, followed by a<br>
brief (one line) description of the change.<br>
<br>
For "small" patches (for some definition of "small", please use good<br>
judgment), include the diff in the email body, to facilitate inline<br>
commenting in the code review email thread. For <i>all</i> patches, including<br>
both "small" and "non small" ones, include the diff itself as an email<br>
attachment, to make it easier for reviewers to patch the change into a<br>
working copy with <code>patch</code>. Such a diff attachment can be produced with<br>
the methods described above.<br>
<br>
<a href='Hidden comment:
==== Suggested patches from casual contributors ====
The Melange community is interested in patches and other contributions
from casual developers. To that end, casual developers can submit
patches for review in a couple of ways:
* attach a patch to an [http://code.google.com/p/soc/issues/list issue in the issue tracker]
* mailing a patch to the [MailingListsGuidelines#Developer_list developer mailing list] (membership in the list is required to post to it; see the [MailingListsGuidelines#Developer_list list guidelines])
Committers can then discuss the contribution with the author on the
[MailingListsGuidelines#Developer_list developer mailing list], or on the
[MailingListsGuidelines#General_discussion_list general discussion list]
if the contributor is not on the developer list. Since the
[MelangeIntro Melange project] and the [SoCOverview SoC framework] is mostly
about code, there are likely to be at least a few code discussions on the
general announcement list. Serious discussions will likely result in the
casual contributor being invited to the developer list to move the discussion
there.
Once the patch is accepted, a committer will patch a working copy and commit
the changed (or added or deleted) source files to the repository,
supplying a suitable commit log message.
'></a><br>
<br>
<h4>Code Review</h4>
Code review happens in the <a href='Gerrit.md'>Gerrit</a> system.<br>
<br>
All patches need a +2 from a Comitter before they can be submitted.<br>
<br>
<a href='Hidden comment:
==== Reviews after committed patches ====
Contributors with [ContributionReviews#Committers commit access] can submit
changes prior to review. The participants on the
[MailingListsGuidelines#Developer_list developer mailing list] are then
encouraged to review the change, which will be present in the commit
email that was sent to the mailing list. At least one other person with
commit access should acknowledge the change with a brief "looks good to me" (LGTM)
message in response (sent back to the list). This does of course not prevent
other list participants from being able to make suggestions, request
changes, etc.
If one or more of the list participants requests changes to the submitted
code, they can either discuss it and have the original committer submit a
subsequent change, or the they can make the change themselves. Please
avoid conflict by trying to reach a consensus before making commits. One
way to do this is to
[ContributionReviews#Patches follow the patch contribution method] for
reviewing a change on the developer mailing list, even if the contributor
has commit access.
===== Review after commit using Google Code code reviews =====
Google Code now has a feature that enables
[http://code.google.com/p/support/wiki/CodeReviews code reviews of committed code].
This feature can also be used by project owners and members to do review-after-commit
style code reviews.
'></a><br>
<br>
<h3>Committing</h3>
Once all of the<br>
[TestingGuidelines#All_changes_should_pass_smoke_tests_before_review<br>
pre-commit tests] pass <b>and</b> the [ContributionReviews#Patches patch<br>
has been code-reviewed] a <a href='ContributionReviews#Committers.md'>committer</a>
(who may or<br>
[ContributionReviews#Suggested_patches_from_casual_contributors may<br>
not] be the actual contributor), the submit button in <a href='Gerrit.md'>Gerrit</a> or `git<br>
merge && git push` can be used to commit the change into the<br>
<a href='http://code.google.com/p/soc/source/browse'>SoC project repository</a>.<br>
<br>
<h4>commit messages</h4>
Committers should use the template below for <code>git commit</code> log messages:<br>
<br>
<pre><code>One line, under 68 characters giving a short description of the change<br>
<br>
After a blank line, a more detailed log message explaining the reason<br>
of the change (not necessarily what was changed, as that can be seen<br>
by readin the patch). Please wrap your lines at 70 characters again.<br>
</code></pre>
If committing contributor patch (outside of Gerrit) please include:<br>
<br>
<pre><code>Reviewed by: Rick Reviewer<br>
</code></pre>
Note that previously the person listed with "Patch by:" was the<br>
contributor (that is, author) of the patch, however we have switched<br>
to Git and now we are committing patch from contributors as if<br>
they would have commit access using command:<br>
<br>
<pre><code>git commit -u "FirstName LastName &lt;somebody@example.com&gt;"<br>
</code></pre>
Patches from<br>
[ContributionReviews#Suggested_patches_from_casual_contributors casual<br>
contributors] will, by definition, need to be committed by someone<br>
other than the author but Git repository history will indicate<br>
contributor as committer.<br>
<br>
<h2>Documentation</h2>
Code files should include enough internal documentation in the form of<br>
<code>__doc__</code> strings, comments and functions with self-explanatory names<br>
(see PythonStyleGuide) that the automatic documentation suffices.<br>
This is the recommended way to ensure that code documentation and the<br>
code itself stay in step.<br>
<br>
The wiki is in the transition zone between dialog (IRC and mailing<br>
lists) and formally reviewed content (code and its comments). Changes<br>
to the wiki are 'review after commit'. Any committer can log comments<br>
for a wiki page and participate in review. At the moment rights to<br>
create pages and edit pages directly are restricted to committers and<br>
regular contributors to documentation.<br>
<br>
<hr />
<i>Copyright 2008 Google Inc.</i>
<i>This work is licensed under a</i>
<a href='http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html'>Creative Commons Attribution 2.5 License</a>.<br>
<a href='http://creativecommons.org/licenses/by/2.5/'><img src='http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png' /></a>