Ticket #14401: 14401_contributing_howto.2.diff
File 14401_contributing_howto.2.diff, 36.4 KB (added by , 14 years ago) |
---|
-
docs/howto/contribute.txt
1 =========================== 2 How to contribute to Django 3 =========================== 4 5 Django is developed 100% by the community, and the more people that are 6 actively involved in the code the better Django will be. We recognize 7 that contributing to Django can be daunting at first and sometimes 8 confusing even to veterans. While we have our official "Contributing 9 to Django" documentation which spells out the technical details of 10 triaging tickets and submitting patches, it leaves a lot of room for 11 interpretation. This guide aims to offer more general advice on issues 12 such as how to interpret the various stages and flags in Trac, and how 13 new 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 28 Django uses Trac_ for managing our progress, and Trac is a 29 community-tended garden of the bugs people have found and the features 30 people would like to see added. As in any garden, sometimes there are 31 weeds to be pulled and sometimes there are flowers and vegetables that 32 need picking. We need your help to sort out one from the other, and in 33 the end we all benefit together. 34 35 Like all gardens, we can aspire to perfection but in reality there's no 36 such thing. Even in the most pristine garden there are still snails and 37 insects. In a community garden there are also helpful people who--with 38 the best of intentions--fertilize the weeds and poison the roses. It's 39 the job of the community as a whole to self-manage, keep the problems to 40 a minimum, and educate those coming into the community so that they can 41 become valuable contributing members. 42 43 Similarly, while we aim for Trac to be a perfect representation of the 44 state of Django's progress, we acknowledge that this simply will not 45 happen. By distributing the load of Trac maintenance to the community, 46 we accept that there will be mistakes. Trac is "mostly accurate", and we 47 give allowances for the fact that sometimes it will be wrong. That's 48 okay. We're perfectionists with deadlines. 49 50 We rely on the community to keep participating, keep tickets as accurate 51 as possible, and raise issues for discussion on our mailing lists when 52 there is confusion or disagreement. 53 54 Django is a community project, and every contribution helps. We can't do 55 this without YOU! 56 57 .. _Trac: http://code.djangoproject.com/ 58 59 Understanding Trac 60 ================== 61 62 Trac is Django's sole official issue tracker. All known bugs, 63 desired features and ideas for changes are logged there. 64 65 However, Trac can be quite confusing even to veteran contributors. 66 Having to look at both flags and triage stages isn't immediately 67 obvious, and the stages themselves can be misinterpreted. 68 69 What Django's triage stages "really mean" 70 ----------------------------------------- 71 72 Unreviewed 73 ~~~~~~~~~~ 74 75 The ticket has not been reviewed by anyone who felt 76 qualified to make a judgment about whether the ticket contained a valid 77 issue, a viable feature, or ought to be closed for any of the various 78 reasons. 79 80 Accepted 81 ~~~~~~~~ 82 83 The big grey area! The absolute meaning of "accepted" 84 is that the issue described in the ticket is valid and is in some stage 85 of 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 110 Design Decision Needed 111 ~~~~~~~~~~~~~~~~~~~~~~ 112 113 This stage is for 114 issues which may be contentious, may be backwards incompatible, or 115 otherwise involve high-level design decisions. These decisions are 116 generally made by the core committers, however that is not a 117 requirement. See the FAQ below for "My ticket has been in DDN forever! 118 What should I do?" 119 120 Ready For Checkin 121 ~~~~~~~~~~~~~~~~~ 122 123 The ticket was reviewed by any 124 member of the community other than the person who supplied the patch and 125 found to meet all the requirements for a commit-ready patch. A core 126 committer now needs to give the patch a final review prior to being 127 committed. See the FAQ below for "My ticket has been in RFC forever! 128 What should I do?" 129 130 Someday/Maybe? 131 ~~~~~~~~~~~~~~ 132 133 Generally only used for 134 vague/high-level features or design ideas. These tickets are uncommon 135 and overall less useful since they don't describe concrete actionable 136 issues. 137 138 Fixed on a branch 139 ~~~~~~~~~~~~~~~~~ 140 141 Used to indicate that a ticket is resolved as 142 part of a major body of work that will eventually be merged to trunk. 143 Tickets in this stage generally don't need further work. This may happen 144 in the case of major features/refactors in each release cycle, or as 145 part of the annual Google Summer of Code efforts. 146 147 Example Trac workflow 148 --------------------- 149 150 Here 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 173 Some tickets require much less feedback than this, but then again some 174 tickets require much much more. 175 176 Advice for new contributors 177 =========================== 178 179 New contributor and not sure what to do? Want to help but just don't 180 know 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 265 FAQs 266 ==== 267 268 **This ticket I care about has been ignored for days/weeks/months! What 269 can 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 279 RFC 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
11 11 12 12 apache-auth 13 13 auth-remote-user 14 contribute 14 15 custom-management-commands 15 16 custom-model-fields 16 17 custom-template-tags -
docs/internals/contributing.txt
2 2 Contributing to Django 3 3 ====================== 4 4 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: 5 If you think working *with* Django is fun, wait until you start working *on* 6 it. We're passionate about helping Django users make the jump to contributing 7 members of the community, so there are many ways you can help Django's 8 development: 8 9 9 10 * Blog about Django. We syndicate all the Django blogs we know about on 10 11 the `community page`_; contact jacob@jacobian.org if you've got a blog … … 32 33 works and how it handles bugs, mailing lists, and all the other minutiae of 33 34 Django development. 34 35 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 35 43 .. _reporting-bugs: 36 44 37 45 Reporting bugs 38 46 ============== 39 47 40 48 Well-written bug reports are *incredibly* helpful. However, there's a certain 41 amount of overhead involved in working with any bug tracking system ,so your49 amount of overhead involved in working with any bug tracking system so your 42 50 help in keeping our ticket tracker as useful as possible is appreciated. In 43 51 particular: 44 52 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. 46 55 47 56 * **Do** `search the tracker`_ to see if your issue has already been filed. 48 57 … … 60 69 `django-users`_ list, or the `#django`_ IRC channel for that. 61 70 62 71 * **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. 65 74 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`_. 69 79 70 80 * **Don't** use the ticket tracker for lengthy discussions, because they're 71 81 likely to get lost. If a particular ticket is controversial, please move … … 73 83 74 84 * **Don't** post to django-developers just to announce that you have filed 75 85 a bug report. All the tickets are mailed to another list 76 (`django-updates`_), which is tracked by developers and triagers, so we77 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. 78 88 79 89 .. _django-updates: http://groups.google.com/group/django-updates 80 90 … … 90 100 In the event of a confirmed vulnerability in Django itself, we will take the 91 101 following actions: 92 102 93 * Acknowledge to the reporter that we've received the report and that a fix94 is forthcoming. We'll give a rough timeline and ask the reporter to keep95 t he 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. 96 106 97 * Halt all other development as long as is needed to develop a fix, including98 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. 99 109 100 110 * 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 patch102 and those trying to exploit the hole, we will not announce security103 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. 104 114 105 115 * 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 will107 include documentation of the vulnerability, links to the relevant patch(es),108 and a request to keep the vulnerability confidential until the official109 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. 110 120 111 121 * Publicly announce the vulnerability and the fix on the pre-determined 112 122 go-public date. This will probably mean a new release of Django, but … … 115 125 Submitting patches 116 126 ================== 117 127 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. 128 We're always grateful for patches to Django's code. Indeed, bug reports 129 with associated patches will get fixed *far* more quickly than those 130 without patches. 120 131 121 132 "Claiming" tickets 122 133 ------------------ … … 132 143 and time availability), claim it by following these steps: 133 144 134 145 * `Create an account`_ to use in our ticket system. 146 135 147 * If a ticket for this issue doesn't exist yet, create one in our 136 148 `ticket tracker`_. 149 137 150 * If a ticket for this issue already exists, make sure nobody else has 138 151 claimed it. To do this, look at the "Assigned to" section of the ticket. 139 152 If it's assigned to "nobody," then it's available to be claimed. 140 153 Otherwise, somebody else is working on this ticket, and you either find 141 154 another bug/feature to work on, or contact the developer working on the 142 155 ticket to offer your help. 156 143 157 * Log into your account, if you haven't already, by clicking "Login" in the 144 158 upper right of the ticket page. 159 145 160 * Claim the ticket by clicking the radio button next to "Accept ticket" 146 161 near the bottom of the page, then clicking "Submit changes." 147 162 … … 158 173 in a reasonably timely fashion. If you don't have time to work on it, either 159 174 unclaim it or don't claim it in the first place! 160 175 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. 176 If there's no sign of progress on a particular claimed ticket for a week or 177 two, another developer may ask you to relinquish the ticket claim so that it's 178 no longer monopolized and somebody else can claim it. 166 179 167 180 If you've claimed a ticket and it's taking a long time (days or weeks) to code, 168 181 keep everybody updated by posting comments on the ticket. If you don't provide … … 185 198 * Make sure your code matches our `coding style`_. 186 199 187 200 * 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. 191 205 192 206 Patches in ``git diff`` format are also acceptable. 193 207 194 208 * When creating patches, always run ``svn diff`` from the top-level 195 209 ``trunk`` directory -- i.e., the one that contains ``django``, ``docs``, 196 ``tests``, ``AUTHORS``, etc. This makes it easy for other people to apply197 your patches.210 ``tests``, ``AUTHORS``, etc. This makes it easy for other people to 211 apply your patches. 198 212 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 comment201 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. 202 216 203 217 * Name the patch file with a ``.diff`` extension; this will let the ticket 204 218 tracker apply correct syntax highlighting, which is quite helpful. … … 209 223 210 224 * The code required to fix a problem or add a feature is an essential part 211 225 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 prevent213 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). 214 228 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. 217 232 218 233 Non-trivial patches 219 234 ------------------- … … 233 248 don't meet all the requirements of a `good patch`_. 234 249 235 250 One 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 help237 is always appreciated.251 users. The core team—as well as many community members—work on this 252 regularly, but more help is always appreciated. 238 253 239 254 Most of the workflow is based around the concept of a ticket's "triage stage". 240 255 This stage describes where in its lifetime a given ticket is at any time. … … 248 263 :width: 590 249 264 :alt: Django's ticket workflow 250 265 251 We've got two official roles here:266 We've got two roles in this diagram: 252 267 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. 255 271 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`_. 260 278 261 279 Second, note the five triage stages: 262 280 … … 279 297 adding to the framework if an excellent patch is submitted. These 280 298 tickets are not a high priority. 281 299 282 5. If a ticket has an associated patch (see below), a triager will review283 the patch. If the patch is complete, it'll be marked as "ready for284 checkin" so that a core developer knows to review and check inthe285 patch es.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. 286 304 287 305 The second part of this workflow involves a set of flags the describe what the 288 306 ticket has or needs in order to be "ready for checkin": 289 307 290 308 "Has patch" 291 309 This means the ticket has an associated patch_. These will be 292 reviewed by the triage teamto see if the patch is "good".310 reviewed to see if the patch is "good". 293 311 294 312 "Needs documentation" 295 313 This flag is used for tickets with patches that need associated 296 314 documentation. Complete documentation of features is a prerequisite 297 before we can check a fixinto the codebase.315 before we can check them into the codebase. 298 316 299 317 "Needs tests" 300 318 This flags the patch as needing associated unit tests. Again, this is a … … 303 321 "Patch needs improvement" 304 322 This flag means that although the ticket *has* a patch, it's not quite 305 323 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. 307 326 308 327 A ticket can be resolved in a number of ways: 309 328 310 329 "fixed" 311 Used by one ofthe core developers once a patch has been rolled into330 Used by the core developers once a patch has been rolled into 312 331 Django and the issue is fixed. 313 332 314 333 "invalid" … … 321 340 "wontfix" 322 341 Used when a core developer decides that this request is not 323 342 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. 326 347 327 348 "duplicate" 328 349 Used when another ticket covers the same issue. By closing duplicate … … 334 355 335 356 If you believe that the ticket was closed in error -- because you're 336 357 still 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. 358 made a mistake -- please reopen the ticket and provide further information. 359 Please do not reopen tickets that have been marked as "wontfix" by core 360 developers. 339 361 340 362 .. _required details: `Reporting bugs`_ 341 363 .. _good patch: `Patch style`_ 364 .. _triage by the community: `Triage by the general community`_ 342 365 .. _patch: `Submitting patches`_ 343 366 344 367 Triage by the general community 345 368 ------------------------------- 346 369 347 Although the core developers and ticket triagers make the big decisions in348 the ticket triage process, there's also a lot that general community 349 members can do to help thetriage process. In particular, you can help out by:370 Although the core developers make the big decisions in the ticket triage 371 process, there's a lot that general community members can do to help the 372 triage process. In particular, you can help out by: 350 373 351 374 * Closing "Unreviewed" tickets as "invalid", "worksforme" or "duplicate." 352 375 353 376 * Promoting "Unreviewed" tickets to "Design decision needed" if a design 354 377 decision needs to be made, or "Accepted" in case of obvious bugs. 355 378 356 * Correcting the "Needs tests", "Needs documentation", or "Has patch" flags357 f or 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. 358 381 359 382 * Adding the `easy-pickings`_ keyword to tickets that are small and 360 383 relatively straightforward. … … 363 386 any activity in a long time, it's possible that the problem has been 364 387 fixed but the ticket hasn't yet been closed. 365 388 366 * Contacting the owners of tickets that have been claimed but have not seen367 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. 369 392 370 * Identifying trends and themes in the tickets. If there a lot of bug reports371 about a particular part of Django, it may indicate we should consider372 refactoring that part of the code. If a trend is emerging, you should373 raise it for discussion (referencing the relevant tickets) on374 `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`_. 375 398 376 399 However, we do ask the following of all general community members working in 377 400 the ticket database: … … 380 403 make the final determination of the fate of a ticket, usually after 381 404 consultation with the community. 382 405 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. 386 410 387 411 * Please **don't** reverse a decision that has been made by a core 388 developer. If you disagree with a d iscussion that has been made,412 developer. If you disagree with a decision that has been made, 389 413 please post a message to `django-developers`_. 390 414 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. 394 419 395 420 .. _contributing-translations: 396 421 … … 429 454 * Once you are a member of a team choose the translation resource you 430 455 want update on the team page. For example the "core" resource refers 431 456 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-"). 433 458 434 459 .. note:: 435 460 For more information about how to use Transifex, see the … … 500 525 Use of ``django.conf.settings`` 501 526 ------------------------------- 502 527 503 Modules should not in general use settings stored in ``django.conf.settings`` at504 the top level (i.e. evaluated when the module is imported). The explanation for 505 this is as follows:528 Modules should not in general use settings stored in ``django.conf.settings`` 529 at the top level (i.e. evaluated when the module is imported). The explanation 530 for this is as follows: 506 531 507 532 Manual configuration of settings (i.e. not relying on the 508 533 ``DJANGO_SETTINGS_MODULE`` environment variable) is allowed and possible as … … 512 537 513 538 settings.configure({}, SOME_SETTING='foo') 514 539 515 However, if any setting is accessed before the ``settings.configure`` line, this516 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).540 However, if any setting is accessed before the ``settings.configure`` line, 541 this will not work. (Internally, ``settings`` is a ``LazyObject`` which 542 configures itself automatically when the settings are accessed if it has not 543 already been configured). 519 544 520 545 So, if there is a module containing some code as follows:: 521 546 … … 529 554 level is incompatible with the ability to configure the settings object 530 555 manually, or makes it very difficult in some circumstances. 531 556 532 Instead of the above code, a level of laziness or indirection must be used, such533 as :class:`django.utils.functional.LazyObject`, :func:`django.utils.functional.lazy` or 534 ``lambda``.557 Instead of the above code, a level of laziness or indirection must be used, 558 such as `django.utils.functional.LazyObject``, ``django.utils.functional.lazy`` 559 or ``lambda``. 535 560 536 561 Coding style 537 562 ============ … … 1085 1110 trunk you'll need to find a core developer familiar with your DVCS of 1086 1111 choice who'll actually perform the merge. 1087 1112 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. 1090 1116 1091 2. Feature branches using SVN have a higher bar. If you want a branch in SVN1092 i tself, you'll need a "mentor" among the :doc:`core committers1093 </internals/committers>`. This person is responsible for actually creating1094 the branch, monitoring your process (see below), and ultimately merging1095 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. 1096 1122 1097 1123 If you want a feature branch in SVN, you'll need to ask in 1098 1124 `django-developers`_ for a mentor. … … 1110 1136 1111 1137 DVCS branches are obviously not under central control, so we have no way of 1112 1138 enforcing 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 to1114 t runk).1139 will give you the best chance of having a successful branch (read: merged back 1140 to trunk). 1115 1141 1116 1142 Developers with branches in SVN, however, **must** follow these rules. The 1117 1143 branch mentor will keep on eye on the branch and **will delete it** if these … … 1140 1166 1141 1167 After a branch has been merged, it should be considered "dead"; write access to 1142 1168 it 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 the1144 t runk more than once.1169 our SVN wrangling to a minimum, we won't be merging from a given branch into 1170 the trunk more than once. 1145 1171 1146 1172 Using branches 1147 1173 -------------- … … 1259 1285 we use a more formal process. 1260 1286 1261 1287 Any 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 team1263 if:1288 voting mechanism above. A proposition will be considered carried by the core 1289 team if: 1264 1290 1265 1291 * There are three "+1" votes from members of the core team. 1266 1292 … … 1307 1333 Decisions on new committers will follow the process explained above in `how 1308 1334 we make decisions`_. 1309 1335 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. 1336 To request commit access, please contact an existing committer privately. 1337 Public requests for commit access are potential flame-war starters, and 1338 will be ignored. 1312 1339 1313 1340 .. _community page: http://www.djangoproject.com/community/ 1314 1341 .. _ticket tracker: http://code.djangoproject.com/newticket