summaryrefslogtreecommitdiff
path: root/doc/contributing.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/contributing.rst')
-rw-r--r--doc/contributing.rst166
1 files changed, 166 insertions, 0 deletions
diff --git a/doc/contributing.rst b/doc/contributing.rst
new file mode 100644
index 00000000..273d06d0
--- /dev/null
+++ b/doc/contributing.rst
@@ -0,0 +1,166 @@
+.. _contributing:
+
+===========================
+Contributing to coverage.py
+===========================
+
+:history: 20121112T154100, brand new docs.
+
+I welcome contributions to coverage.py. Over the years, dozens of people have
+provided patches of various sizes to add features or fix bugs. This page
+should have all the information you need to make a contribution.
+
+One source of history or ideas are the `bug reports`_ against coverage.py.
+There you can find ideas for requested features, or the remains of rejected
+ideas.
+
+.. _bug reports: https://bitbucket.org/ned/coveragepy/issues?status=new&status=open
+
+
+Before you begin
+----------------
+
+If you have an idea for coverage.py, run it by me before you begin writing
+code. This way, I can get you going in the right direction, or point you to
+previous work in the area. Things are not always as straightforward as they
+seem, and having the benefit of lessons learned by those before you can save
+you frustration.
+
+
+Getting the code
+----------------
+
+The coverage.py code is hosted on a `Mercurial`_ repository at
+https://bitbucket.org/ned/coveragepy. To get a working environment, follow
+these steps:
+
+#. (Optional, but recommended) Create a virtualenv to work in, and activate
+ it.
+
+#. Clone the repo:
+
+ .. code-block:: console
+
+ $ hg clone https://bitbucket.org/ned/coveragepy
+
+#. Install the requirements:
+
+ .. code-block:: console
+
+ $ pip install -r requirements.txt
+
+#. Install a number of versions of Python. Coverage.py supports a wide range
+ of Python versions. The more you can test with, the more easily your code
+ can be used as-is. If you only have one version, that's OK too, but may
+ mean more work integrating your contribution.
+
+
+Running the tests
+-----------------
+
+The tests are written as standard unittest-style tests, and are run with
+`tox`_:
+
+ .. code-block:: console
+
+ $ tox
+ GLOB sdist-make: /home/ned/coverage/setup.py
+ py25 sdist-reinst: /home/ned/coverage/tox/dist/coverage-3.5.4b1.zip
+ py25 runtests: commands[0]
+ py25 runtests: commands[1]
+ py25 runtests: commands[2]
+ py25 runtests: commands[3]
+ py25 runtests: commands[4]
+ === Python 2.5.5 with Python tracer (/home/ned/coverage/tox/py25/bin/python) ===
+ ...........................................................................................(etc)
+ ----------------------------------------------------------------------
+ Ran 360 tests in 10.836s
+
+ OK
+ py25 runtests: commands[5]
+ py25 runtests: commands[6]
+ === Python 2.5.5 with C tracer (/home/ned/coverage/tox/py25/bin/python) ===
+ ...........................................................................................(etc)
+ ----------------------------------------------------------------------
+ Ran 360 tests in 10.044s
+
+ OK
+ py26 sdist-reinst: /home/ned/coverage/trunk/.tox/dist/coverage-3.5.4b1.zip
+ py26 runtests: commands[0]
+ py26 runtests: commands[1]
+ py26 runtests: commands[2]
+ py26 runtests: commands[3]
+ py26 runtests: commands[4]
+ === CPython 2.6.6 with Python tracer (/home/ned/coverage/tox/py26/bin/python) ===
+ ...........................................................................................(etc)
+ ----------------------------------------------------------------------
+ Ran 364 tests in 12.572s
+
+ OK
+ py26 runtests: commands[5]
+ py26 runtests: commands[6]
+ === CPython 2.6.6 with C tracer (/home/ned/coverage/tox/py26/bin/python) ===
+ ...........................................................................................(etc)
+ ----------------------------------------------------------------------
+ Ran 364 tests in 11.458s
+
+ OK
+ (and so on...)
+
+Tox runs the complete test suite twice for each version of Python you have
+installed. The first run uses the Python implementation of the trace
+function, the second uses the C implementation.
+
+To limit tox to just a few versions of Python, use the ``-e`` switch:
+
+ .. code-block:: console
+
+ $ tox -e py27,py33
+
+To run just a few tests, you can use nose test selector syntax:
+
+ .. code-block:: console
+
+ $ tox test.test_misc:SetupPyTest.test_metadata
+
+This looks in `test/test_misc.py` to find the `SetupPyTest` class, and runs the
+`test_metadata` test method.
+
+Of course, run all the tests on every version of Python you have, before
+submitting a change.
+
+
+Lint, etc
+---------
+
+I try to keep the coverage.py as clean as possible. I use pylint to alert me
+to possible problems:
+
+ .. code-block:: console
+
+ $ make lint
+ pylint --rcfile=.pylintrc coverage setup.py test
+ ************* Module coverage.collector
+ F0401: 7,4: Unable to import 'coverage.tracer'
+ E0611: 7,4: No name 'tracer' in module 'coverage'
+ ************* Module coverage.parser
+ W0631:532,32:ByteParser._split_into_chunks: Using possibly undefined loop variable 'bc'
+ W0631:579,40:ByteParser._arcs: Using possibly undefined loop variable 'ch'
+ make: [lint] Error 7 (ignored)
+ python -m tabnanny coverage setup.py test
+ python igor.py check_eol
+
+As you can see, a few warnings persist, don't worry about them. But clean up
+any ones you may be responsible for.
+
+
+Contributing
+------------
+
+When you are ready to contribute a change, any way you can get it to me is
+probably fine. A pull request on Bitbucket is great, but a simple diff or
+patch is great too.
+
+
+.. _Mercurial: http://mercurial.selenic.com/
+.. _tox: http://tox.testrun.org/