blob: 88c22591fd63242b39d196f8b04c8e48ffee4acc [file] [log] [blame]
#summary Guidelines for contributing to Melange
#labels Contents-Skeleton,Phase-Guidelines
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] _(not yet enabled at this time)_
* 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.
=== 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]