OLD | NEW |
| (Empty) |
1 .. _contributing: | |
2 | |
3 =========================== | |
4 Contributing to coverage.py | |
5 =========================== | |
6 | |
7 :history: 20121112T154100, brand new docs. | |
8 | |
9 .. highlight:: console | |
10 | |
11 I welcome contributions to coverage.py. Over the years, dozens of people have | |
12 provided patches of various sizes to add features or fix bugs. This page | |
13 should have all the information you need to make a contribution. | |
14 | |
15 One source of history or ideas are the `bug reports`_ against coverage.py. | |
16 There you can find ideas for requested features, or the remains of rejected | |
17 ideas. | |
18 | |
19 .. _bug reports: https://bitbucket.org/ned/coveragepy/issues?status=new&status=o
pen | |
20 | |
21 | |
22 Before you begin | |
23 ---------------- | |
24 | |
25 If you have an idea for coverage.py, run it by me before you begin writing | |
26 code. This way, I can get you going in the right direction, or point you to | |
27 previous work in the area. Things are not always as straightforward as they | |
28 seem, and having the benefit of lessons learned by those before you can save | |
29 you frustration. | |
30 | |
31 | |
32 Getting the code | |
33 ---------------- | |
34 | |
35 The coverage.py code is hosted on a `Mercurial`_ repository at | |
36 https://bitbucket.org/ned/coveragepy. To get a working environment, follow | |
37 these steps: | |
38 | |
39 #. (Optional, but recommended) Create a virtualenv to work in, and activate | |
40 it. | |
41 | |
42 #. Clone the repo:: | |
43 | |
44 $ hg clone https://bitbucket.org/ned/coveragepy | |
45 | |
46 #. Install the requirements:: | |
47 | |
48 $ pip install -r requirements.txt | |
49 | |
50 #. Install a number of versions of Python. Coverage.py supports a wide range | |
51 of Python versions. The more you can test with, the more easily your code | |
52 can be used as-is. If you only have one version, that's OK too, but may | |
53 mean more work integrating your contribution. | |
54 | |
55 | |
56 Running the tests | |
57 ----------------- | |
58 | |
59 The tests are written as standard unittest-style tests, and are run with | |
60 `tox`_:: | |
61 | |
62 $ tox | |
63 GLOB sdist-make: /home/ned/coverage/setup.py | |
64 py25 sdist-reinst: /home/ned/coverage/tox/dist/coverage-3.6b1.zip | |
65 py25 runtests: commands[0] | |
66 py25 runtests: commands[1] | |
67 py25 runtests: commands[2] | |
68 py25 runtests: commands[3] | |
69 py25 runtests: commands[4] | |
70 === Python 2.5.5 with Python tracer (/home/ned/coverage/tox/py25/bin/python)
=== | |
71 ............................................................................
...............(etc) | |
72 ---------------------------------------------------------------------- | |
73 Ran 360 tests in 10.836s | |
74 | |
75 OK | |
76 py25 runtests: commands[5] | |
77 py25 runtests: commands[6] | |
78 === Python 2.5.5 with C tracer (/home/ned/coverage/tox/py25/bin/python) === | |
79 ............................................................................
...............(etc) | |
80 ---------------------------------------------------------------------- | |
81 Ran 360 tests in 10.044s | |
82 | |
83 OK | |
84 py26 sdist-reinst: /home/ned/coverage/trunk/.tox/dist/coverage-3.6b1.zip | |
85 py26 runtests: commands[0] | |
86 py26 runtests: commands[1] | |
87 py26 runtests: commands[2] | |
88 py26 runtests: commands[3] | |
89 py26 runtests: commands[4] | |
90 === CPython 2.6.6 with Python tracer (/home/ned/coverage/tox/py26/bin/python
) === | |
91 ............................................................................
...............(etc) | |
92 ---------------------------------------------------------------------- | |
93 Ran 364 tests in 12.572s | |
94 | |
95 OK | |
96 py26 runtests: commands[5] | |
97 py26 runtests: commands[6] | |
98 === CPython 2.6.6 with C tracer (/home/ned/coverage/tox/py26/bin/python) === | |
99 ............................................................................
...............(etc) | |
100 ---------------------------------------------------------------------- | |
101 Ran 364 tests in 11.458s | |
102 | |
103 OK | |
104 (and so on...) | |
105 | |
106 Tox runs the complete test suite twice for each version of Python you have | |
107 installed. The first run uses the Python implementation of the trace | |
108 function, the second uses the C implementation. | |
109 | |
110 To limit tox to just a few versions of Python, use the ``-e`` switch:: | |
111 | |
112 $ tox -e py27,py33 | |
113 | |
114 To run just a few tests, you can use nose test selector syntax:: | |
115 | |
116 $ tox test.test_misc:SetupPyTest.test_metadata | |
117 | |
118 This looks in `test/test_misc.py` to find the `SetupPyTest` class, and runs the | |
119 `test_metadata` test method. | |
120 | |
121 Of course, run all the tests on every version of Python you have, before | |
122 submitting a change. | |
123 | |
124 | |
125 Lint, etc | |
126 --------- | |
127 | |
128 I try to keep the coverage.py as clean as possible. I use pylint to alert me | |
129 to possible problems:: | |
130 | |
131 $ make lint | |
132 pylint --rcfile=.pylintrc coverage setup.py test | |
133 python -m tabnanny coverage setup.py test | |
134 python igor.py check_eol | |
135 | |
136 The source is pylint-clean, even if it's because there are pragmas quieting | |
137 some warnings. Please try to keep it that way, but don't let pylint warnings | |
138 keep you from sending patches. I can clean them up. | |
139 | |
140 | |
141 Coverage testing coverage.py | |
142 ---------------------------- | |
143 | |
144 Coverage.py can measure itself, but it's complicated. The process has been | |
145 packaged up to make it easier:: | |
146 | |
147 $ COVERAGE_COVERAGE=yes tox | |
148 $ python igor.py combine_html | |
149 | |
150 Then look at htmlcov/index.html. Note that due to the recursive nature of | |
151 coverage.py measuring itself, there are some parts of the code that will never | |
152 appear as covered, even though they are executed. | |
153 | |
154 | |
155 Contributing | |
156 ------------ | |
157 | |
158 When you are ready to contribute a change, any way you can get it to me is | |
159 probably fine. A pull request on Bitbucket is great, but a simple diff or | |
160 patch is great too. | |
161 | |
162 | |
163 .. _Mercurial: http://mercurial.selenic.com/ | |
164 .. _tox: http://tox.testrun.org/ | |
OLD | NEW |