Ticket #14401: 14401_contributing_howto.2.diff

File 14401_contributing_howto.2.diff, 36.4 KB (added by Gabriel Hurley, 14 years ago)
  • docs/howto/contribute.txt

     
     1===========================
     2How to contribute to Django
     3===========================
     4
     5Django is developed 100% by the community, and the more people that are
     6actively involved in the code the better Django will be. We recognize
     7that contributing to Django can be daunting at first and sometimes
     8confusing even to veterans. While we have our official "Contributing
     9to Django" documentation which spells out the technical details of
     10triaging tickets and submitting patches, it leaves a lot of room for
     11interpretation. This guide aims to offer more general advice on issues
     12such as how to interpret the various stages and flags in Trac, and how
     13new contributors can get started.
     14
     15.. seealso::
     16
     17    This guide is meant to answer the most common questions about
     18    contributing to Django, however it is no substitute for the
     19    :doc:`/internals/contributing` reference. Please make sure to
     20    read that document to understand the specific details
     21    involved in reporting issues and submitting patches.
     22
     23.. _the-spirit-of-contributing:
     24
     25"The Spirit of Contributing"
     26============================
     27
     28Django uses Trac_ for managing our progress, and Trac is a
     29community-tended garden of the bugs people have found and the features
     30people would like to see added. As in any garden, sometimes there are
     31weeds to be pulled and sometimes there are flowers and vegetables that
     32need picking. We need your help to sort out one from the other, and in
     33the end we all benefit together.
     34
     35Like all gardens, we can aspire to perfection but in reality there's no
     36such thing. Even in the most pristine garden there are still snails and
     37insects. In a community garden there are also helpful people who--with
     38the best of intentions--fertilize the weeds and poison the roses. It's
     39the job of the community as a whole to self-manage, keep the problems to
     40a minimum, and educate those coming into the community so that they can
     41become valuable contributing members.
     42
     43Similarly, while we aim for Trac to be a perfect representation of the
     44state of Django's progress, we acknowledge that this simply will not
     45happen. By distributing the load of Trac maintenance to the community,
     46we accept that there will be mistakes. Trac is "mostly accurate", and we
     47give allowances for the fact that sometimes it will be wrong. That's
     48okay. We're perfectionists with deadlines.
     49
     50We rely on the community to keep participating, keep tickets as accurate
     51as possible, and raise issues for discussion on our mailing lists when
     52there is confusion or disagreement.
     53
     54Django is a community project, and every contribution helps. We can't do
     55this without YOU!
     56
     57.. _Trac: http://code.djangoproject.com/
     58
     59Understanding Trac
     60==================
     61
     62Trac is Django's sole official issue tracker. All known bugs,
     63desired features and ideas for changes are logged there.
     64
     65However, Trac can be quite confusing even to veteran contributors.
     66Having to look at both flags and triage stages isn't immediately
     67obvious, and the stages themselves can be misinterpreted.
     68
     69What Django's triage stages "really mean"
     70-----------------------------------------
     71
     72Unreviewed
     73~~~~~~~~~~
     74
     75The ticket has not been reviewed by anyone who felt
     76qualified to make a judgment about whether the ticket contained a valid
     77issue, a viable feature, or ought to be closed for any of the various
     78reasons.
     79
     80Accepted
     81~~~~~~~~
     82
     83The big grey area! The absolute meaning of "accepted"
     84is that the issue described in the ticket is valid and is in some stage
     85of being worked on. Beyond that there are several considerations
     86
     87
     88* **Accepted + No Flags**
     89
     90  The ticket is valid, but no one has submitted a
     91  patch for it yet. Often this means you could safely start writing a
     92  patch for it.
     93
     94* **Accepted + Has Patch**
     95
     96  The ticket is waiting for people to
     97  review the supplied patch. This means downloading the patch and trying
     98  it out, verifying that it contains tests and docs, running the test
     99  suite with the included patch, and leaving feedback on the ticket.
     100
     101
     102* **Accepted + Has Patch + (any other flag)**
     103
     104  This means the ticket has been
     105  reviewed, and has been found to need further work. "Needs tests" and
     106  "Needs documentation" are self-explanatory. "Patch needs improvement"
     107  will generally be accompanied by a comment on the ticket explaining what
     108  is needed to improve the code.
     109
     110Design Decision Needed
     111~~~~~~~~~~~~~~~~~~~~~~
     112
     113This stage is for
     114issues which may be contentious, may be backwards incompatible, or
     115otherwise involve high-level design decisions. These decisions are
     116generally made by the core committers, however that is not a
     117requirement. See the FAQ below for "My ticket has been in DDN forever!
     118What should I do?"
     119
     120Ready For Checkin
     121~~~~~~~~~~~~~~~~~
     122
     123The ticket was reviewed by any
     124member of the community other than the person who supplied the patch and
     125found to meet all the requirements for a commit-ready patch. A core
     126committer now needs to give the patch a final review prior to being
     127committed. See the FAQ below for "My ticket has been in RFC forever!
     128What should I do?"
     129
     130Someday/Maybe?
     131~~~~~~~~~~~~~~
     132
     133Generally only used for
     134vague/high-level features or design ideas. These tickets are uncommon
     135and overall less useful since they don't describe concrete actionable
     136issues.
     137
     138Fixed on a branch
     139~~~~~~~~~~~~~~~~~
     140
     141Used to indicate that a ticket is resolved as
     142part of a major body of work that will eventually be merged to trunk.
     143Tickets in this stage generally don't need further work. This may happen
     144in the case of major features/refactors in each release cycle, or as
     145part of the annual Google Summer of Code efforts.
     146
     147Example Trac workflow
     148---------------------
     149
     150Here we see the life-cycle of an average ticket:
     151
     152* Alice creates a ticket, and uploads an incomplete patch (no tests,
     153  incorrect implementation).
     154
     155* Bob reviews the patch, marks it "Accepted",
     156  "needs tests", and "patch needs improvement", and leaves a comment
     157  telling Alice how the patch could be improved.
     158
     159* Alice updates the patch, adding tests (but not changing the
     160  implementation). She removes the two flags.
     161
     162* Charlie reviews the patch and resets the "patch needs improvement"
     163  flag with another comment about improving the implementation.
     164
     165* Alice updates the patch, fixing the implementation. She removes
     166  the "patch needs improvement" flag.
     167
     168* Daisy reviews the patch, and marks it RFC.
     169
     170* Jacob reviews the RFC patch, applies it to his checkout, and
     171  commits it.
     172
     173Some tickets require much less feedback than this, but then again some
     174tickets require much much more.
     175
     176Advice for new contributors
     177===========================
     178
     179New contributor and not sure what to do? Want to help but just don't
     180know how to get started? This is the section for you.
     181
     182* **Pick a subject area that you care about, that you are familiar with,
     183  or that you want to learn about.**
     184 
     185  You don't already have to be an expert on the area you want to work on;
     186  you become an expert through your ongoing contributions to the code.
     187
     188* **Triage tickets.**
     189
     190  If a ticket is unreviewed and reports a bug, try and duplicate it.
     191  If you can duplicate it and it seems valid, make a note that you
     192  confirmed the bug and accept the ticket. Make sure the ticket is
     193  filed under the correct component area. Consider writing a patch
     194  that adds a test for the bug's behavior, even if you don't fix
     195  the bug itself.
     196
     197* **Look for tickets that are accepted and review patches to build
     198  familiarity with the codebase and the process.**
     199 
     200  Mark the appropriate flags if a patch needs docs or tests. Look
     201  through the changes a patch makes, and keep an eye out for syntax
     202  that is incompatible with older but still supported versions of
     203  Python. Run the tests and make sure they pass on your system.
     204  Where possible and relevant, try them out on a database other
     205  than SQLite. Leave comments and feedback!
     206
     207* **Keep old patches up to date.**
     208
     209  Oftentimes the codebase will change between a patch being submitted
     210  and the time it gets reviewed. Make sure it still applies cleanly and
     211  functions as expected. Simply updating a patch is both useful and
     212  important!
     213
     214* **Trac isn't an absolute; the context is just as important as the words.**
     215
     216  When reading Trac, you need to take into account who says things, and
     217  when they were said. Support for an idea two years ago doesn't
     218  necessarily mean that the idea will still have support. You also need
     219  to pay attention to who *hasn't* spoken -- for example, if a core
     220  team member hasn't been recently involved in a discussion, then a
     221  ticket may not have the support required to get into trunk.
     222
     223* **Start small.**
     224
     225  It's easier to get feedback on a little issue than on a big one.
     226
     227* **If you're going to engage in a big task, make sure that
     228  your idea has support first.**
     229 
     230  This means getting someone else to confirm that a bug is real
     231  before you fix the issue, and ensuring that the core team supports
     232  a proposed feature before you go implementing it.
     233
     234* **Be bold! Leave feedback!**
     235
     236  Sometimes it can be scary to put your opinion out to the world and
     237  say "this ticket is correct" or "this patch needs work", but it's
     238  the only way the project moves forward. The contributions of the
     239  broad Django community ultimately have a much greater impact than
     240  that of the core developers. We can't do it without YOU!
     241
     242* **Err on the side of caution when marking things Ready For Check-in.**
     243
     244  If you're really not certain if a ticket is ready, don't mark it as
     245  such. Leave a comment instead, letting others know your thoughts.
     246  If you're mostly certain, but not completely certain, you might also
     247  try asking on IRC to see if someone else can confirm your suspicions.
     248
     249* **Wait for feedback, and respond to feedback that you receive.**
     250
     251  Focus on one or two tickets, see them through from start to
     252  finish, and repeat. The shotgun approach of taking on lots of tickets
     253  and letting some fall by the wayside ends up doing more harm than good.
     254
     255* **Be rigorous.**
     256
     257  When we say ":pep:`8`, and must have docs and tests", we mean
     258  it. If a patch doesn't have docs and tests, there had better be a good
     259  reason. Arguments like "I couldn't find any existing tests of this
     260  feature" don't carry much weight--while it may be true, that means you
     261  have the extra-important job of writing the very first tests for that
     262  feature, not that you get a pass from writing tests altogether.
     263
     264
     265FAQs
     266====
     267
     268**This ticket I care about has been ignored for days/weeks/months! What
     269can I do to get it committed?**
     270
     271* First off, it's not personal. Django is
     272  entirely developed by volunteers (even the core devs), and sometimes
     273  folks just don't have time. The best thing to do is to send a gentle
     274  reminder to the Django Developers mailing list asking for review on
     275  the ticket, or to bring it up in the #django-dev IRC channel.
     276
     277
     278**I'm sure my ticket is absolutely 100% perfect, can I mark it as
     279RFC myself?**
     280
     281* Short answer: No. It's always better to get another set of eyes
     282  on a ticket. If you're having trouble getting that second set of
     283  eyes, see question 1, above.
     284
     285
     286**My ticket has been in DDN forever! What should I do?**
     287
     288* Design Decision Needed requires consensus about the right solution.
     289  At the very least it needs consensus among the core developers, and
     290  ideally it has consensus from the community as well. The best way to
     291  accomplish this is to start a thread on the Django Developers mailing
     292  list, and for very complex issues to start a wiki page summarizing
     293  the problem and the possible solutions.
  • docs/howto/index.txt

     
    1111
    1212   apache-auth
    1313   auth-remote-user
     14   contribute
    1415   custom-management-commands
    1516   custom-model-fields
    1617   custom-template-tags
  • docs/internals/contributing.txt

     
    22Contributing to Django
    33======================
    44
    5 If you think working *with* Django is fun, wait until you start working *on* it.
    6 We're passionate about helping Django users make the jump to contributing members
    7 of the community, so there are many ways you can help Django's development:
     5If you think working *with* Django is fun, wait until you start working *on*
     6it. We're passionate about helping Django users make the jump to contributing
     7members of the community, so there are many ways you can help Django's
     8development:
    89
    910    * Blog about Django.  We syndicate all the Django blogs we know about on
    1011      the `community page`_; contact jacob@jacobian.org if you've got a blog
     
    3233works and how it handles bugs, mailing lists, and all the other minutiae of
    3334Django development.
    3435
     36.. seealso::
     37
     38    This document contains specific details for contributing to
     39    Django. However, many new contributors find this guide confusing
     40    or intimidating at first. For a simpler introduction
     41    to becoming a contributor please see the :doc:`/howto/contribute` guide.
     42
    3543.. _reporting-bugs:
    3644
    3745Reporting bugs
    3846==============
    3947
    4048Well-written bug reports are *incredibly* helpful. However, there's a certain
    41 amount of overhead involved in working with any bug tracking system, so your
     49amount of overhead involved in working with any bug tracking system so your
    4250help in keeping our ticket tracker as useful as possible is appreciated.  In
    4351particular:
    4452
    45     * **Do** read the :doc:`FAQ </faq/index>` to see if your issue might be a well-known question.
     53    * **Do** read the :doc:`FAQ </faq/index>` to see if your issue might
     54      be a well-known question.
    4655
    4756    * **Do** `search the tracker`_ to see if your issue has already been filed.
    4857
     
    6069      `django-users`_ list, or the `#django`_ IRC channel for that.
    6170
    6271    * **Don't** use the ticket system to make large-scale feature requests.
    63       We like to discuss any big changes to Django's core on the `django-developers`_
    64       list before actually working on them.
     72      We like to discuss any big changes to Django's core on the
     73      `django-developers`_ list before actually working on them.
    6574
    66     * **Don't** reopen issues that have been marked "wontfix". This mark means
    67       that the decision has been made that we can't or won't fix this particular
    68       issue.  If you're not sure why, please ask on `django-developers`_.
     75    * **Don't** reopen issues that have been marked "wontfix". This mark
     76      means that the decision has been made that we can't or won't fix
     77      this particular issue.  If you're not sure why, please ask
     78      on `django-developers`_.
    6979
    7080    * **Don't** use the ticket tracker for lengthy discussions, because they're
    7181      likely to get lost. If a particular ticket is controversial, please move
     
    7383
    7484    * **Don't** post to django-developers just to announce that you have filed
    7585      a bug report. All the tickets are mailed to another list
    76       (`django-updates`_), which is tracked by developers and triagers, so we
    77       see them as they are filed.
     86      (`django-updates`_), which is tracked by developers and interested
     87      community members; we see them as they are filed.
    7888
    7989.. _django-updates: http://groups.google.com/group/django-updates
    8090
     
    90100In the event of a confirmed vulnerability in Django itself, we will take the
    91101following actions:
    92102
    93     * Acknowledge to the reporter that we've received the report and that a fix
    94       is forthcoming. We'll give a rough timeline and ask the reporter to keep
    95       the issue confidential until we announce it.
     103    * Acknowledge to the reporter that we've received the report and that a
     104      fix is forthcoming. We'll give a rough timeline and ask the reporter
     105      to keep the issue confidential until we announce it.
    96106
    97     * Halt all other development as long as is needed to develop a fix, including
    98       patches against the current and two previous releases.
     107    * Halt all other development as long as is needed to develop a fix,
     108      including patches against the current and two previous releases.
    99109
    100110    * Determine a go-public date for announcing the vulnerability and the fix.
    101       To try to mitigate a possible "arms race" between those applying the patch
    102       and those trying to exploit the hole, we will not announce security
    103       problems immediately.
     111      To try to mitigate a possible "arms race" between those applying the
     112      patch and those trying to exploit the hole, we will not announce
     113      security problems immediately.
    104114
    105115    * Pre-notify everyone we know to be running the affected version(s) of
    106       Django. We will send these notifications through private e-mail which will
    107       include documentation of the vulnerability, links to the relevant patch(es),
    108       and a request to keep the vulnerability confidential until the official
    109       go-public date.
     116      Django. We will send these notifications through private e-mail
     117      which will include documentation of the vulnerability, links to the
     118      relevant patch(es), and a request to keep the vulnerability
     119      confidential until the official go-public date.
    110120
    111121    * Publicly announce the vulnerability and the fix on the pre-determined
    112122      go-public date. This will probably mean a new release of Django, but
     
    115125Submitting patches
    116126==================
    117127
    118 We're always grateful for patches to Django's code. Indeed, bug reports with
    119 associated patches will get fixed *far* more quickly than those without patches.
     128We're always grateful for patches to Django's code. Indeed, bug reports
     129with associated patches will get fixed *far* more quickly than those
     130without patches.
    120131
    121132"Claiming" tickets
    122133------------------
     
    132143and time availability), claim it by following these steps:
    133144
    134145    * `Create an account`_ to use in our ticket system.
     146
    135147    * If a ticket for this issue doesn't exist yet, create one in our
    136148      `ticket tracker`_.
     149
    137150    * If a ticket for this issue already exists, make sure nobody else has
    138151      claimed it. To do this, look at the "Assigned to" section of the ticket.
    139152      If it's assigned to "nobody," then it's available to be claimed.
    140153      Otherwise, somebody else is working on this ticket, and you either find
    141154      another bug/feature to work on, or contact the developer working on the
    142155      ticket to offer your help.
     156
    143157    * Log into your account, if you haven't already, by clicking "Login" in the
    144158      upper right of the ticket page.
     159
    145160    * Claim the ticket by clicking the radio button next to "Accept ticket"
    146161      near the bottom of the page, then clicking "Submit changes."
    147162
     
    158173in a reasonably timely fashion. If you don't have time to work on it, either
    159174unclaim it or don't claim it in the first place!
    160175
    161 Ticket triagers go through the list of claimed tickets from time to
    162 time, checking whether any progress has been made. If there's no sign of
    163 progress on a particular claimed ticket for a week or two, a triager may ask
    164 you to relinquish the ticket claim so that it's no longer monopolized and
    165 somebody else can claim it.
     176If there's no sign of progress on a particular claimed ticket for a week or
     177two, another developer may ask you to relinquish the ticket claim so that it's
     178no longer monopolized and somebody else can claim it.
    166179
    167180If you've claimed a ticket and it's taking a long time (days or weeks) to code,
    168181keep everybody updated by posting comments on the ticket. If you don't provide
     
    185198    * Make sure your code matches our `coding style`_.
    186199
    187200    * Submit patches in the format returned by the ``svn diff`` command.
    188       An exception is for code changes that are described more clearly in plain
    189       English than in code. Indentation is the most common example; it's hard to
    190       read patches when the only difference in code is that it's indented.
     201      An exception is for code changes that are described more clearly in
     202      plain English than in code. Indentation is the most common example; it's
     203      hard to read patches when the only difference in code is that it's
     204      indented.
    191205
    192206      Patches in ``git diff`` format are also acceptable.
    193207
    194208    * When creating patches, always run ``svn diff`` from the top-level
    195209      ``trunk`` directory -- i.e., the one that contains ``django``, ``docs``,
    196       ``tests``, ``AUTHORS``, etc. This makes it easy for other people to apply
    197       your patches.
     210      ``tests``, ``AUTHORS``, etc. This makes it easy for other people to
     211      apply your patches.
    198212
    199     * Attach patches to a ticket in the `ticket tracker`_, using the "attach file"
    200       button. Please *don't* put the patch in the ticket description or comment
    201       unless it's a single line patch.
     213    * Attach patches to a ticket in the `ticket tracker`_, using the "attach
     214      file" button. Please *don't* put the patch in the ticket description
     215      or comment unless it's a single line patch.
    202216
    203217    * Name the patch file with a ``.diff`` extension; this will let the ticket
    204218      tracker apply correct syntax highlighting, which is quite helpful.
     
    209223
    210224    * The code required to fix a problem or add a feature is an essential part
    211225      of a patch, but it is not the only part. A good patch should also include
    212       a regression test to validate the behavior that has been fixed (and prevent
    213       the problem from arising again).
     226      a regression test to validate the behavior that has been fixed
     227      (and prevent the problem from arising again).
    214228
    215     * If the code associated with a patch adds a new feature, or modifies behavior
    216       of an existing feature, the patch should also contain documentation.
     229    * If the code associated with a patch adds a new feature, or modifies
     230      behavior of an existing feature, the patch should also contain
     231      documentation.
    217232
    218233Non-trivial patches
    219234-------------------
     
    233248don't meet all the requirements of a `good patch`_.
    234249
    235250One way to help out is to *triage* bugs that have been reported by other
    236 users. A couple of dedicated volunteers work on this regularly, but more help
    237 is always appreciated.
     251users. The core team—as well as many community members—work on this
     252regularly, but more help is always appreciated.
    238253
    239254Most of the workflow is based around the concept of a ticket's "triage stage".
    240255This stage describes where in its lifetime a given ticket is at any time.
     
    248263   :width: 590
    249264   :alt: Django's ticket workflow
    250265
    251 We've got two official roles here:
     266We've got two roles in this diagram:
    252267
    253     * Core developers: people with commit access who make the big decisions
    254       and write the bulk of the code.
     268    * Core developers: people with commit access who are responsible for
     269      making the big decisions, writing large portions of the code and
     270      integrating the contributions of the community.
    255271
    256     * Ticket triagers: trusted community members with a proven history of
    257       working with the Django community. As a result of this history, they
    258       have been entrusted by the core developers to make some of the smaller
    259       decisions about tickets.
     272    * Ticket triagers: anyone in the Django community who chooses to
     273      become involved in Django's development process. Our Trac installation
     274      is :ref:`intentionally left open to the public
     275      <the-spirit-of-contributing>`, and anyone can triage tickets.
     276      Django is a community project, and we encourage `triage by the
     277      community`_.
    260278
    261279Second, note the five triage stages:
    262280
     
    279297       adding to the framework if an excellent patch is submitted. These
    280298       tickets are not a high priority.
    281299
    282     5. If a ticket has an associated patch (see below), a triager will review
    283        the patch. If the patch is complete, it'll be marked as "ready for
    284        checkin" so that a core developer knows to review and check in the
    285        patches.
     300    5. If a ticket has an associated patch (see below), it will be reviewed
     301       by the community. If the patch is complete, it'll be marked as "ready
     302       for checkin" so that a core developer knows to review and commit the
     303       patch.
    286304
    287305The second part of this workflow involves a set of flags the describe what the
    288306ticket has or needs in order to be "ready for checkin":
    289307
    290308    "Has patch"
    291309        This means the ticket has an associated patch_. These will be
    292         reviewed by the triage team to see if the patch is "good".
     310        reviewed to see if the patch is "good".
    293311
    294312    "Needs documentation"
    295313        This flag is used for tickets with patches that need associated
    296314        documentation. Complete documentation of features is a prerequisite
    297         before we can check a fix into the codebase.
     315        before we can check them into the codebase.
    298316
    299317    "Needs tests"
    300318        This flags the patch as needing associated unit tests. Again, this is a
     
    303321    "Patch needs improvement"
    304322        This flag means that although the ticket *has* a patch, it's not quite
    305323        ready for checkin. This could mean the patch no longer applies
    306         cleanly, or that the code doesn't live up to our standards.
     324        cleanly, there is a flaw in the implementation, or that the code
     325        doesn't meet our standards.
    307326
    308327A ticket can be resolved in a number of ways:
    309328
    310329    "fixed"
    311         Used by one of the core developers once a patch has been rolled into
     330        Used by the core developers once a patch has been rolled into
    312331        Django and the issue is fixed.
    313332
    314333    "invalid"
     
    321340    "wontfix"
    322341        Used when a core developer decides that this request is not
    323342        appropriate for consideration in Django. This is usually chosen after
    324         discussion in the ``django-developers`` mailing list, and you should
    325         feel free to join in when it's something you care about.
     343        discussion in the ``django-developers`` mailing list. Feel free to
     344        start or join in discussions of "wontfix" tickets on the mailing list,
     345        but please do not reopen tickets closed as "wontfix" by core
     346        developers.
    326347
    327348    "duplicate"
    328349        Used when another ticket covers the same issue. By closing duplicate
     
    334355
    335356If you believe that the ticket was closed in error -- because you're
    336357still having the issue, or it's popped up somewhere else, or the triagers have
    337 -- made a mistake, please reopen the ticket and tell us why. Please do not
    338 reopen tickets that have been marked as "wontfix" by core developers.
     358made a mistake -- please reopen the ticket and provide further information.
     359Please do not reopen tickets that have been marked as "wontfix" by core
     360developers.
    339361
    340362.. _required details: `Reporting bugs`_
    341363.. _good patch: `Patch style`_
     364.. _triage by the community: `Triage by the general community`_
    342365.. _patch: `Submitting patches`_
    343366
    344367Triage by the general community
    345368-------------------------------
    346369
    347 Although the core developers and ticket triagers make the big decisions in
    348 the ticket triage process, there's also a lot that general community
    349 members can do to help the triage process. In particular, you can help out by:
     370Although the core developers make the big decisions in the ticket triage
     371process, there's a lot that general community members can do to help the
     372triage process. In particular, you can help out by:
    350373
    351374    * Closing "Unreviewed" tickets as "invalid", "worksforme" or "duplicate."
    352375
    353376    * Promoting "Unreviewed" tickets to "Design decision needed" if a design
    354377      decision needs to be made, or "Accepted" in case of obvious bugs.
    355378
    356     * Correcting the "Needs tests", "Needs documentation", or "Has patch" flags
    357       for tickets where they are incorrectly set.
     379    * Correcting the "Needs tests", "Needs documentation", or "Has patch"
     380      flags for tickets where they are incorrectly set.
    358381
    359382    * Adding the `easy-pickings`_ keyword to tickets that are small and
    360383      relatively straightforward.
     
    363386      any activity in a long time, it's possible that the problem has been
    364387      fixed but the ticket hasn't yet been closed.
    365388
    366     * Contacting the owners of tickets that have been claimed but have not seen
    367       any recent activity. If the owner doesn't respond after a week or so,
    368       remove the owner's claim on the ticket.
     389    * Contacting the owners of tickets that have been claimed but have not
     390      seen any recent activity. If the owner doesn't respond after a week
     391      or so, remove the owner's claim on the ticket.
    369392
    370     * Identifying trends and themes in the tickets. If there a lot of bug reports
    371       about a particular part of Django, it may indicate we should consider
    372       refactoring that part of the code. If a trend is emerging, you should
    373       raise it for discussion (referencing the relevant tickets) on
    374       `django-developers`_.
     393    * Identifying trends and themes in the tickets. If there a lot of bug
     394      reports about a particular part of Django, it may indicate we should
     395      consider refactoring that part of the code. If a trend is emerging,
     396      you should raise it for discussion (referencing the relevant tickets)
     397      on `django-developers`_.
    375398
    376399However, we do ask the following of all general community members working in
    377400the ticket database:
     
    380403      make the final determination of the fate of a ticket, usually after
    381404      consultation with the community.
    382405
    383     * Please **don't** promote tickets to "Ready for checkin" unless they are
    384       *trivial* changes -- for example, spelling mistakes or broken links in
    385       documentation.
     406    * Please **don't** promote your own tickets to "Ready for checkin". You
     407      may mark other people's tickets which you've reviewed as "Ready for
     408      checkin", but you should get at minimum one other community member to
     409      review a patch that you submit.
    386410
    387411    * Please **don't** reverse a decision that has been made by a core
    388       developer. If you disagree with a discussion that has been made,
     412      developer. If you disagree with a decision that has been made,
    389413      please post a message to `django-developers`_.
    390414
    391     * Please be conservative in your actions. If you're unsure if you should
    392       be making a change, don't make the change -- leave a comment with your
    393       concerns on the ticket, or post a message to `django-developers`_.
     415    * If you're unsure if you should be making a change, don't make the change
     416      but instead leave a comment with your concerns on the ticket, or
     417      post a message to `django-developers`_. It's okay to be unsure, but
     418      your input is still valuable.
    394419
    395420.. _contributing-translations:
    396421
     
    429454    * Once you are a member of a team choose the translation resource you
    430455      want update on the team page. For example the "core" resource refers
    431456      to the translation catalogue that contains all non-app translations.
    432       Each of the contrib apps also have a resource -- prefixed with "contrib-".
     457      Each of the contrib apps also have a resource (prefixed with "contrib-").
    433458
    434459      .. note::
    435460         For more information about how to use Transifex, see the
     
    500525Use of ``django.conf.settings``
    501526-------------------------------
    502527
    503 Modules should not in general use settings stored in ``django.conf.settings`` at
    504 the top level (i.e. evaluated when the module is imported). The explanation for
    505 this is as follows:
     528Modules should not in general use settings stored in ``django.conf.settings``
     529at the top level (i.e. evaluated when the module is imported). The explanation
     530for this is as follows:
    506531
    507532Manual configuration of settings (i.e. not relying on the
    508533``DJANGO_SETTINGS_MODULE`` environment variable) is allowed and possible as
     
    512537
    513538    settings.configure({}, SOME_SETTING='foo')
    514539
    515 However, if any setting is accessed before the ``settings.configure`` line, this
    516 will not work. (Internally, ``settings`` is a ``LazyObject`` which configures
    517 itself automatically when the settings are accessed if it has not already been
    518 configured).
     540However, if any setting is accessed before the ``settings.configure`` line,
     541this will not work. (Internally, ``settings`` is a ``LazyObject`` which
     542configures itself automatically when the settings are accessed if it has not
     543already been configured).
    519544
    520545So, if there is a module containing some code as follows::
    521546
     
    529554level is incompatible with the ability to configure the settings object
    530555manually, or makes it very difficult in some circumstances.
    531556
    532 Instead of the above code, a level of laziness or indirection must be used, such
    533 as :class:`django.utils.functional.LazyObject`, :func:`django.utils.functional.lazy` or
    534 ``lambda``.
     557Instead of the above code, a level of laziness or indirection must be used,
     558such as `django.utils.functional.LazyObject``, ``django.utils.functional.lazy``
     559or ``lambda``.
    535560
    536561Coding style
    537562============
     
    10851110       trunk you'll need to find a core developer familiar with your DVCS of
    10861111       choice who'll actually perform the merge.
    10871112
    1088        If you do decided to start a distributed branch of Django and choose to make it
    1089        public, please add the branch to the `Django branches`_ wiki page.
     1113       If you do decided to start a distributed branch of Django and choose to
     1114       make it public, please add the branch to the `Django branches`_ wiki
     1115       page.
    10901116
    1091     2. Feature branches using SVN have a higher bar. If you want a branch in SVN
    1092        itself, you'll need a "mentor" among the :doc:`core committers
    1093        </internals/committers>`. This person is responsible for actually creating
    1094        the branch, monitoring your process (see below), and ultimately merging
    1095        the branch into trunk.
     1117    2. Feature branches using SVN have a higher bar. If you want a branch
     1118       in SVN itself, you'll need a "mentor" among the :doc:`core committers
     1119       </internals/committers>`. This person is responsible for actually
     1120       creating the branch, monitoring your process (see below), and
     1121       ultimately merging the branch into trunk.
    10961122
    10971123       If you want a feature branch in SVN, you'll need to ask in
    10981124       `django-developers`_ for a mentor.
     
    11101136
    11111137DVCS branches are obviously not under central control, so we have no way of
    11121138enforcing these rules. However, if you're using a DVCS, following these rules
    1113 will give you the best chance of having a successful branch (read: merged back to
    1114 trunk).
     1139will give you the best chance of having a successful branch (read: merged back
     1140to trunk).
    11151141
    11161142Developers with branches in SVN, however, **must** follow these rules. The
    11171143branch mentor will keep on eye on the branch and **will delete it** if these
     
    11401166
    11411167After a branch has been merged, it should be considered "dead"; write access to
    11421168it will be disabled, and old branches will be periodically "trimmed." To keep
    1143 our SVN wrangling to a minimum, we won't be merging from a given branch into the
    1144 trunk more than once.
     1169our SVN wrangling to a minimum, we won't be merging from a given branch into
     1170the trunk more than once.
    11451171
    11461172Using branches
    11471173--------------
     
    12591285we use a more formal process.
    12601286
    12611287Any core committer (see below) may call for a formal vote using the same
    1262 voting mechanism above. A proposition will be considered carried by the core team
    1263 if:
     1288voting mechanism above. A proposition will be considered carried by the core
     1289team if:
    12641290
    12651291    * There are three "+1" votes from members of the core team.
    12661292
     
    13071333Decisions on new committers will follow the process explained above in `how
    13081334we make decisions`_.
    13091335
    1310 To request commit access, please contact an existing committer privately. Public
    1311 requests for commit access are potential flame-war starters, and will be ignored.
     1336To request commit access, please contact an existing committer privately.
     1337Public requests for commit access are potential flame-war starters, and
     1338will be ignored.
    13121339
    13131340.. _community page: http://www.djangoproject.com/community/
    13141341.. _ticket tracker: http://code.djangoproject.com/newticket
Back to Top