|  |  | =========================== | 
						
						
						
							|  |  |  Docutils Project Policies | 
						
						
						
							|  |  | =========================== | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | :Author: David Goodger; open to all Docutils developers | 
						
						
						
							|  |  | :Contact: docutils-develop@lists.sourceforge.net | 
						
						
						
							|  |  | :Date: $Date: 2017-06-23 01:26:18 +0200 (Fr, 23 Jun 2017) $ | 
						
						
						
							|  |  | :Revision: $Revision: 8123 $ | 
						
						
						
							|  |  | :Copyright: This document has been placed in the public domain. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. contents:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The Docutils project group is a meritocracy based on code contribution | 
						
						
						
							|  |  | and lots of discussion [#bcs]_.  A few quotes sum up the policies of | 
						
						
						
							|  |  | the Docutils project.  The IETF's classic credo (by MIT professor Dave | 
						
						
						
							|  |  | Clark) is an ideal we can aspire to: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |     We reject: kings, presidents, and voting.  We believe in: rough | 
						
						
						
							|  |  |     consensus and running code. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | As architect, chief cook and bottle-washer, David Goodger currently | 
						
						
						
							|  |  | functions as BDFN (Benevolent Dictator For Now).  (But he would | 
						
						
						
							|  |  | happily abdicate the throne given a suitable candidate.  Any takers?) | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Eric S. Raymond, anthropologist of the hacker subculture, writes in | 
						
						
						
							|  |  | his essay `The Magic Cauldron`_: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |     The number of contributors [to] projects is strongly and inversely | 
						
						
						
							|  |  |     correlated with the number of hoops each project makes a user go | 
						
						
						
							|  |  |     through to contribute. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | We will endeavour to keep the barrier to entry as low as possible. | 
						
						
						
							|  |  | The policies below should not be thought of as barriers, but merely as | 
						
						
						
							|  |  | a codification of experience to date.  These are "best practices"; | 
						
						
						
							|  |  | guidelines, not absolutes.  Exceptions are expected, tolerated, and | 
						
						
						
							|  |  | used as a source of improvement.  Feedback and criticism is welcome. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | As for control issues, Emmett Plant (CEO of the Xiph.org Foundation, | 
						
						
						
							|  |  | originators of Ogg Vorbis) put it well when he said: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |     Open source dictates that you lose a certain amount of control | 
						
						
						
							|  |  |     over your codebase, and that's okay with us. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. [#bcs] Phrase borrowed from `Ben Collins-Sussman of the Subversion | 
						
						
						
							|  |  |    project <http://www.red-bean.com/sussman/svn-anti-fud.html>`__. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _The Magic Cauldron: | 
						
						
						
							|  |  |    http://www.catb.org/~esr/writings/magic-cauldron/ | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | How to get a new feature into Docutils | 
						
						
						
							|  |  | ======================================== | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Question: | 
						
						
						
							|  |  |    I would very much like to have this new feature in the Docutils core. | 
						
						
						
							|  |  |    What exactly do I have to do to make this possible? | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Present your idea at the Docutils-develop_ mailing list, | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   +1  usually triggers a fast response, | 
						
						
						
							|  |  |   -1  may be forgotten later, | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   and/or file a ticket at Docutils' `feature request tracker`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   +1  there is a permanent record, | 
						
						
						
							|  |  |   -1  it may stay forgotten among all the other feature requests. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Convince a Docutils developer that this is a valuable addition worth the | 
						
						
						
							|  |  |   effort. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Contribute. The developers will make sure that the contribution fits | 
						
						
						
							|  |  |   nicely into Docutils (cf. the `review criteria`_). This might involve | 
						
						
						
							|  |  |   discussing (and compromising on) design and implementation details. It | 
						
						
						
							|  |  |   might also lead to the conclusion that the addition fits better in the | 
						
						
						
							|  |  |   `extensions and related projects`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Be patient, and be persistent.  None of us are paid to do this, | 
						
						
						
							|  |  |   it's all in our spare time -- which is precious and rare. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | How to make code contributions that are easily accepted: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Have a look at the `Python coding conventions`_ and `documentation | 
						
						
						
							|  |  |   conventions`_ below. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * **Prepare test cases.** This vastly helps when integrating new code. Test | 
						
						
						
							|  |  |   cases are also examples and showcases for new features. See `Docutils | 
						
						
						
							|  |  |   Testing`_ for a description of the test suite in ``docutils/test/``. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   Ensure the addition works with all `supported Python versions`__. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   __ ../../README.html#requirements | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Look at the Docutils sources to see how similar features are implemented, | 
						
						
						
							|  |  |   learn to do it "the Docutils way". | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Prepare the a patch or an addition to the existing documentation. | 
						
						
						
							|  |  |   Include links. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * If you are familiar with version control, consider creating a `feature | 
						
						
						
							|  |  |   branch`_ in a Docutils repository_ checkout. (Working with branches is | 
						
						
						
							|  |  |   *much* easier with git_. You can get a git clone of the repository from | 
						
						
						
							|  |  |   http://repo.or.cz/w/docutils.git or with git-svn.) | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _docutils-develop: ../user/mailing-lists.html#docutils-develop | 
						
						
						
							|  |  | .. _feature request tracker: | 
						
						
						
							|  |  |    http://sourceforge.net/p/docutils/feature-requests/ | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _git: http://git-scm.com/ | 
						
						
						
							|  |  | .. _Docutils testing: testing.html | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Python Coding Conventions | 
						
						
						
							|  |  | ========================= | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Contributed code will not be refused merely because it does not | 
						
						
						
							|  |  | strictly adhere to these conditions; as long as it's internally | 
						
						
						
							|  |  | consistent, clean, and correct, it probably will be accepted.  But | 
						
						
						
							|  |  | don't be surprised if the "offending" code gets fiddled over time to | 
						
						
						
							|  |  | conform to these conventions. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The Docutils project shall follow the generic coding conventions as | 
						
						
						
							|  |  | specified in the `Style Guide for Python Code`_ and `Docstring | 
						
						
						
							|  |  | Conventions`_ PEPs, summarized, clarified, and extended as follows: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * 4 spaces per indentation level.  No hard tabs. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Use only 7-bit ASCII, no 8-bit strings.  See `Docutils | 
						
						
						
							|  |  |   Internationalization`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * No one-liner compound statements (i.e., no ``if x: return``: use two | 
						
						
						
							|  |  |   lines & indentation), except for degenerate class or method | 
						
						
						
							|  |  |   definitions (i.e., ``class X: pass`` is OK.). | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Lines should be no more than 78 characters long. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Use "StudlyCaps" for class names (except for element classes in | 
						
						
						
							|  |  |   docutils.nodes). | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Use "lowercase" or "lowercase_with_underscores" for function, | 
						
						
						
							|  |  |   method, and variable names.  For short names, maximum two words, | 
						
						
						
							|  |  |   joined lowercase may be used (e.g. "tagname").  For long names with | 
						
						
						
							|  |  |   three or more words, or where it's hard to parse the split between | 
						
						
						
							|  |  |   two words, use lowercase_with_underscores (e.g., | 
						
						
						
							|  |  |   "note_explicit_target", "explicit_target").  If in doubt, use | 
						
						
						
							|  |  |   underscores. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Avoid lambda expressions, which are inherently difficult to | 
						
						
						
							|  |  |   understand.  Named functions are preferable and superior: they're | 
						
						
						
							|  |  |   faster (no run-time compilation), and well-chosen names serve to | 
						
						
						
							|  |  |   document and aid understanding. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Avoid functional constructs (filter, map, etc.).  Use list | 
						
						
						
							|  |  |   comprehensions instead. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Avoid ``from __future__ import`` constructs.  They are inappropriate | 
						
						
						
							|  |  |   for production code. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Use 'single quotes' for string literals, and """triple double | 
						
						
						
							|  |  |   quotes""" for docstrings. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _Style Guide for Python Code: | 
						
						
						
							|  |  |    http://www.python.org/peps/pep-0008.html | 
						
						
						
							|  |  | .. _Docstring Conventions: http://www.python.org/peps/pep-0257.html | 
						
						
						
							|  |  | .. _Docutils Internationalization: ../howto/i18n.html#python-code | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Documentation Conventions | 
						
						
						
							|  |  | ========================= | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Docutils documentation is written using reStructuredText, of course. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Use 7-bit ASCII if at all possible, and Unicode substitutions when | 
						
						
						
							|  |  |   necessary. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Use the following section title adornment styles:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       ================ | 
						
						
						
							|  |  |        Document Title | 
						
						
						
							|  |  |       ================ | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       -------------------------------------------- | 
						
						
						
							|  |  |        Document Subtitle, or Major Division Title | 
						
						
						
							|  |  |       -------------------------------------------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       Section | 
						
						
						
							|  |  |       ======= | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       Subsection | 
						
						
						
							|  |  |       ---------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       Sub-Subsection | 
						
						
						
							|  |  |       `````````````` | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       Sub-Sub-Subsection | 
						
						
						
							|  |  |       .................. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Use two blank lines before each section/subsection/etc. title.  One | 
						
						
						
							|  |  |   blank line is sufficient between immediately adjacent titles. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Add a bibliographic field list immediately after the document | 
						
						
						
							|  |  |   title/subtitle.  See the beginning of this document for an example. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Add an Emacs "local variables" block in a comment at the end of the | 
						
						
						
							|  |  |   document.  See the end of this document for an example. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Copyrights and Licensing | 
						
						
						
							|  |  | ======================== | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The majority of the Docutils project code and documentation has been | 
						
						
						
							|  |  | placed in the public domain.  Unless clearly and explicitly indicated | 
						
						
						
							|  |  | otherwise, any patches (modifications to existing files) submitted to | 
						
						
						
							|  |  | the project for inclusion (via Subversion, SourceForge trackers, | 
						
						
						
							|  |  | mailing lists, or private email) are assumed to be in the public | 
						
						
						
							|  |  | domain as well. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Any new files contributed to the project should clearly state their | 
						
						
						
							|  |  | intentions regarding copyright, in one of the following ways: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Public domain (preferred): include the statement "This | 
						
						
						
							|  |  |   module/document has been placed in the public domain." | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Copyright & open source license: include a copyright notice, along | 
						
						
						
							|  |  |   with either an embedded license statement, a reference to an | 
						
						
						
							|  |  |   accompanying license file, or a license URL. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   The license should be well known, simple and compatible with other | 
						
						
						
							|  |  |   open source software licenses. To keep the number of different | 
						
						
						
							|  |  |   licenses at a minimum, using the `2-Clause BSD license`_ | 
						
						
						
							|  |  |   is recommended. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | 2-Clause BSD license | 
						
						
						
							|  |  | -------------------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | (also known as "Simplified" or `FreeBSD license`) | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   If you want a simple, permissive non-copyleft free software license, the | 
						
						
						
							|  |  |   FreeBSD license is a reasonable choice. However, please don't call it a | 
						
						
						
							|  |  |   “BSD” or “BSD-style” license, because that is likely to cause confusion | 
						
						
						
							|  |  |   which could lead to use of the flawed original BSD license. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |   -- `Various Licenses and Comments about Them`_ | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Pros: | 
						
						
						
							|  |  |   * clear wording, structured text | 
						
						
						
							|  |  |   * license used by the closely related Sphinx project | 
						
						
						
							|  |  |   * "2-Clause BSD license" is a non-ambiguous name, used by both, OSI and | 
						
						
						
							|  |  |     GNU. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | References: | 
						
						
						
							|  |  |   * http://www.freebsd.org/copyright/freebsd-license.html | 
						
						
						
							|  |  |   * http://www.opensource.org/licenses/BSD-2-Clause | 
						
						
						
							|  |  |   * http://www.spdx.org/licenses/BSD-2-Clause | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _Various Licenses and Comments about Them: | 
						
						
						
							|  |  |    http://www.gnu.org/licenses/license-list.html | 
						
						
						
							|  |  | .. _OSI Approved Licenses: http://www.opensource.org/licenses/category | 
						
						
						
							|  |  | .. _SPDX Open Source License Registry: http://www.spdx.org/licenses/ | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _Subversion Repository: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Repository | 
						
						
						
							|  |  | ========== | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Please see the `repository documentation`_ for details on how to | 
						
						
						
							|  |  | access Docutils' Subversion repository.  Anyone can access the | 
						
						
						
							|  |  | repository anonymously.  Only project developers can make changes. | 
						
						
						
							|  |  | (If you would like to become a project developer, just ask!)  Also see | 
						
						
						
							|  |  | `Setting Up For Docutils Development`_ below for some useful info. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Unless you really *really* know what you're doing, please do *not* use | 
						
						
						
							|  |  | ``svn import``.  It's quite easy to mess up the repository with an | 
						
						
						
							|  |  | import. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _repository documentation: repository.html | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Branches | 
						
						
						
							|  |  | -------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | (These branch policies go into effect with Docutils 0.4.) | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The "docutils" directory of the **trunk** (a.k.a. the **Docutils | 
						
						
						
							|  |  | core**) is used for active -- but stable, fully tested, and reviewed | 
						
						
						
							|  |  | -- development. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | If we need to cut a bugfix release, we'll create a **maintenance branch** | 
						
						
						
							|  |  | based on the latest feature release.  For example, when Docutils 0.5 is | 
						
						
						
							|  |  | released, this would be ``branches/docutils-0.5``, any existing 0.4.x | 
						
						
						
							|  |  | maintenance branches may be retired.  Maintenance branches will receive bug | 
						
						
						
							|  |  | fixes only; no new features will be allowed here. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Obvious and uncontroversial bug fixes *with tests* can be checked in | 
						
						
						
							|  |  | directly to the core and to the maintenance branches.  Don't forget to | 
						
						
						
							|  |  | add test cases!  Many (but not all) bug fixes will be applicable both | 
						
						
						
							|  |  | to the core and to the maintenance branches; these should be applied | 
						
						
						
							|  |  | to both.  No patches or dedicated branches are required for bug fixes, | 
						
						
						
							|  |  | but they may be used.  It is up to the discretion of project | 
						
						
						
							|  |  | developers to decide which mechanism to use for each case. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _feature branches: | 
						
						
						
							|  |  | .. _feature branch: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Feature additions and API changes will be done in **feature | 
						
						
						
							|  |  | branches**.  Feature branches will not be managed in any way. | 
						
						
						
							|  |  | Frequent small checkins are encouraged here.  Feature branches must be | 
						
						
						
							|  |  | discussed on the `docutils-develop mailing list`_ and reviewed before | 
						
						
						
							|  |  | being merged into the core. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _docutils-develop mailing list: | 
						
						
						
							|  |  |    http://lists.sourceforge.net/lists/listinfo/docutils-develop | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Review Criteria | 
						
						
						
							|  |  | ``````````````` | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Before a new feature, an API change, or a complex, disruptive, or | 
						
						
						
							|  |  | controversial bug fix can be checked in to the core or into a | 
						
						
						
							|  |  | maintenance branch, it must undergo review.  These are the criteria: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * The branch must be complete, and include full documentation and | 
						
						
						
							|  |  |   tests. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * There should ideally be one branch merge commit per feature or | 
						
						
						
							|  |  |   change.  In other words, each branch merge should represent a | 
						
						
						
							|  |  |   coherent change set. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * The code must be stable and uncontroversial.  Moving targets and | 
						
						
						
							|  |  |   features under debate are not ready to be merged. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * The code must work.  The test suite must complete with no failures. | 
						
						
						
							|  |  |   See `Docutils Testing`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The review process will ensure that at least one other set of eyeballs | 
						
						
						
							|  |  | & brains sees the code before it enters the core.  In addition to the | 
						
						
						
							|  |  | above, the general `Check-ins`_ policy (below) also applies. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Check-ins | 
						
						
						
							|  |  | --------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Changes or additions to the Docutils core and maintenance branches | 
						
						
						
							|  |  | carry a commitment to the Docutils user community.  Developers must be | 
						
						
						
							|  |  | prepared to fix and maintain any code they have committed. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The Docutils core (``trunk/docutils`` directory) and maintenance | 
						
						
						
							|  |  | branches should always be kept in a stable state (usable and as | 
						
						
						
							|  |  | problem-free as possible).  All changes to the Docutils core or | 
						
						
						
							|  |  | maintenance branches must be in `good shape`_, usable_, documented_, | 
						
						
						
							|  |  | tested_, and `reasonably complete`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * _`Good shape` means that the code is clean, readable, and free of | 
						
						
						
							|  |  |   junk code (unused legacy code; by analogy to "junk DNA"). | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * _`Usable` means that the code does what it claims to do.  An "XYZ | 
						
						
						
							|  |  |   Writer" should produce reasonable XYZ output. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * _`Documented`: The more complete the documentation the better. | 
						
						
						
							|  |  |   Modules & files must be at least minimally documented internally. | 
						
						
						
							|  |  |   `Docutils Front-End Tools`_ should have a new section for any | 
						
						
						
							|  |  |   front-end tool that is added.  `Docutils Configuration Files`_ | 
						
						
						
							|  |  |   should be modified with any settings/options defined.  For any | 
						
						
						
							|  |  |   non-trivial change, the HISTORY.txt_ file should be updated. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * _`Tested` means that unit and/or functional tests, that catch all | 
						
						
						
							|  |  |   bugs fixed and/or cover all new functionality, have been added to | 
						
						
						
							|  |  |   the test suite.  These tests must be checked by running the test | 
						
						
						
							|  |  |   suite under all supported Python versions, and the entire test suite | 
						
						
						
							|  |  |   must pass.  See `Docutils Testing`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * _`Reasonably complete` means that the code must handle all input. | 
						
						
						
							|  |  |   Here "handle" means that no input can cause the code to fail (cause | 
						
						
						
							|  |  |   an exception, or silently and incorrectly produce nothing). | 
						
						
						
							|  |  |   "Reasonably complete" does not mean "finished" (no work left to be | 
						
						
						
							|  |  |   done).  For example, a writer must handle every standard element | 
						
						
						
							|  |  |   from the Docutils document model; for unimplemented elements, it | 
						
						
						
							|  |  |   must *at the very least* warn that "Output for element X is not yet | 
						
						
						
							|  |  |   implemented in writer Y". | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | If you really want to check code directly into the Docutils core, | 
						
						
						
							|  |  | you can, but you must ensure that it fulfills the above criteria | 
						
						
						
							|  |  | first.  People will start to use it and they will expect it to work! | 
						
						
						
							|  |  | If there are any issues with your code, or if you only have time for | 
						
						
						
							|  |  | gradual development, you should put it on a branch or in the sandbox | 
						
						
						
							|  |  | first.  It's easy to move code over to the Docutils core once it's | 
						
						
						
							|  |  | complete. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | It is the responsibility and obligation of all developers to keep the | 
						
						
						
							|  |  | Docutils core and maintenance branches stable.  If a commit is made to | 
						
						
						
							|  |  | the core or maintenance branch which breaks any test, the solution is | 
						
						
						
							|  |  | simply to revert the change.  This is not vindictive; it's practical. | 
						
						
						
							|  |  | We revert first, and discuss later. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Docutils will pursue an open and trusting policy for as long as | 
						
						
						
							|  |  | possible, and deal with any aberrations if (and hopefully not when) | 
						
						
						
							|  |  | they happen.  We'd rather see a torrent of loose contributions than | 
						
						
						
							|  |  | just a trickle of perfect-as-they-stand changes.  The occasional | 
						
						
						
							|  |  | mistake is easy to fix.  That's what version control is for! | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _Docutils Front-End Tools: ../user/tools.html | 
						
						
						
							|  |  | .. _Docutils Configuration Files: ../user/config.html | 
						
						
						
							|  |  | .. _HISTORY.txt: ../../HISTORY.txt | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Version Numbering | 
						
						
						
							|  |  | ================= | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Docutils version numbering uses a ``major.minor.micro`` scheme (x.y.z; | 
						
						
						
							|  |  | for example, 0.4.1). | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | **Major releases** (x.0, e.g. 1.0) will be rare, and will represent major | 
						
						
						
							|  |  | changes in API, functionality, or commitment.  When Docutils reaches version | 
						
						
						
							|  |  | 1.0, the major APIs will be considered frozen and backward compatibility | 
						
						
						
							|  |  | will become of paramount importance. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Releases that change the minor number (x.y, e.g. 0.5) will be | 
						
						
						
							|  |  | **feature releases**; new features from the `Docutils core`_ will be | 
						
						
						
							|  |  | included. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Releases that change the micro number (x.y.z, e.g. 0.4.1) will be | 
						
						
						
							|  |  | **bug-fix releases**.  No new features will be introduced in these | 
						
						
						
							|  |  | releases; only bug fixes will be included. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | This policy was adopted in October 2005, and will take effect with | 
						
						
						
							|  |  | Docutils version 0.4.  Prior to version 0.4, Docutils didn't have an | 
						
						
						
							|  |  | official version numbering policy, and micro releases contained both | 
						
						
						
							|  |  | bug fixes and new features. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | See also the `Docutils Release Procedure`_, `docutils.__version__` and | 
						
						
						
							|  |  | `docutils.__version_info__`. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _Docutils Release Procedure: release.html#version-numbers | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Snapshots | 
						
						
						
							|  |  | ========= | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Snapshot tarballs can be downloaded from the repository (see the "download | 
						
						
						
							|  |  | snapshot" button in the head of the code listing table). | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * the `Docutils core`_, representing the current cutting-edge state of | 
						
						
						
							|  |  |   development; | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * the `sandbox directory`_ with contributed projects and extensions from | 
						
						
						
							|  |  |   `the Sandbox`_; | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. * maintenance branches, for bug fixes; | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |    TODO: do we have active maintenance branches? | 
						
						
						
							|  |  |    (the only branch looking like a maintenance branch is | 
						
						
						
							|  |  |    http://sourceforge.net/p/docutils/code/HEAD/tree/branches/docutils-0.4) | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * `development branches`_, representing ongoing development efforts to bring | 
						
						
						
							|  |  |   new features into Docutils. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _Docutils core: | 
						
						
						
							|  |  |    http://sourceforge.net/p/docutils/code/HEAD/tree/trunk/docutils | 
						
						
						
							|  |  | .. _development branches: | 
						
						
						
							|  |  |    http://sourceforge.net/p/docutils/code/HEAD/tree/branches/ | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Setting Up For Docutils Development | 
						
						
						
							|  |  | =================================== | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | When making changes to the code, testing is a must.  The code should | 
						
						
						
							|  |  | be run to verify that it produces the expected results, and the entire | 
						
						
						
							|  |  | test suite should be run too.  The modified Docutils code has to be | 
						
						
						
							|  |  | accessible to Python for the tests to have any meaning.  There are two | 
						
						
						
							|  |  | ways to keep the Docutils code accessible during development: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | 1. Update your ``PYTHONPATH`` environment variable so that Python | 
						
						
						
							|  |  |    picks up your local working copy of the code.  This is the | 
						
						
						
							|  |  |    recommended method. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |    We'll assume that the Docutils trunk is checked out under your | 
						
						
						
							|  |  |    ~/projects/ directory as follows:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |        svn co https://<user>@docutils.svn.sourceforge.net/svnroot/docutils/trunk \ | 
						
						
						
							|  |  |            docutils | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |    For the bash shell, add this to your ``~/.profile``:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |        PYTHONPATH=$HOME/projects/docutils/docutils | 
						
						
						
							|  |  |        PYTHONPATH=$PYTHONPATH:$HOME/projects/docutils/docutils/extras | 
						
						
						
							|  |  |        export PYTHONPATH | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |    The first line points to the directory containing the ``docutils`` | 
						
						
						
							|  |  |    package.  The second line adds the directory containing the | 
						
						
						
							|  |  |    third-party modules Docutils depends on.  The third line exports | 
						
						
						
							|  |  |    this environment variable.  You may also wish to add the ``tools`` | 
						
						
						
							|  |  |    directory to your ``PATH``:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |        PATH=$PATH:$HOME/projects/docutils/docutils/tools | 
						
						
						
							|  |  |        export PATH | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | 2. Before you run anything, every time you make a change, reinstall | 
						
						
						
							|  |  |    Docutils:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |        python setup.py install | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |    .. CAUTION:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       This method is **not** recommended for day-to-day development; | 
						
						
						
							|  |  |       it's too easy to forget.  Confusion inevitably ensues. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |       If you install Docutils this way, Python will always pick up the | 
						
						
						
							|  |  |       last-installed copy of the code.  If you ever forget to | 
						
						
						
							|  |  |       reinstall the "docutils" package, Python won't see your latest | 
						
						
						
							|  |  |       changes. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | A useful addition to the ``docutils`` top-level directory in branches | 
						
						
						
							|  |  | and alternate copies of the code is a ``set-PATHS`` file | 
						
						
						
							|  |  | containing the following lines:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |     # source this file | 
						
						
						
							|  |  |     export PYTHONPATH=$PWD:$PWD/extras | 
						
						
						
							|  |  |     export PATH=$PWD/tools:$PATH | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Open a shell for this branch, ``cd`` to the ``docutils`` top-level | 
						
						
						
							|  |  | directory, and "source" this file.  For example, using the bash | 
						
						
						
							|  |  | shell:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |     $ cd some-branch/docutils | 
						
						
						
							|  |  |     $ . set-PATHS | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Mailing Lists | 
						
						
						
							|  |  | ============= | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Developers are recommended to subscribe to all `Docutils mailing | 
						
						
						
							|  |  | lists`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _Docutils mailing lists: ../user/mailing-lists.html | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The Wiki | 
						
						
						
							|  |  | ======== | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | There is a development wiki at http://docutils.python-hosting.com/ as | 
						
						
						
							|  |  | a scratchpad for transient notes.  Please use the repository for | 
						
						
						
							|  |  | permament document storage. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Extensions and Related Projects | 
						
						
						
							|  |  | =============================== | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The Sandbox | 
						
						
						
							|  |  | ----------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | The `sandbox directory`_ is a place to play around, to try out and | 
						
						
						
							|  |  | share ideas.  It's a part of the Subversion repository but it isn't | 
						
						
						
							|  |  | distributed as part of Docutils releases.  Feel free to check in code | 
						
						
						
							|  |  | to the sandbox; that way people can try it out but you won't have to | 
						
						
						
							|  |  | worry about it working 100% error-free, as is the goal of the Docutils | 
						
						
						
							|  |  | core.  A project-specific subdirectory should be created for each new | 
						
						
						
							|  |  | project.  Any developer who wants to play in the sandbox may do so, | 
						
						
						
							|  |  | but project directories are recommended over personal directories, | 
						
						
						
							|  |  | which discourage collaboration.  It's OK to make a mess in the | 
						
						
						
							|  |  | sandbox!  But please, play nice. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Please update the `sandbox README`_ file with links and a brief | 
						
						
						
							|  |  | description of your work. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | In order to minimize the work necessary for others to install and try | 
						
						
						
							|  |  | out new, experimental components, the following sandbox directory | 
						
						
						
							|  |  | structure is recommended:: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |     sandbox/ | 
						
						
						
							|  |  |         project_name/ # For a collaborative project. | 
						
						
						
							|  |  |             README.txt  # Describe the requirements, purpose/goals, usage, | 
						
						
						
							|  |  |                         # and list the maintainers. | 
						
						
						
							|  |  |             docs/ | 
						
						
						
							|  |  |                 ... | 
						
						
						
							|  |  |             component.py    # The component is a single module. | 
						
						
						
							|  |  |                             # *OR* (but *not* both) | 
						
						
						
							|  |  |             component/      # The component is a package. | 
						
						
						
							|  |  |                 __init__.py  # Contains the Reader/Writer class. | 
						
						
						
							|  |  |                 other1.py    # Other modules and data files used | 
						
						
						
							|  |  |                 data.txt     # by this component. | 
						
						
						
							|  |  |                 ... | 
						
						
						
							|  |  |             test/       # Test suite. | 
						
						
						
							|  |  |                 ... | 
						
						
						
							|  |  |             tools/      # For front ends etc. | 
						
						
						
							|  |  |                 ... | 
						
						
						
							|  |  |             setup.py    # Use Distutils to install the component | 
						
						
						
							|  |  |                         # code and tools/ files into the right | 
						
						
						
							|  |  |                         # places in Docutils. | 
						
						
						
							|  |  |         userid/       # For *temporary* personal space. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Some sandbox projects are destined to move to the Docutils core once | 
						
						
						
							|  |  | completed.  Others, such as add-ons to Docutils or applications of | 
						
						
						
							|  |  | Docutils, may graduate to become `parallel projects`_. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _sandbox README: http://docutils.sf.net/sandbox/README.html | 
						
						
						
							|  |  | .. _sandbox directory: | 
						
						
						
							|  |  |    http://sourceforge.net/p/docutils/code/HEAD/tree/trunk/sandbox/ | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _parallel project: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Parallel Projects | 
						
						
						
							|  |  | ----------------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Parallel projects contain useful code that is not central to the | 
						
						
						
							|  |  | functioning of Docutils.  Examples are specialized add-ons or | 
						
						
						
							|  |  | plug-ins, and applications of Docutils.  They use Docutils, but | 
						
						
						
							|  |  | Docutils does not require their presence to function. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | An official parallel project will have its own directory beside (or | 
						
						
						
							|  |  | parallel to) the main ``docutils`` directory in the Subversion | 
						
						
						
							|  |  | repository.  It can have its own web page in the | 
						
						
						
							|  |  | docutils.sourceforge.net domain, its own file releases and | 
						
						
						
							|  |  | downloadable snapshots, and even a mailing list if that proves useful. | 
						
						
						
							|  |  | However, an official parallel project has implications: it is expected | 
						
						
						
							|  |  | to be maintained and continue to work with changes to the core | 
						
						
						
							|  |  | Docutils. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | A parallel project requires a project leader, who must commit to | 
						
						
						
							|  |  | coordinate and maintain the implementation: | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | * Answer questions from users and developers. | 
						
						
						
							|  |  | * Review suggestions, bug reports, and patches. | 
						
						
						
							|  |  | * Monitor changes and ensure the quality of the code and | 
						
						
						
							|  |  |   documentation. | 
						
						
						
							|  |  | * Coordinate with Docutils to ensure interoperability. | 
						
						
						
							|  |  | * Put together official project releases. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Of course, related projects may be created independently of Docutils. | 
						
						
						
							|  |  | The advantage of a parallel project is that the SourceForge | 
						
						
						
							|  |  | environment and the developer and user communities are already | 
						
						
						
							|  |  | established.  Core Docutils developers are available for consultation | 
						
						
						
							|  |  | and may contribute to the parallel project.  It's easier to keep the | 
						
						
						
							|  |  | projects in sync when there are changes made to the core Docutils | 
						
						
						
							|  |  | code. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Other related projects | 
						
						
						
							|  |  | ---------------------- | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | Many related but independent projects are listed in the Docutils | 
						
						
						
							|  |  | `link list`_. If you want your project to appear there, drop a note at | 
						
						
						
							|  |  | the Docutils-develop_ mailing list. | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. _link list: http://docutils.sourceforge.net/docs/user/links.html | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  |  | 
						
						
						
							|  |  | .. | 
						
						
						
							|  |  |    Local Variables: | 
						
						
						
							|  |  |    mode: indented-text | 
						
						
						
							|  |  |    indent-tabs-mode: nil | 
						
						
						
							|  |  |    sentence-end-double-space: t | 
						
						
						
							|  |  |    fill-column: 70 | 
						
						
						
							|  |  |    End:
 | 
						
						
						
							|  |  | 
 |