|
|
|
|
===========================
|
|
|
|
|
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:
|