#summary Guidelines for contributing to Melange
#labels Contents-Draft,Phase-Guidelines,Importance-Useful

The [MelangeIntro Melange project] has a variety of opportunities for the
community to contribute, including:

 * documenting [http://code.google.com/p/soc/w/list?can=2&q=phase:Requirements feature requirements]
 * designing the [http://code.google.com/p/soc/w/list?can=2&q=phase:Design%20design:Model database schema] and different [http://code.google.com/p/soc/w/list?can=2&q=phase:Design%20design:View Views]
 * writing [http://code.google.com/p/soc/w/list?can=2&q=phase:Implementation source code]

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.

== Committers ==

Committers in the Melange community are those individuals who have been
made project members or project owners in the
[http://code.google.com/p/soc/ SoC project] on
[http://code.google.com Google Code].  These individuals have been given
commit privileges as a result of their previous contributions to the
Melange community, usually in the form of
[ContributionReviews#Patches patches].  These individuals are the
"gatekeepers" of the community, helping to insure that standards such
as [PythonStyleGuide programming style] and
[TestingGuidelines testing] that are important to the community as a
whole are adhered to by each contributor and for each contribution.

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]

=== Casual contributors ===

Casual developers can contribute to the [MelangeIntro Melange project]
primarily through the [ContributionReviews#Patches patch process]
described below.  Casual contributors still need to agree to the
[ContributionTerms guidelines for contributors] before their patch
can be accepted and commmitted by a
[ContributionReviews#Committer committer].

== Code reviews ==

Code reviews are handled in a variety of ways, depending on the size of
the change and the role of the contributor in the Melange community.  Most
contributions will be in the form of small
[ContributionReviews#Suggested_patches_from_casual_contributors patches] and
[ContributionReviews#Reviews_after_committed_patches commits]. Larger
contributions, such as entire new features, probably require a different
approach, such as development in a
[ContributionReviews#Branches development branch].  These have similar
review approaches, but tailored to the specific situation.

=== Code changes should be atomic ===

The commit of a source code change should result in a source repository
where the software [BuildingMelange builds] and passes any existing
[TestingGuidelines tests].  So, all related changes need to be committed
in a single patch, a single commit, or, in the case of branches, a
single merge.

=== Patches ===

The term "patches" is used to refer to relatively small changes to the
code (and, yes, this definition is intentionally vague).  These can either
be in the form of actual output from the `diff` command, or they can be
the contents of the commit log message sent to the
[MailingListsGuidelines#Developer_list developer mailing list] when a
[ContributionReviews#Committers committer] commits a change using `svn`.

Patches should be presented for review in the "unified `diff`" format,
which is the output resulting from the `svn diff` command (the same format
as that produced by`diff -uNr`, but generated automatically from the
altered file in the working copy and the original file in the `.svn`
subdirectory).  This is also the same format as the diff contained in the
commit log messages emailed to the developer mailing list.

One special note about creating patches:  please create the patch from
the `/trunk/` directory (or the `/wiki/` directory if it is a documentation
change), so that the reviewers and potential committers can apply the
patch from the base of their `/trunk/` working copy.  For example, for
a checkout of `https://soc.googlecode.com/svn/trunk/` to `~/svn/soc`,
create the code review patch with something like:

{{{
cd ~/svn/soc
svn diff soc/models/new_model.py soc/views/deleted_model.py > my_change.diff
}}}

In this example, `new_model.py` would be a newly-added module, and
`deleted_model.py` would be a just-deleted module.  The reviewer can
then apply the patch using something like:

{{{
cd ~/svn/soc
patch -p0 < my_change.diff
}}}

The same `/trunk/` directory root approach should be used with
[http://codereviews.googleopensourceprograms.com/static/upload.py `upload.py`]
to submit
[ContributionReviews#Using_Rietveld_for_code_reviews Rietveld code reviews].

==== Patch emails ====

Patch emails sent to the developer mailing list should begin with
`[PATCH]` as the first text in the email subject line, followed by a
brief (one line) description of the change.

For "small" patches (for some definition of "small", please use good
judgment), include the diff in the email body, to facilitate inline
commenting in the code review email thread.  For _all_ patches, including
both "small" and "non small" ones, include the diff itself as an email
attachment, to make it easier for reviewers to patch the change into a
working copy with `patch`.  Such a diff attachment can be produced with
something like:

{{{
svn diff some_module.py > some_module.diff
}}}

For multiple files changed in the same patch, use something like:

{{{
svn diff some_module.py some_other_module.py > my_new_feature.diff
}}}

Alternately, committers can use
[http://codereviews.googleopensourceprograms.com/static/upload.py `upload.py`]
to submit
[ContributionReviews#Using_Rietveld_for_code_reviews Rietveld code reviews].

==== Using Rietveld for code reviews ====

An instance of
[http://code.google.com/p/rietveld/ Guido van Rossum's Rietveld]
code review tool has been set up at
http://codereviews.googleopensourceprograms.com for use by
[ContributionReviews#Committers Melange committers].  An account on
[http://mail.google.com/a/googleopensourceprograms.com googleopensourceprograms.com]
is required in order to post code review requests and to provide code
review comments.

Patches supplied via the Rietveld web form should be created following
[ContributionReviews#Patches these instructions].  To use the
[http://codereviews.googleopensourceprograms.com/static/upload.py `upload.py`]
script provided by Rietveld to start a code review, do something like this
and respond to the prompts:

{{{
cd ~/svn/soc
upload.py --server=codereviews.googleopensourceprograms.com \
  -- soc/models/new_model.py soc/models_deleted_model.py
}}}

Note that a copy of the `upload.py` script can be modified to make the
default server be `codereviews.googleopensourceprograms.com`, to avoid
constantly having to supply the `--server` option.

To upload an updated diff for an existing code review in progress, simply
supply the extra `--issue=<the existing issue number>` option.  Rietveld
will then display the deltas between the previously supplied diff and the
new one.

==== 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 `svn` repository,
supplying a suitable commit log message.

==== 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 `svn` 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"
message in response (sent back to the list).  This does _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.

=== Other code review possibilities ===

In the future, tools like
[http://code.google.com/p/gvn/ Gvn Versions Nicely] might be used for
"review then commit" code reviews that make use of a "change branch" model.

=== Committing ===

Once all of the
[TestingGuidelines#All_changes_should_pass_smoke_tests_before_review pre-commit tests]
pass and the [ContributionReviews#Patches patch has been code-reviewed]
a [ContributionReviews#Committers committer] (who may or
[ContributionReviews#Suggested_patches_from_casual_contributors may not]
be the actual contributor), `svn commit` can be used to commit the change into
the
[http://code.google.com/p/soc/source/browse SoC project SVN repository].

==== svn commit messages ====

Committers should use the template below for `svn commit` log messages:

{{{
Log message detailing the change.

Patch by: Carl Contributor
Review by: Rick Reviewer
Review issue: N
Review URL: http://codereviews.googleopensourceprograms.com/N
}}}

`N` is the issue number assigned to the patch by the 
[ContributionReviews#Using_Rietveld_for_code_reviews Rietveld] code
review tool.

Note that the person listed with "Patch by:" is the contributor (that
is, author) of the patch, not necessarily the committer who executes
the `svn commit` command.  Patches from
[ContributionReviews#Suggested_patches_from_casual_contributors casual contributors]
will, by definition, need to be committed by someone other than the
author.

=== Branches ===

Occasionally, a major new feature requires changes to many source files.
In these cases (that are hopefuly rare), it may make sense to do the
development in a development branch and then `svn merge` the changes back
into the `/trunk/` once the feature is complete.  While this is a good
way for a single developer or small team to experiment with major changes
to the [SoCOverview SoC framework] and
[MelangeIntro Melange web applications], these sorts of development efforts
should be started with care.  The effort to successfully merge a major
overhaul of the existing code can be substantial.

Given the nature of Python and [AppEngine Google App Engine], it is usually
possible to do most new feature development in `/trunk/`, adding new modules
and tests in isolation before a single commit that integrates the new code
with the existing code that would depend on it.

== Documentation ==

=== Suggested documentation from casual committers ===

=== Reviews after committing by committers ===

----
_Copyright 2008 Google Inc._
_This work is licensed under a_
[http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-attribution-2_5.html Creative Commons Attribution 2.5 License].
[http://creativecommons.org/licenses/by/2.5/ http://soc.googlecode.com/svn/wiki/html/licenses/cc-by-2_5-88x31.png]