• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1.. Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
2.. For details: https://bitbucket.org/ned/coveragepy/src/default/NOTICE.txt
3
4==============================
5Change history for Coverage.py
6==============================
7
8
9Version 4.0.3, 24 November 2015
10-------------------------------
11
12- Fixed a mysterious problem that manifested in different ways: sometimes
13  hanging the process (`issue 420`_), sometimes making database connections
14  fail (`issue 445`_).
15
16- The XML report now has correct ``<source>`` elements when using a
17  ``--source=`` option somewhere besides the current directory.  This fixes
18  `issue 439`_. Thanks, Arcady Ivanov.
19
20- Fixed an unusual edge case of detecting source encodings, described in
21  `issue 443`_.
22
23- Help messages that mention the command to use now properly use the actual
24  command name, which might be different than "coverage".  Thanks to Ben Finney,
25  this closes `issue 438`_.
26
27.. _issue 420: https://bitbucket.org/ned/coveragepy/issues/420/coverage-40-hangs-indefinitely-on-python27
28.. _issue 438: https://bitbucket.org/ned/coveragepy/issues/438/parameterise-coverage-command-name
29.. _issue 439: https://bitbucket.org/ned/coveragepy/issues/439/incorrect-cobertura-file-sources-generated
30.. _issue 443: https://bitbucket.org/ned/coveragepy/issues/443/coverage-gets-confused-when-encoding
31.. _issue 445: https://bitbucket.org/ned/coveragepy/issues/445/django-app-cannot-connect-to-cassandra
32
33
34Version 4.0.2 --- 4 November 2015
35---------------------------------
36
37- More work on supporting unusually encoded source. Fixed `issue 431`_.
38
39- Files or directories with non-ASCII characters are now handled properly,
40  fixing `issue 432`_.
41
42- Setting a trace function with sys.settrace was broken by a change in 4.0.1,
43  as reported in `issue 436`_.  This is now fixed.
44
45- Officially support PyPy 4.0, which required no changes, just updates to the
46  docs.
47
48.. _issue 431: https://bitbucket.org/ned/coveragepy/issues/431/couldnt-parse-python-file-with-cp1252
49.. _issue 432: https://bitbucket.org/ned/coveragepy/issues/432/path-with-unicode-characters-various
50.. _issue 436: https://bitbucket.org/ned/coveragepy/issues/436/disabled-coverage-ctracer-may-rise-from
51
52
53Version 4.0.1 --- 13 October 2015
54---------------------------------
55
56- When combining data files, unreadable files will now generate a warning
57  instead of failing the command.  This is more in line with the older
58  coverage.py v3.7.1 behavior, which silently ignored unreadable files.
59  Prompted by `issue 418`_.
60
61- The --skip-covered option would skip reporting on 100% covered files, but
62  also skipped them when calculating total coverage.  This was wrong, it should
63  only remove lines from the report, not change the final answer.  This is now
64  fixed, closing `issue 423`_.
65
66- In 4.0, the data file recorded a summary of the system on which it was run.
67  Combined data files would keep all of those summaries.  This could lead to
68  enormous data files consisting of mostly repetitive useless information. That
69  summary is now gone, fixing `issue 415`_.  If you want summary information,
70  get in touch, and we'll figure out a better way to do it.
71
72- Test suites that mocked os.path.exists would experience strange failures, due
73  to coverage.py using their mock inadvertently.  This is now fixed, closing
74  `issue 416`_.
75
76- Importing a ``__init__`` module explicitly would lead to an error:
77  ``AttributeError: 'module' object has no attribute '__path__'``, as reported
78  in `issue 410`_.  This is now fixed.
79
80- Code that uses ``sys.settrace(sys.gettrace())`` used to incur a more than 2x
81  speed penalty.  Now there's no penalty at all. Fixes `issue 397`_.
82
83- Pyexpat C code will no longer be recorded as a source file, fixing
84  `issue 419`_.
85
86- The source kit now contains all of the files needed to have a complete source
87  tree, re-fixing `issue 137`_ and closing `issue 281`_.
88
89.. _issue 281: https://bitbucket.org/ned/coveragepy/issues/281/supply-scripts-for-testing-in-the
90.. _issue 397: https://bitbucket.org/ned/coveragepy/issues/397/stopping-and-resuming-coverage-with
91.. _issue 410: https://bitbucket.org/ned/coveragepy/issues/410/attributeerror-module-object-has-no
92.. _issue 415: https://bitbucket.org/ned/coveragepy/issues/415/repeated-coveragedataupdates-cause
93.. _issue 416: https://bitbucket.org/ned/coveragepy/issues/416/mocking-ospathexists-causes-failures
94.. _issue 418: https://bitbucket.org/ned/coveragepy/issues/418/json-parse-error
95.. _issue 419: https://bitbucket.org/ned/coveragepy/issues/419/nosource-no-source-for-code-path-to-c
96.. _issue 423: https://bitbucket.org/ned/coveragepy/issues/423/skip_covered-changes-reported-total
97
98
99Version 4.0 --- 20 September 2015
100---------------------------------
101
102No changes from 4.0b3
103
104
105Version 4.0b3 --- 7 September 2015
106----------------------------------
107
108- Reporting on an unmeasured file would fail with a traceback.  This is now
109  fixed, closing `issue 403`_.
110
111- The Jenkins ShiningPanda plugin looks for an obsolete file name to find the
112  HTML reports to publish, so it was failing under coverage.py 4.0.  Now we
113  create that file if we are running under Jenkins, to keep things working
114  smoothly. `issue 404`_.
115
116- Kits used to include tests and docs, but didn't install them anywhere, or
117  provide all of the supporting tools to make them useful.  Kits no longer
118  include tests and docs.  If you were using them from the older packages, get
119  in touch and help me understand how.
120
121.. _issue 403: https://bitbucket.org/ned/coveragepy/issues/403/hasherupdate-fails-with-typeerror-nonetype
122.. _issue 404: https://bitbucket.org/ned/coveragepy/issues/404/shiningpanda-jenkins-plugin-cant-find-html
123
124
125
126Version 4.0b2 --- 22 August 2015
127--------------------------------
128
129- 4.0b1 broke --append creating new data files.  This is now fixed, closing
130  `issue 392`_.
131
132- ``py.test --cov`` can write empty data, then touch files due to ``--source``,
133  which made coverage.py mistakenly force the data file to record lines instead
134  of arcs.  This would lead to a "Can't combine line data with arc data" error
135  message.  This is now fixed, and changed some method names in the
136  CoverageData interface.  Fixes `issue 399`_.
137
138- `CoverageData.read_fileobj` and `CoverageData.write_fileobj` replace the
139  `.read` and `.write` methods, and are now properly inverses of each other.
140
141- When using ``report --skip-covered``, a message will now be included in the
142  report output indicating how many files were skipped, and if all files are
143  skipped, coverage.py won't accidentally scold you for having no data to
144  report.  Thanks, Krystian Kichewko.
145
146- A new conversion utility has been added:  ``python -m coverage.pickle2json``
147  will convert v3.x pickle data files to v4.x JSON data files.  Thanks,
148  Alexander Todorov.  Closes `issue 395`_.
149
150- A new version identifier is available, `coverage.version_info`, a plain tuple
151  of values similar to `sys.version_info`_.
152
153.. _issue 392: https://bitbucket.org/ned/coveragepy/issues/392/run-append-doesnt-create-coverage-file
154.. _issue 395: https://bitbucket.org/ned/coveragepy/issues/395/rfe-read-pickled-files-as-well-for
155.. _issue 399: https://bitbucket.org/ned/coveragepy/issues/399/coverageexception-cant-combine-line-data
156.. _sys.version_info: https://docs.python.org/3/library/sys.html#sys.version_info
157
158
159Version 4.0b1 --- 2 August 2015
160-------------------------------
161
162- Coverage.py is now licensed under the Apache 2.0 license.  See NOTICE.txt for
163  details.  Closes `issue 313`_.
164
165- The data storage has been completely revamped.  The data file is now
166  JSON-based instead of a pickle, closing `issue 236`_.  The `CoverageData`
167  class is now a public supported documented API to the data file.
168
169- A new configuration option, ``[run] note``, lets you set a note that will be
170  stored in the `runs` section of the data file.  You can use this to annotate
171  the data file with any information you like.
172
173- Unrecognized configuration options will now print an error message and stop
174  coverage.py.  This should help prevent configuration mistakes from passing
175  silently.  Finishes `issue 386`_.
176
177- In parallel mode, ``coverage erase`` will now delete all of the data files,
178  fixing `issue 262`_.
179
180- Coverage.py now accepts a directory name for ``coverage run`` and will run a
181  ``__main__.py`` found there, just like Python will.  Fixes `issue 252`_.
182  Thanks, Dmitry Trofimov.
183
184- The XML report now includes a ``missing-branches`` attribute.  Thanks, Steve
185  Peak.  This is not a part of the Cobertura DTD, so the XML report no longer
186  references the DTD.
187
188- Missing branches in the HTML report now have a bit more information in the
189  right-hand annotations.  Hopefully this will make their meaning clearer.
190
191- All the reporting functions now behave the same if no data had been
192  collected, exiting with a status code of 1.  Fixed ``fail_under`` to be
193  applied even when the report is empty.  Thanks, Ionel Cristian Mărieș.
194
195- Plugins are now initialized differently.  Instead of looking for a class
196  called ``Plugin``, coverage.py looks for a function called ``coverage_init``.
197
198- A file-tracing plugin can now ask to have built-in Python reporting by
199  returning `"python"` from its `file_reporter()` method.
200
201- Code that was executed with `exec` would be mis-attributed to the file that
202  called it.  This is now fixed, closing `issue 380`_.
203
204- The ability to use item access on `Coverage.config` (introduced in 4.0a2) has
205  been changed to a more explicit `Coverage.get_option` and
206  `Coverage.set_option` API.
207
208- The ``Coverage.use_cache`` method is no longer supported.
209
210- The private method ``Coverage._harvest_data`` is now called
211  ``Coverage.get_data``, and returns the ``CoverageData`` containing the
212  collected data.
213
214- The project is consistently referred to as "coverage.py" throughout the code
215  and the documentation, closing `issue 275`_.
216
217- Combining data files with an explicit configuration file was broken in 4.0a6,
218  but now works again, closing `issue 385`_.
219
220- ``coverage combine`` now accepts files as well as directories.
221
222- The speed is back to 3.7.1 levels, after having slowed down due to plugin
223  support, finishing up `issue 387`_.
224
225.. _issue 236: https://bitbucket.org/ned/coveragepy/issues/236/pickles-are-bad-and-you-should-feel-bad
226.. _issue 252: https://bitbucket.org/ned/coveragepy/issues/252/coverage-wont-run-a-program-with
227.. _issue 262: https://bitbucket.org/ned/coveragepy/issues/262/when-parallel-true-erase-should-erase-all
228.. _issue 275: https://bitbucket.org/ned/coveragepy/issues/275/refer-consistently-to-project-as-coverage
229.. _issue 313: https://bitbucket.org/ned/coveragepy/issues/313/add-license-file-containing-2-3-or-4
230.. _issue 380: https://bitbucket.org/ned/coveragepy/issues/380/code-executed-by-exec-excluded-from
231.. _issue 385: https://bitbucket.org/ned/coveragepy/issues/385/coverage-combine-doesnt-work-with-rcfile
232.. _issue 386: https://bitbucket.org/ned/coveragepy/issues/386/error-on-unrecognised-configuration
233.. _issue 387: https://bitbucket.org/ned/coveragepy/issues/387/performance-degradation-from-371-to-40
234
235.. 40 issues closed in 4.0 below here
236
237
238Version 4.0a6 --- 21 June 2015
239------------------------------
240
241- Python 3.5b2 and PyPy 2.6.0 are supported.
242
243- The original module-level function interface to coverage.py is no longer
244  supported.  You must now create a ``coverage.Coverage`` object, and use
245  methods on it.
246
247- The ``coverage combine`` command now accepts any number of directories as
248  arguments, and will combine all the data files from those directories.  This
249  means you don't have to copy the files to one directory before combining.
250  Thanks, Christine Lytwynec.  Finishes `issue 354`_.
251
252- Branch coverage couldn't properly handle certain extremely long files. This
253  is now fixed (`issue 359`_).
254
255- Branch coverage didn't understand yield statements properly.  Mickie Betz
256  persisted in pursuing this despite Ned's pessimism.  Fixes `issue 308`_ and
257  `issue 324`_.
258
259- The COVERAGE_DEBUG environment variable can be used to set the ``[run] debug``
260  configuration option to control what internal operations are logged.
261
262- HTML reports were truncated at formfeed characters.  This is now fixed
263  (`issue 360`_).  It's always fun when the problem is due to a `bug in the
264  Python standard library <http://bugs.python.org/issue19035>`_.
265
266- Files with incorrect encoding declaration comments are no longer ignored by
267  the reporting commands, fixing `issue 351`_.
268
269- HTML reports now include a timestamp in the footer, closing `issue 299`_.
270  Thanks, Conrad Ho.
271
272- HTML reports now begrudgingly use double-quotes rather than single quotes,
273  because there are "software engineers" out there writing tools that read HTML
274  and somehow have no idea that single quotes exist.  Capitulates to the absurd
275  `issue 361`_.  Thanks, Jon Chappell.
276
277- The ``coverage annotate`` command now handles non-ASCII characters properly,
278  closing `issue 363`_.  Thanks, Leonardo Pistone.
279
280- Drive letters on Windows were not normalized correctly, now they are. Thanks,
281  Ionel Cristian Mărieș.
282
283- Plugin support had some bugs fixed, closing `issue 374`_ and `issue 375`_.
284  Thanks, Stefan Behnel.
285
286.. _issue 299: https://bitbucket.org/ned/coveragepy/issue/299/inserted-created-on-yyyy-mm-dd-hh-mm-in
287.. _issue 308: https://bitbucket.org/ned/coveragepy/issue/308/yield-lambda-branch-coverage
288.. _issue 324: https://bitbucket.org/ned/coveragepy/issue/324/yield-in-loop-confuses-branch-coverage
289.. _issue 351: https://bitbucket.org/ned/coveragepy/issue/351/files-with-incorrect-encoding-are-ignored
290.. _issue 354: https://bitbucket.org/ned/coveragepy/issue/354/coverage-combine-should-take-a-list-of
291.. _issue 359: https://bitbucket.org/ned/coveragepy/issue/359/xml-report-chunk-error
292.. _issue 360: https://bitbucket.org/ned/coveragepy/issue/360/html-reports-get-confused-by-l-in-the-code
293.. _issue 361: https://bitbucket.org/ned/coveragepy/issue/361/use-double-quotes-in-html-output-to
294.. _issue 363: https://bitbucket.org/ned/coveragepy/issue/363/annotate-command-hits-unicode-happy-fun
295.. _issue 374: https://bitbucket.org/ned/coveragepy/issue/374/c-tracer-lookups-fail-in
296.. _issue 375: https://bitbucket.org/ned/coveragepy/issue/375/ctracer_handle_return-reads-byte-code
297
298
299Version 4.0a5 --- 16 February 2015
300----------------------------------
301
302- Plugin support is now implemented in the C tracer instead of the Python
303  tracer. This greatly improves the speed of tracing projects using plugins.
304
305- Coverage.py now always adds the current directory to sys.path, so that
306  plugins can import files in the current directory (`issue 358`_).
307
308- If the `config_file` argument to the Coverage constructor is specified as
309  ".coveragerc", it is treated as if it were True.  This means setup.cfg is
310  also examined, and a missing file is not considered an error (`issue 357`_).
311
312- Wildly experimental: support for measuring processes started by the
313  multiprocessing module.  To use, set ``--concurrency=multiprocessing``,
314  either on the command line or in the .coveragerc file (`issue 117`_). Thanks,
315  Eduardo Schettino.  Currently, this does not work on Windows.
316
317- A new warning is possible, if a desired file isn't measured because it was
318  imported before coverage.py was started (`issue 353`_).
319
320- The `coverage.process_startup` function now will start coverage measurement
321  only once, no matter how many times it is called.  This fixes problems due
322  to unusual virtualenv configurations (`issue 340`_).
323
324- Added 3.5.0a1 to the list of supported CPython versions.
325
326.. _issue 117: https://bitbucket.org/ned/coveragepy/issue/117/enable-coverage-measurement-of-code-run-by
327.. _issue 340: https://bitbucket.org/ned/coveragepy/issue/340/keyerror-subpy
328.. _issue 353: https://bitbucket.org/ned/coveragepy/issue/353/40a3-introduces-an-unexpected-third-case
329.. _issue 357: https://bitbucket.org/ned/coveragepy/issue/357/behavior-changed-when-coveragerc-is
330.. _issue 358: https://bitbucket.org/ned/coveragepy/issue/358/all-coverage-commands-should-adjust
331
332
333Version 4.0a4 --- 25 January 2015
334---------------------------------
335
336- Plugins can now provide sys_info for debugging output.
337
338- Started plugins documentation.
339
340- Prepared to move the docs to readthedocs.org.
341
342
343Version 4.0a3 --- 20 January 2015
344---------------------------------
345
346- Reports now use file names with extensions.  Previously, a report would
347  describe a/b/c.py as "a/b/c".  Now it is shown as "a/b/c.py".  This allows
348  for better support of non-Python files, and also fixed `issue 69`_.
349
350- The XML report now reports each directory as a package again.  This was a bad
351  regression, I apologize.  This was reported in `issue 235`_, which is now
352  fixed.
353
354- A new configuration option for the XML report: ``[xml] package_depth``
355  controls which directories are identified as packages in the report.
356  Directories deeper than this depth are not reported as packages.
357  The default is that all directories are reported as packages.
358  Thanks, Lex Berezhny.
359
360- When looking for the source for a frame, check if the file exists. On
361  Windows, .pyw files are no longer recorded as .py files. Along the way, this
362  fixed `issue 290`_.
363
364- Empty files are now reported as 100% covered in the XML report, not 0%
365  covered (`issue 345`_).
366
367- Regexes in the configuration file are now compiled as soon as they are read,
368  to provide error messages earlier (`issue 349`_).
369
370.. _issue 69: https://bitbucket.org/ned/coveragepy/issue/69/coverage-html-overwrite-files-that-doesnt
371.. _issue 235: https://bitbucket.org/ned/coveragepy/issue/235/package-name-is-missing-in-xml-report
372.. _issue 290: https://bitbucket.org/ned/coveragepy/issue/290/running-programmatically-with-pyw-files
373.. _issue 345: https://bitbucket.org/ned/coveragepy/issue/345/xml-reports-line-rate-0-for-empty-files
374.. _issue 349: https://bitbucket.org/ned/coveragepy/issue/349/bad-regex-in-config-should-get-an-earlier
375
376
377Version 4.0a2 --- 14 January 2015
378---------------------------------
379
380- Officially support PyPy 2.4, and PyPy3 2.4.  Drop support for
381  CPython 3.2 and older versions of PyPy.  The code won't work on CPython 3.2.
382  It will probably still work on older versions of PyPy, but I'm not testing
383  against them.
384
385- Plugins!
386
387- The original command line switches (`-x` to run a program, etc) are no
388  longer supported.
389
390- A new option: `coverage report --skip-covered` will reduce the number of
391  files reported by skipping files with 100% coverage.  Thanks, Krystian
392  Kichewko.  This means that empty `__init__.py` files will be skipped, since
393  they are 100% covered, closing `issue 315`_.
394
395- You can now specify the ``--fail-under`` option in the ``.coveragerc`` file
396  as the ``[report] fail_under`` option.  This closes `issue 314`_.
397
398- The ``COVERAGE_OPTIONS`` environment variable is no longer supported.  It was
399  a hack for ``--timid`` before configuration files were available.
400
401- The HTML report now has filtering.  Type text into the Filter box on the
402  index page, and only modules with that text in the name will be shown.
403  Thanks, Danny Allen.
404
405- The textual report and the HTML report used to report partial branches
406  differently for no good reason.  Now the text report's "missing branches"
407  column is a "partial branches" column so that both reports show the same
408  numbers.  This closes `issue 342`_.
409
410- If you specify a ``--rcfile`` that cannot be read, you will get an error
411  message.  Fixes `issue 343`_.
412
413- The ``--debug`` switch can now be used on any command.
414
415- You can now programmatically adjust the configuration of coverage.py by
416  setting items on `Coverage.config` after construction.
417
418- A module run with ``-m`` can be used as the argument to ``--source``, fixing
419  `issue 328`_.  Thanks, Buck Evan.
420
421- The regex for matching exclusion pragmas has been fixed to allow more kinds
422  of whitespace, fixing `issue 334`_.
423
424- Made some PyPy-specific tweaks to improve speed under PyPy.  Thanks, Alex
425  Gaynor.
426
427- In some cases, with a source file missing a final newline, coverage.py would
428  count statements incorrectly.  This is now fixed, closing `issue 293`_.
429
430- The status.dat file that HTML reports use to avoid re-creating files that
431  haven't changed is now a JSON file instead of a pickle file.  This obviates
432  `issue 287`_ and `issue 237`_.
433
434.. _issue 237: https://bitbucket.org/ned/coveragepy/issue/237/htmlcov-with-corrupt-statusdat
435.. _issue 287: https://bitbucket.org/ned/coveragepy/issue/287/htmlpy-doesnt-specify-pickle-protocol
436.. _issue 293: https://bitbucket.org/ned/coveragepy/issue/293/number-of-statement-detection-wrong-if-no
437.. _issue 314: https://bitbucket.org/ned/coveragepy/issue/314/fail_under-param-not-working-in-coveragerc
438.. _issue 315: https://bitbucket.org/ned/coveragepy/issue/315/option-to-omit-empty-files-eg-__init__py
439.. _issue 328: https://bitbucket.org/ned/coveragepy/issue/328/misbehavior-in-run-source
440.. _issue 334: https://bitbucket.org/ned/coveragepy/issue/334/pragma-not-recognized-if-tab-character
441.. _issue 342: https://bitbucket.org/ned/coveragepy/issue/342/console-and-html-coverage-reports-differ
442.. _issue 343: https://bitbucket.org/ned/coveragepy/issue/343/an-explicitly-named-non-existent-config
443
444
445Version 4.0a1 --- 27 September 2014
446-----------------------------------
447
448- Python versions supported are now CPython 2.6, 2.7, 3.2, 3.3, and 3.4, and
449  PyPy 2.2.
450
451- Gevent, eventlet, and greenlet are now supported, closing `issue 149`_.
452  The ``concurrency`` setting specifies the concurrency library in use.  Huge
453  thanks to Peter Portante for initial implementation, and to Joe Jevnik for
454  the final insight that completed the work.
455
456- Options are now also read from a setup.cfg file, if any.  Sections are
457  prefixed with "coverage:", so the ``[run]`` options will be read from the
458  ``[coverage:run]`` section of setup.cfg.  Finishes `issue 304`_.
459
460- The ``report -m`` command can now show missing branches when reporting on
461  branch coverage.  Thanks, Steve Leonard. Closes `issue 230`_.
462
463- The XML report now contains a <source> element, fixing `issue 94`_.  Thanks
464  Stan Hu.
465
466- The class defined in the coverage module is now called ``Coverage`` instead
467  of ``coverage``, though the old name still works, for backward compatibility.
468
469- The ``fail-under`` value is now rounded the same as reported results,
470  preventing paradoxical results, fixing `issue 284`_.
471
472- The XML report will now create the output directory if need be, fixing
473  `issue 285`_.  Thanks, Chris Rose.
474
475- HTML reports no longer raise UnicodeDecodeError if a Python file has
476  undecodable characters, fixing `issue 303`_ and `issue 331`_.
477
478- The annotate command will now annotate all files, not just ones relative to
479  the current directory, fixing `issue 57`_.
480
481- The coverage module no longer causes deprecation warnings on Python 3.4 by
482  importing the imp module, fixing `issue 305`_.
483
484- Encoding declarations in source files are only considered if they are truly
485  comments.  Thanks, Anthony Sottile.
486
487.. _issue 57: https://bitbucket.org/ned/coveragepy/issue/57/annotate-command-fails-to-annotate-many
488.. _issue 94: https://bitbucket.org/ned/coveragepy/issue/94/coverage-xml-doesnt-produce-sources
489.. _issue 149: https://bitbucket.org/ned/coveragepy/issue/149/coverage-gevent-looks-broken
490.. _issue 230: https://bitbucket.org/ned/coveragepy/issue/230/show-line-no-for-missing-branches-in
491.. _issue 284: https://bitbucket.org/ned/coveragepy/issue/284/fail-under-should-show-more-precision
492.. _issue 285: https://bitbucket.org/ned/coveragepy/issue/285/xml-report-fails-if-output-file-directory
493.. _issue 303: https://bitbucket.org/ned/coveragepy/issue/303/unicodedecodeerror
494.. _issue 304: https://bitbucket.org/ned/coveragepy/issue/304/attempt-to-get-configuration-from-setupcfg
495.. _issue 305: https://bitbucket.org/ned/coveragepy/issue/305/pendingdeprecationwarning-the-imp-module
496.. _issue 331: https://bitbucket.org/ned/coveragepy/issue/331/failure-of-encoding-detection-on-python2
497
498
499Version 3.7.1 --- 13 December 2013
500----------------------------------
501
502- Improved the speed of HTML report generation by about 20%.
503
504- Fixed the mechanism for finding OS-installed static files for the HTML report
505  so that it will actually find OS-installed static files.
506
507
508Version 3.7 --- 6 October 2013
509------------------------------
510
511- Added the ``--debug`` switch to ``coverage run``.  It accepts a list of
512  options indicating the type of internal activity to log to stderr.
513
514- Improved the branch coverage facility, fixing `issue 92`_ and `issue 175`_.
515
516- Running code with ``coverage run -m`` now behaves more like Python does,
517  setting sys.path properly, which fixes `issue 207`_ and `issue 242`_.
518
519- Coverage.py can now run .pyc files directly, closing `issue 264`_.
520
521- Coverage.py properly supports .pyw files, fixing `issue 261`_.
522
523- Omitting files within a tree specified with the ``source`` option would
524  cause them to be incorrectly marked as unexecuted, as described in
525  `issue 218`_.  This is now fixed.
526
527- When specifying paths to alias together during data combining, you can now
528  specify relative paths, fixing `issue 267`_.
529
530- Most file paths can now be specified with username expansion (``~/src``, or
531  ``~build/src``, for example), and with environment variable expansion
532  (``build/$BUILDNUM/src``).
533
534- Trying to create an XML report with no files to report on, would cause a
535  ZeroDivideError, but no longer does, fixing `issue 250`_.
536
537- When running a threaded program under the Python tracer, coverage.py no
538  longer issues a spurious warning about the trace function changing: "Trace
539  function changed, measurement is likely wrong: None."  This fixes `issue
540  164`_.
541
542- Static files necessary for HTML reports are found in system-installed places,
543  to ease OS-level packaging of coverage.py.  Closes `issue 259`_.
544
545- Source files with encoding declarations, but a blank first line, were not
546  decoded properly.  Now they are.  Thanks, Roger Hu.
547
548- The source kit now includes the ``__main__.py`` file in the root coverage
549  directory, fixing `issue 255`_.
550
551.. _issue 92: https://bitbucket.org/ned/coveragepy/issue/92/finally-clauses-arent-treated-properly-in
552.. _issue 164: https://bitbucket.org/ned/coveragepy/issue/164/trace-function-changed-warning-when-using
553.. _issue 175: https://bitbucket.org/ned/coveragepy/issue/175/branch-coverage-gets-confused-in-certain
554.. _issue 207: https://bitbucket.org/ned/coveragepy/issue/207/run-m-cannot-find-module-or-package-in
555.. _issue 242: https://bitbucket.org/ned/coveragepy/issue/242/running-a-two-level-package-doesnt-work
556.. _issue 218: https://bitbucket.org/ned/coveragepy/issue/218/run-command-does-not-respect-the-omit-flag
557.. _issue 250: https://bitbucket.org/ned/coveragepy/issue/250/uncaught-zerodivisionerror-when-generating
558.. _issue 255: https://bitbucket.org/ned/coveragepy/issue/255/directory-level-__main__py-not-included-in
559.. _issue 259: https://bitbucket.org/ned/coveragepy/issue/259/allow-use-of-system-installed-third-party
560.. _issue 261: https://bitbucket.org/ned/coveragepy/issue/261/pyw-files-arent-reported-properly
561.. _issue 264: https://bitbucket.org/ned/coveragepy/issue/264/coverage-wont-run-pyc-files
562.. _issue 267: https://bitbucket.org/ned/coveragepy/issue/267/relative-path-aliases-dont-work
563
564
565Version 3.6 --- 5 January 2013
566------------------------------
567
568- Added a page to the docs about troublesome situations, closing `issue 226`_,
569  and added some info to the TODO file, closing `issue 227`_.
570
571.. _issue 226: https://bitbucket.org/ned/coveragepy/issue/226/make-readme-section-to-describe-when
572.. _issue 227: https://bitbucket.org/ned/coveragepy/issue/227/update-todo
573
574
575Version 3.6b3 --- 29 December 2012
576----------------------------------
577
578- Beta 2 broke the nose plugin. It's fixed again, closing `issue 224`_.
579
580.. _issue 224: https://bitbucket.org/ned/coveragepy/issue/224/36b2-breaks-nosexcover
581
582
583Version 3.6b2 --- 23 December 2012
584----------------------------------
585
586- Coverage.py runs on Python 2.3 and 2.4 again. It was broken in 3.6b1.
587
588- The C extension is optionally compiled using a different more widely-used
589  technique, taking another stab at fixing `issue 80`_ once and for all.
590
591- Combining data files would create entries for phantom files if used with
592  ``source`` and path aliases.  It no longer does.
593
594- ``debug sys`` now shows the configuration file path that was read.
595
596- If an oddly-behaved package claims that code came from an empty-string
597  file name, coverage.py no longer associates it with the directory name,
598  fixing `issue 221`_.
599
600.. _issue 221: https://bitbucket.org/ned/coveragepy/issue/221/coveragepy-incompatible-with-pyratemp
601
602
603Version 3.6b1 --- 28 November 2012
604----------------------------------
605
606- Wildcards in ``include=`` and ``omit=`` arguments were not handled properly
607  in reporting functions, though they were when running.  Now they are handled
608  uniformly, closing `issue 143`_ and `issue 163`_.  **NOTE**: it is possible
609  that your configurations may now be incorrect.  If you use ``include`` or
610  ``omit`` during reporting, whether on the command line, through the API, or
611  in a configuration file, please check carefully that you were not relying on
612  the old broken behavior.
613
614- The **report**, **html**, and **xml** commands now accept a ``--fail-under``
615  switch that indicates in the exit status whether the coverage percentage was
616  less than a particular value.  Closes `issue 139`_.
617
618- The reporting functions coverage.report(), coverage.html_report(), and
619  coverage.xml_report() now all return a float, the total percentage covered
620  measurement.
621
622- The HTML report's title can now be set in the configuration file, with the
623  ``--title`` switch on the command line, or via the API.
624
625- Configuration files now support substitution of environment variables, using
626  syntax like ``${WORD}``.  Closes `issue 97`_.
627
628- Embarrassingly, the ``[xml] output=`` setting in the .coveragerc file simply
629  didn't work.  Now it does.
630
631- The XML report now consistently uses file names for the file name attribute,
632  rather than sometimes using module names.  Fixes `issue 67`_.
633  Thanks, Marcus Cobden.
634
635- Coverage percentage metrics are now computed slightly differently under
636  branch coverage.  This means that completely unexecuted files will now
637  correctly have 0% coverage, fixing `issue 156`_.  This also means that your
638  total coverage numbers will generally now be lower if you are measuring
639  branch coverage.
640
641- When installing, now in addition to creating a "coverage" command, two new
642  aliases are also installed.  A "coverage2" or "coverage3" command will be
643  created, depending on whether you are installing in Python 2.x or 3.x.
644  A "coverage-X.Y" command will also be created corresponding to your specific
645  version of Python.  Closes `issue 111`_.
646
647- The coverage.py installer no longer tries to bootstrap setuptools or
648  Distribute.  You must have one of them installed first, as `issue 202`_
649  recommended.
650
651- The coverage.py kit now includes docs (closing `issue 137`_) and tests.
652
653- On Windows, files are now reported in their correct case, fixing `issue 89`_
654  and `issue 203`_.
655
656- If a file is missing during reporting, the path shown in the error message
657  is now correct, rather than an incorrect path in the current directory.
658  Fixes `issue 60`_.
659
660- Running an HTML report in Python 3 in the same directory as an old Python 2
661  HTML report would fail with a UnicodeDecodeError. This issue (`issue 193`_)
662  is now fixed.
663
664- Fixed yet another error trying to parse non-Python files as Python, this
665  time an IndentationError, closing `issue 82`_ for the fourth time...
666
667- If `coverage xml` fails because there is no data to report, it used to
668  create a zero-length XML file.  Now it doesn't, fixing `issue 210`_.
669
670- Jython files now work with the ``--source`` option, fixing `issue 100`_.
671
672- Running coverage.py under a debugger is unlikely to work, but it shouldn't
673  fail with "TypeError: 'NoneType' object is not iterable".  Fixes `issue
674  201`_.
675
676- On some Linux distributions, when installed with the OS package manager,
677  coverage.py would report its own code as part of the results.  Now it won't,
678  fixing `issue 214`_, though this will take some time to be repackaged by the
679  operating systems.
680
681- Docstrings for the legacy singleton methods are more helpful.  Thanks Marius
682  Gedminas.  Closes `issue 205`_.
683
684- The pydoc tool can now show documentation for the class `coverage.coverage`.
685  Closes `issue 206`_.
686
687- Added a page to the docs about contributing to coverage.py, closing
688  `issue 171`_.
689
690- When coverage.py ended unsuccessfully, it may have reported odd errors like
691  ``'NoneType' object has no attribute 'isabs'``.  It no longer does,
692  so kiss `issue 153`_ goodbye.
693
694.. _issue 60: https://bitbucket.org/ned/coveragepy/issue/60/incorrect-path-to-orphaned-pyc-files
695.. _issue 67: https://bitbucket.org/ned/coveragepy/issue/67/xml-report-filenames-may-be-generated
696.. _issue 89: https://bitbucket.org/ned/coveragepy/issue/89/on-windows-all-packages-are-reported-in
697.. _issue 97: https://bitbucket.org/ned/coveragepy/issue/97/allow-environment-variables-to-be
698.. _issue 100: https://bitbucket.org/ned/coveragepy/issue/100/source-directive-doesnt-work-for-packages
699.. _issue 111: https://bitbucket.org/ned/coveragepy/issue/111/when-installing-coverage-with-pip-not
700.. _issue 137: https://bitbucket.org/ned/coveragepy/issue/137/provide-docs-with-source-distribution
701.. _issue 139: https://bitbucket.org/ned/coveragepy/issue/139/easy-check-for-a-certain-coverage-in-tests
702.. _issue 143: https://bitbucket.org/ned/coveragepy/issue/143/omit-doesnt-seem-to-work-in-coverage
703.. _issue 153: https://bitbucket.org/ned/coveragepy/issue/153/non-existent-filename-triggers
704.. _issue 156: https://bitbucket.org/ned/coveragepy/issue/156/a-completely-unexecuted-file-shows-14
705.. _issue 163: https://bitbucket.org/ned/coveragepy/issue/163/problem-with-include-and-omit-filename
706.. _issue 171: https://bitbucket.org/ned/coveragepy/issue/171/how-to-contribute-and-run-tests
707.. _issue 193: https://bitbucket.org/ned/coveragepy/issue/193/unicodedecodeerror-on-htmlpy
708.. _issue 201: https://bitbucket.org/ned/coveragepy/issue/201/coverage-using-django-14-with-pydb-on
709.. _issue 202: https://bitbucket.org/ned/coveragepy/issue/202/get-rid-of-ez_setuppy-and
710.. _issue 203: https://bitbucket.org/ned/coveragepy/issue/203/duplicate-filenames-reported-when-filename
711.. _issue 205: https://bitbucket.org/ned/coveragepy/issue/205/make-pydoc-coverage-more-friendly
712.. _issue 206: https://bitbucket.org/ned/coveragepy/issue/206/pydoc-coveragecoverage-fails-with-an-error
713.. _issue 210: https://bitbucket.org/ned/coveragepy/issue/210/if-theres-no-coverage-data-coverage-xml
714.. _issue 214: https://bitbucket.org/ned/coveragepy/issue/214/coveragepy-measures-itself-on-precise
715
716
717Version 3.5.3 --- 29 September 2012
718-----------------------------------
719
720- Line numbers in the HTML report line up better with the source lines, fixing
721  `issue 197`_, thanks Marius Gedminas.
722
723- When specifying a directory as the source= option, the directory itself no
724  longer needs to have a ``__init__.py`` file, though its sub-directories do,
725  to be considered as source files.
726
727- Files encoded as UTF-8 with a BOM are now properly handled, fixing
728  `issue 179`_.  Thanks, Pablo Carballo.
729
730- Fixed more cases of non-Python files being reported as Python source, and
731  then not being able to parse them as Python.  Closes `issue 82`_ (again).
732  Thanks, Julian Berman.
733
734- Fixed memory leaks under Python 3, thanks, Brett Cannon. Closes `issue 147`_.
735
736- Optimized .pyo files may not have been handled correctly, `issue 195`_.
737  Thanks, Marius Gedminas.
738
739- Certain unusually named file paths could have been mangled during reporting,
740  `issue 194`_.  Thanks, Marius Gedminas.
741
742- Try to do a better job of the impossible task of detecting when we can't
743  build the C extension, fixing `issue 183`_.
744
745- Testing is now done with `tox`_, thanks, Marc Abramowitz.
746
747.. _issue 147: https://bitbucket.org/ned/coveragepy/issue/147/massive-memory-usage-by-ctracer
748.. _issue 179: https://bitbucket.org/ned/coveragepy/issue/179/htmlreporter-fails-when-source-file-is
749.. _issue 183: https://bitbucket.org/ned/coveragepy/issue/183/install-fails-for-python-23
750.. _issue 194: https://bitbucket.org/ned/coveragepy/issue/194/filelocatorrelative_filename-could-mangle
751.. _issue 195: https://bitbucket.org/ned/coveragepy/issue/195/pyo-file-handling-in-codeunit
752.. _issue 197: https://bitbucket.org/ned/coveragepy/issue/197/line-numbers-in-html-report-do-not-align
753.. _tox: http://tox.readthedocs.org/
754
755
756Version 3.5.2 --- 4 May 2012
757----------------------------
758
759No changes since 3.5.2.b1
760
761
762Version 3.5.2b1 --- 29 April 2012
763---------------------------------
764
765- The HTML report has slightly tweaked controls: the buttons at the top of
766  the page are color-coded to the source lines they affect.
767
768- Custom CSS can be applied to the HTML report by specifying a CSS file as
769  the ``extra_css`` configuration value in the ``[html]`` section.
770
771- Source files with custom encodings declared in a comment at the top are now
772  properly handled during reporting on Python 2.  Python 3 always handled them
773  properly.  This fixes `issue 157`_.
774
775- Backup files left behind by editors are no longer collected by the source=
776  option, fixing `issue 168`_.
777
778- If a file doesn't parse properly as Python, we don't report it as an error
779  if the file name seems like maybe it wasn't meant to be Python.  This is a
780  pragmatic fix for `issue 82`_.
781
782- The ``-m`` switch on ``coverage report``, which includes missing line numbers
783  in the summary report, can now be specified as ``show_missing`` in the
784  config file.  Closes `issue 173`_.
785
786- When running a module with ``coverage run -m <modulename>``, certain details
787  of the execution environment weren't the same as for
788  ``python -m <modulename>``.  This had the unfortunate side-effect of making
789  ``coverage run -m unittest discover`` not work if you had tests in a
790  directory named "test".  This fixes `issue 155`_ and `issue 142`_.
791
792- Now the exit status of your product code is properly used as the process
793  status when running ``python -m coverage run ...``.  Thanks, JT Olds.
794
795- When installing into pypy, we no longer attempt (and fail) to compile
796  the C tracer function, closing `issue 166`_.
797
798.. _issue 142: https://bitbucket.org/ned/coveragepy/issue/142/executing-python-file-syspath-is-replaced
799.. _issue 155: https://bitbucket.org/ned/coveragepy/issue/155/cant-use-coverage-run-m-unittest-discover
800.. _issue 157: https://bitbucket.org/ned/coveragepy/issue/157/chokes-on-source-files-with-non-utf-8
801.. _issue 166: https://bitbucket.org/ned/coveragepy/issue/166/dont-try-to-compile-c-extension-on-pypy
802.. _issue 168: https://bitbucket.org/ned/coveragepy/issue/168/dont-be-alarmed-by-emacs-droppings
803.. _issue 173: https://bitbucket.org/ned/coveragepy/issue/173/theres-no-way-to-specify-show-missing-in
804
805
806Version 3.5.1 --- 23 September 2011
807-----------------------------------
808
809- The ``[paths]`` feature unfortunately didn't work in real world situations
810  where you wanted to, you know, report on the combined data.  Now all paths
811  stored in the combined file are canonicalized properly.
812
813
814Version 3.5.1b1 --- 28 August 2011
815----------------------------------
816
817- When combining data files from parallel runs, you can now instruct
818  coverage.py about which directories are equivalent on different machines.  A
819  ``[paths]`` section in the configuration file lists paths that are to be
820  considered equivalent.  Finishes `issue 17`_.
821
822- for-else constructs are understood better, and don't cause erroneous partial
823  branch warnings.  Fixes `issue 122`_.
824
825- Branch coverage for ``with`` statements is improved, fixing `issue 128`_.
826
827- The number of partial branches reported on the HTML summary page was
828  different than the number reported on the individual file pages.  This is
829  now fixed.
830
831- An explicit include directive to measure files in the Python installation
832  wouldn't work because of the standard library exclusion.  Now the include
833  directive takes precedence, and the files will be measured.  Fixes
834  `issue 138`_.
835
836- The HTML report now handles Unicode characters in Python source files
837  properly.  This fixes `issue 124`_ and `issue 144`_. Thanks, Devin
838  Jeanpierre.
839
840- In order to help the core developers measure the test coverage of the
841  standard library, Brandon Rhodes devised an aggressive hack to trick Python
842  into running some coverage.py code before anything else in the process.
843  See the coverage/fullcoverage directory if you are interested.
844
845.. _issue 17: http://bitbucket.org/ned/coveragepy/issue/17/support-combining-coverage-data-from
846.. _issue 122: http://bitbucket.org/ned/coveragepy/issue/122/for-else-always-reports-missing-branch
847.. _issue 124: http://bitbucket.org/ned/coveragepy/issue/124/no-arbitrary-unicode-in-html-reports-in
848.. _issue 128: http://bitbucket.org/ned/coveragepy/issue/128/branch-coverage-of-with-statement-in-27
849.. _issue 138: http://bitbucket.org/ned/coveragepy/issue/138/include-should-take-precedence-over-is
850.. _issue 144: http://bitbucket.org/ned/coveragepy/issue/144/failure-generating-html-output-for
851
852
853Version 3.5 --- 29 June 2011
854----------------------------
855
856- The HTML report hotkeys now behave slightly differently when the current
857  chunk isn't visible at all:  a chunk on the screen will be selected,
858  instead of the old behavior of jumping to the literal next chunk.
859  The hotkeys now work in Google Chrome.  Thanks, Guido van Rossum.
860
861
862Version 3.5b1 --- 5 June 2011
863-----------------------------
864
865- The HTML report now has hotkeys.  Try ``n``, ``s``, ``m``, ``x``, ``b``,
866  ``p``, and ``c`` on the overview page to change the column sorting.
867  On a file page, ``r``, ``m``, ``x``, and ``p`` toggle the run, missing,
868  excluded, and partial line markings.  You can navigate the highlighted
869  sections of code by using the ``j`` and ``k`` keys for next and previous.
870  The ``1`` (one) key jumps to the first highlighted section in the file,
871  and ``0`` (zero) scrolls to the top of the file.
872
873- The ``--omit`` and ``--include`` switches now interpret their values more
874  usefully.  If the value starts with a wildcard character, it is used as-is.
875  If it does not, it is interpreted relative to the current directory.
876  Closes `issue 121`_.
877
878- Partial branch warnings can now be pragma'd away.  The configuration option
879  ``partial_branches`` is a list of regular expressions.  Lines matching any of
880  those expressions will never be marked as a partial branch.  In addition,
881  there's a built-in list of regular expressions marking statements which should
882  never be marked as partial.  This list includes ``while True:``, ``while 1:``,
883  ``if 1:``, and ``if 0:``.
884
885- The ``coverage()`` constructor accepts single strings for the ``omit=`` and
886  ``include=`` arguments, adapting to a common error in programmatic use.
887
888- Modules can now be run directly using ``coverage run -m modulename``, to
889  mirror Python's ``-m`` flag.  Closes `issue 95`_, thanks, Brandon Rhodes.
890
891- ``coverage run`` didn't emulate Python accurately in one small detail: the
892  current directory inserted into ``sys.path`` was relative rather than
893  absolute. This is now fixed.
894
895- HTML reporting is now incremental: a record is kept of the data that
896  produced the HTML reports, and only files whose data has changed will
897  be generated.  This should make most HTML reporting faster.
898
899- Pathological code execution could disable the trace function behind our
900  backs, leading to incorrect code measurement.  Now if this happens,
901  coverage.py will issue a warning, at least alerting you to the problem.
902  Closes `issue 93`_.  Thanks to Marius Gedminas for the idea.
903
904- The C-based trace function now behaves properly when saved and restored
905  with ``sys.gettrace()`` and ``sys.settrace()``.  This fixes `issue 125`_
906  and `issue 123`_.  Thanks, Devin Jeanpierre.
907
908- Source files are now opened with Python 3.2's ``tokenize.open()`` where
909  possible, to get the best handling of Python source files with encodings.
910  Closes `issue 107`_, thanks, Brett Cannon.
911
912- Syntax errors in supposed Python files can now be ignored during reporting
913  with the ``-i`` switch just like other source errors.  Closes `issue 115`_.
914
915- Installation from source now succeeds on machines without a C compiler,
916  closing `issue 80`_.
917
918- Coverage.py can now be run directly from a working tree by specifying
919  the directory name to python:  ``python coverage_py_working_dir run ...``.
920  Thanks, Brett Cannon.
921
922- A little bit of Jython support: `coverage run` can now measure Jython
923  execution by adapting when $py.class files are traced. Thanks, Adi Roiban.
924  Jython still doesn't provide the Python libraries needed to make
925  coverage reporting work, unfortunately.
926
927- Internally, files are now closed explicitly, fixing `issue 104`_.  Thanks,
928  Brett Cannon.
929
930.. _issue 80: https://bitbucket.org/ned/coveragepy/issue/80/is-there-a-duck-typing-way-to-know-we-cant
931.. _issue 93: http://bitbucket.org/ned/coveragepy/issue/93/copying-a-mock-object-breaks-coverage
932.. _issue 95: https://bitbucket.org/ned/coveragepy/issue/95/run-subcommand-should-take-a-module-name
933.. _issue 104: https://bitbucket.org/ned/coveragepy/issue/104/explicitly-close-files
934.. _issue 107: https://bitbucket.org/ned/coveragepy/issue/107/codeparser-not-opening-source-files-with
935.. _issue 115: https://bitbucket.org/ned/coveragepy/issue/115/fail-gracefully-when-reporting-on-file
936.. _issue 121: https://bitbucket.org/ned/coveragepy/issue/121/filename-patterns-are-applied-stupidly
937.. _issue 123: https://bitbucket.org/ned/coveragepy/issue/123/pyeval_settrace-used-in-way-that-breaks
938.. _issue 125: https://bitbucket.org/ned/coveragepy/issue/125/coverage-removes-decoratortoolss-tracing
939
940
941Version 3.4 --- 19 September 2010
942---------------------------------
943
944- The XML report is now sorted by package name, fixing `issue 88`_.
945
946- Programs that exited with ``sys.exit()`` with no argument weren't handled
947  properly, producing a coverage.py stack trace.  That is now fixed.
948
949.. _issue 88: http://bitbucket.org/ned/coveragepy/issue/88/xml-report-lists-packages-in-random-order
950
951
952Version 3.4b2 --- 6 September 2010
953----------------------------------
954
955- Completely unexecuted files can now be included in coverage results, reported
956  as 0% covered.  This only happens if the --source option is specified, since
957  coverage.py needs guidance about where to look for source files.
958
959- The XML report output now properly includes a percentage for branch coverage,
960  fixing `issue 65`_ and `issue 81`_.
961
962- Coverage percentages are now displayed uniformly across reporting methods.
963  Previously, different reports could round percentages differently.  Also,
964  percentages are only reported as 0% or 100% if they are truly 0 or 100, and
965  are rounded otherwise.  Fixes `issue 41`_ and `issue 70`_.
966
967- The precision of reported coverage percentages can be set with the
968  ``[report] precision`` config file setting.  Completes `issue 16`_.
969
970- Threads derived from ``threading.Thread`` with an overridden `run` method
971  would report no coverage for the `run` method.  This is now fixed, closing
972  `issue 85`_.
973
974.. _issue 16: http://bitbucket.org/ned/coveragepy/issue/16/allow-configuration-of-accuracy-of-percentage-totals
975.. _issue 41: http://bitbucket.org/ned/coveragepy/issue/41/report-says-100-when-it-isnt-quite-there
976.. _issue 65: http://bitbucket.org/ned/coveragepy/issue/65/branch-option-not-reported-in-cobertura
977.. _issue 70: http://bitbucket.org/ned/coveragepy/issue/70/text-report-and-html-report-disagree-on-coverage
978.. _issue 81: http://bitbucket.org/ned/coveragepy/issue/81/xml-report-does-not-have-condition-coverage-attribute-for-lines-with-a
979.. _issue 85: http://bitbucket.org/ned/coveragepy/issue/85/threadrun-isnt-measured
980
981
982Version 3.4b1 --- 21 August 2010
983--------------------------------
984
985- BACKWARD INCOMPATIBILITY: the ``--omit`` and ``--include`` switches now take
986  file patterns rather than file prefixes, closing `issue 34`_ and `issue 36`_.
987
988- BACKWARD INCOMPATIBILITY: the `omit_prefixes` argument is gone throughout
989  coverage.py, replaced with `omit`, a list of file name patterns suitable for
990  `fnmatch`.  A parallel argument `include` controls what files are included.
991
992- The run command now has a ``--source`` switch, a list of directories or
993  module names.  If provided, coverage.py will only measure execution in those
994  source files.
995
996- Various warnings are printed to stderr for problems encountered during data
997  measurement: if a ``--source`` module has no Python source to measure, or is
998  never encountered at all, or if no data is collected.
999
1000- The reporting commands (report, annotate, html, and xml) now have an
1001  ``--include`` switch to restrict reporting to modules matching those file
1002  patterns, similar to the existing ``--omit`` switch. Thanks, Zooko.
1003
1004- The run command now supports ``--include`` and ``--omit`` to control what
1005  modules it measures. This can speed execution and reduce the amount of data
1006  during reporting. Thanks Zooko.
1007
1008- Since coverage.py 3.1, using the Python trace function has been slower than
1009  it needs to be.  A cache of tracing decisions was broken, but has now been
1010  fixed.
1011
1012- Python 2.7 and 3.2 have introduced new opcodes that are now supported.
1013
1014- Python files with no statements, for example, empty ``__init__.py`` files,
1015  are now reported as having zero statements instead of one.  Fixes `issue 1`_.
1016
1017- Reports now have a column of missed line counts rather than executed line
1018  counts, since developers should focus on reducing the missed lines to zero,
1019  rather than increasing the executed lines to varying targets.  Once
1020  suggested, this seemed blindingly obvious.
1021
1022- Line numbers in HTML source pages are clickable, linking directly to that
1023  line, which is highlighted on arrival.  Added a link back to the index page
1024  at the bottom of each HTML page.
1025
1026- Programs that call ``os.fork`` will properly collect data from both the child
1027  and parent processes.  Use ``coverage run -p`` to get two data files that can
1028  be combined with ``coverage combine``.  Fixes `issue 56`_.
1029
1030- Coverage.py is now runnable as a module: ``python -m coverage``.  Thanks,
1031  Brett Cannon.
1032
1033- When measuring code running in a virtualenv, most of the system library was
1034  being measured when it shouldn't have been.  This is now fixed.
1035
1036- Doctest text files are no longer recorded in the coverage data, since they
1037  can't be reported anyway.  Fixes `issue 52`_ and `issue 61`_.
1038
1039- Jinja HTML templates compile into Python code using the HTML file name,
1040  which confused coverage.py.  Now these files are no longer traced, fixing
1041  `issue 82`_.
1042
1043- Source files can have more than one dot in them (foo.test.py), and will be
1044  treated properly while reporting.  Fixes `issue 46`_.
1045
1046- Source files with DOS line endings are now properly tokenized for syntax
1047  coloring on non-DOS machines.  Fixes `issue 53`_.
1048
1049- Unusual code structure that confused exits from methods with exits from
1050  classes is now properly analyzed.  See `issue 62`_.
1051
1052- Asking for an HTML report with no files now shows a nice error message rather
1053  than a cryptic failure ('int' object is unsubscriptable). Fixes `issue 59`_.
1054
1055.. _issue 1:  http://bitbucket.org/ned/coveragepy/issue/1/empty-__init__py-files-are-reported-as-1-executable
1056.. _issue 34: http://bitbucket.org/ned/coveragepy/issue/34/enhanced-omit-globbing-handling
1057.. _issue 36: http://bitbucket.org/ned/coveragepy/issue/36/provide-regex-style-omit
1058.. _issue 46: http://bitbucket.org/ned/coveragepy/issue/46
1059.. _issue 53: http://bitbucket.org/ned/coveragepy/issue/53
1060.. _issue 52: http://bitbucket.org/ned/coveragepy/issue/52/doctesttestfile-confuses-source-detection
1061.. _issue 56: http://bitbucket.org/ned/coveragepy/issue/56
1062.. _issue 61: http://bitbucket.org/ned/coveragepy/issue/61/annotate-i-doesnt-work
1063.. _issue 62: http://bitbucket.org/ned/coveragepy/issue/62
1064.. _issue 59: http://bitbucket.org/ned/coveragepy/issue/59/html-report-fails-with-int-object-is
1065.. _issue 82: http://bitbucket.org/ned/coveragepy/issue/82/tokenerror-when-generating-html-report
1066
1067
1068Version 3.3.1 --- 6 March 2010
1069------------------------------
1070
1071- Using `parallel=True` in .coveragerc file prevented reporting, but now does
1072  not, fixing `issue 49`_.
1073
1074- When running your code with "coverage run", if you call `sys.exit()`,
1075  coverage.py will exit with that status code, fixing `issue 50`_.
1076
1077.. _issue 49: http://bitbucket.org/ned/coveragepy/issue/49
1078.. _issue 50: http://bitbucket.org/ned/coveragepy/issue/50
1079
1080
1081Version 3.3 --- 24 February 2010
1082--------------------------------
1083
1084- Settings are now read from a .coveragerc file.  A specific file can be
1085  specified on the command line with --rcfile=FILE.  The name of the file can
1086  be programmatically set with the `config_file` argument to the coverage()
1087  constructor, or reading a config file can be disabled with
1088  `config_file=False`.
1089
1090- Fixed a problem with nested loops having their branch possibilities
1091  mischaracterized: `issue 39`_.
1092
1093- Added coverage.process_start to enable coverage measurement when Python
1094  starts.
1095
1096- Parallel data file names now have a random number appended to them in
1097  addition to the machine name and process id.
1098
1099- Parallel data files combined with "coverage combine" are deleted after
1100  they're combined, to clean up unneeded files.  Fixes `issue 40`_.
1101
1102- Exceptions thrown from product code run with "coverage run" are now displayed
1103  without internal coverage.py frames, so the output is the same as when the
1104  code is run without coverage.py.
1105
1106- The `data_suffix` argument to the coverage constructor is now appended with
1107  an added dot rather than simply appended, so that .coveragerc files will not
1108  be confused for data files.
1109
1110- Python source files that don't end with a newline can now be executed, fixing
1111  `issue 47`_.
1112
1113- Added an AUTHORS.txt file.
1114
1115.. _issue 39: http://bitbucket.org/ned/coveragepy/issue/39
1116.. _issue 40: http://bitbucket.org/ned/coveragepy/issue/40
1117.. _issue 47: http://bitbucket.org/ned/coveragepy/issue/47
1118
1119
1120Version 3.2 --- 5 December 2009
1121-------------------------------
1122
1123- Added a ``--version`` option on the command line.
1124
1125
1126Version 3.2b4 --- 1 December 2009
1127---------------------------------
1128
1129- Branch coverage improvements:
1130
1131  - The XML report now includes branch information.
1132
1133- Click-to-sort HTML report columns are now persisted in a cookie.  Viewing
1134  a report will sort it first the way you last had a coverage report sorted.
1135  Thanks, `Chris Adams`_.
1136
1137- On Python 3.x, setuptools has been replaced by `Distribute`_.
1138
1139.. _Distribute: http://packages.python.org/distribute/
1140
1141
1142Version 3.2b3 --- 23 November 2009
1143----------------------------------
1144
1145- Fixed a memory leak in the C tracer that was introduced in 3.2b1.
1146
1147- Branch coverage improvements:
1148
1149  - Branches to excluded code are ignored.
1150
1151- The table of contents in the HTML report is now sortable: click the headers
1152  on any column.  Thanks, `Chris Adams`_.
1153
1154.. _Chris Adams: http://improbable.org/chris/
1155
1156
1157Version 3.2b2 --- 19 November 2009
1158----------------------------------
1159
1160- Branch coverage improvements:
1161
1162  - Classes are no longer incorrectly marked as branches: `issue 32`_.
1163
1164  - "except" clauses with types are no longer incorrectly marked as branches:
1165    `issue 35`_.
1166
1167- Fixed some problems syntax coloring sources with line continuations and
1168  source with tabs: `issue 30`_ and `issue 31`_.
1169
1170- The --omit option now works much better than before, fixing `issue 14`_ and
1171  `issue 33`_.  Thanks, Danek Duvall.
1172
1173.. _issue 14: http://bitbucket.org/ned/coveragepy/issue/14
1174.. _issue 30: http://bitbucket.org/ned/coveragepy/issue/30
1175.. _issue 31: http://bitbucket.org/ned/coveragepy/issue/31
1176.. _issue 32: http://bitbucket.org/ned/coveragepy/issue/32
1177.. _issue 33: http://bitbucket.org/ned/coveragepy/issue/33
1178.. _issue 35: http://bitbucket.org/ned/coveragepy/issue/35
1179
1180
1181Version 3.2b1 --- 10 November 2009
1182----------------------------------
1183
1184- Branch coverage!
1185
1186- XML reporting has file paths that let Cobertura find the source code.
1187
1188- The tracer code has changed, it's a few percent faster.
1189
1190- Some exceptions reported by the command line interface have been cleaned up
1191  so that tracebacks inside coverage.py aren't shown.  Fixes `issue 23`_.
1192
1193.. _issue 23: http://bitbucket.org/ned/coveragepy/issue/23
1194
1195
1196Version 3.1 --- 4 October 2009
1197------------------------------
1198
1199- Source code can now be read from eggs.  Thanks, Ross Lawley.  Fixes
1200  `issue 25`_.
1201
1202.. _issue 25: http://bitbucket.org/ned/coveragepy/issue/25
1203
1204
1205Version 3.1b1 --- 27 September 2009
1206-----------------------------------
1207
1208- Python 3.1 is now supported.
1209
1210- Coverage.py has a new command line syntax with sub-commands.  This expands
1211  the possibilities for adding features and options in the future.  The old
1212  syntax is still supported.  Try "coverage help" to see the new commands.
1213  Thanks to Ben Finney for early help.
1214
1215- Added an experimental "coverage xml" command for producing coverage reports
1216  in a Cobertura-compatible XML format.  Thanks, Bill Hart.
1217
1218- Added the --timid option to enable a simpler slower trace function that works
1219  for DecoratorTools projects, including TurboGears.  Fixed `issue 12`_ and
1220  `issue 13`_.
1221
1222- HTML reports show modules from other directories.  Fixed `issue 11`_.
1223
1224- HTML reports now display syntax-colored Python source.
1225
1226- Programs that change directory will still write .coverage files in the
1227  directory where execution started.  Fixed `issue 24`_.
1228
1229- Added a "coverage debug" command for getting diagnostic information about the
1230  coverage.py installation.
1231
1232.. _issue 11: http://bitbucket.org/ned/coveragepy/issue/11
1233.. _issue 12: http://bitbucket.org/ned/coveragepy/issue/12
1234.. _issue 13: http://bitbucket.org/ned/coveragepy/issue/13
1235.. _issue 24: http://bitbucket.org/ned/coveragepy/issue/24
1236
1237
1238Version 3.0.1 --- 7 July 2009
1239-----------------------------
1240
1241- Removed the recursion limit in the tracer function.  Previously, code that
1242  ran more than 500 frames deep would crash. Fixed `issue 9`_.
1243
1244- Fixed a bizarre problem involving pyexpat, whereby lines following XML parser
1245  invocations could be overlooked.  Fixed `issue 10`_.
1246
1247- On Python 2.3, coverage.py could mis-measure code with exceptions being
1248  raised.  This is now fixed.
1249
1250- The coverage.py code itself will now not be measured by coverage.py, and no
1251  coverage.py modules will be mentioned in the nose --with-cover plug-in.
1252  Fixed `issue 8`_.
1253
1254- When running source files, coverage.py now opens them in universal newline
1255  mode just like Python does.  This lets it run Windows files on Mac, for
1256  example.
1257
1258.. _issue 9: http://bitbucket.org/ned/coveragepy/issue/9
1259.. _issue 10: http://bitbucket.org/ned/coveragepy/issue/10
1260.. _issue 8: http://bitbucket.org/ned/coveragepy/issue/8
1261
1262
1263Version 3.0 --- 13 June 2009
1264----------------------------
1265
1266- Fixed the way the Python library was ignored.  Too much code was being
1267  excluded the old way.
1268
1269- Tabs are now properly converted in HTML reports.  Previously indentation was
1270  lost.  Fixed `issue 6`_.
1271
1272- Nested modules now get a proper flat_rootname.  Thanks, Christian Heimes.
1273
1274.. _issue 6: http://bitbucket.org/ned/coveragepy/issue/6
1275
1276
1277Version 3.0b3 --- 16 May 2009
1278-----------------------------
1279
1280- Added parameters to coverage.__init__ for options that had been set on the
1281  coverage object itself.
1282
1283- Added clear_exclude() and get_exclude_list() methods for programmatic
1284  manipulation of the exclude regexes.
1285
1286- Added coverage.load() to read previously-saved data from the data file.
1287
1288- Improved the finding of code files.  For example, .pyc files that have been
1289  installed after compiling are now located correctly.  Thanks, Detlev
1290  Offenbach.
1291
1292- When using the object API (that is, constructing a coverage() object), data
1293  is no longer saved automatically on process exit.  You can re-enable it with
1294  the auto_data=True parameter on the coverage() constructor. The module-level
1295  interface still uses automatic saving.
1296
1297
1298Version 3.0b --- 30 April 2009
1299------------------------------
1300
1301HTML reporting, and continued refactoring.
1302
1303- HTML reports and annotation of source files: use the new -b (browser) switch.
1304  Thanks to George Song for code, inspiration and guidance.
1305
1306- Code in the Python standard library is not measured by default.  If you need
1307  to measure standard library code, use the -L command-line switch during
1308  execution, or the cover_pylib=True argument to the coverage() constructor.
1309
1310- Source annotation into a directory (-a -d) behaves differently.  The
1311  annotated files are named with their hierarchy flattened so that same-named
1312  files from different directories no longer collide.  Also, only files in the
1313  current tree are included.
1314
1315- coverage.annotate_file is no longer available.
1316
1317- Programs executed with -x now behave more as they should, for example,
1318  __file__ has the correct value.
1319
1320- .coverage data files have a new pickle-based format designed for better
1321  extensibility.
1322
1323- Removed the undocumented cache_file argument to coverage.usecache().
1324
1325
1326Version 3.0b1 --- 7 March 2009
1327------------------------------
1328
1329Major overhaul.
1330
1331- Coverage.py is now a package rather than a module.  Functionality has been
1332  split into classes.
1333
1334- The trace function is implemented in C for speed.  Coverage.py runs are now
1335  much faster.  Thanks to David Christian for productive micro-sprints and
1336  other encouragement.
1337
1338- Executable lines are identified by reading the line number tables in the
1339  compiled code, removing a great deal of complicated analysis code.
1340
1341- Precisely which lines are considered executable has changed in some cases.
1342  Therefore, your coverage stats may also change slightly.
1343
1344- The singleton coverage object is only created if the module-level functions
1345  are used.  This maintains the old interface while allowing better
1346  programmatic use of Coverage.py.
1347
1348- The minimum supported Python version is 2.3.
1349
1350
1351Version 2.85 --- 14 September 2008
1352----------------------------------
1353
1354- Add support for finding source files in eggs. Don't check for
1355  morf's being instances of ModuleType, instead use duck typing so that
1356  pseudo-modules can participate. Thanks, Imri Goldberg.
1357
1358- Use os.realpath as part of the fixing of file names so that symlinks won't
1359  confuse things. Thanks, Patrick Mezard.
1360
1361
1362Version 2.80 --- 25 May 2008
1363----------------------------
1364
1365- Open files in rU mode to avoid line ending craziness. Thanks, Edward Loper.
1366
1367
1368Version 2.78 --- 30 September 2007
1369----------------------------------
1370
1371- Don't try to predict whether a file is Python source based on the extension.
1372  Extension-less files are often Pythons scripts. Instead, simply parse the file
1373  and catch the syntax errors. Hat tip to Ben Finney.
1374
1375
1376Version 2.77 --- 29 July 2007
1377-----------------------------
1378
1379- Better packaging.
1380
1381
1382Version 2.76 --- 23 July 2007
1383-----------------------------
1384
1385- Now Python 2.5 is *really* fully supported: the body of the new with
1386  statement is counted as executable.
1387
1388
1389Version 2.75 --- 22 July 2007
1390-----------------------------
1391
1392- Python 2.5 now fully supported. The method of dealing with multi-line
1393  statements is now less sensitive to the exact line that Python reports during
1394  execution. Pass statements are handled specially so that their disappearance
1395  during execution won't throw off the measurement.
1396
1397
1398Version 2.7 --- 21 July 2007
1399----------------------------
1400
1401- "#pragma: nocover" is excluded by default.
1402
1403- Properly ignore docstrings and other constant expressions that appear in the
1404  middle of a function, a problem reported by Tim Leslie.
1405
1406- coverage.erase() shouldn't clobber the exclude regex. Change how parallel
1407  mode is invoked, and fix erase() so that it erases the cache when called
1408  programmatically.
1409
1410- In reports, ignore code executed from strings, since we can't do anything
1411  useful with it anyway.
1412
1413- Better file handling on Linux, thanks Guillaume Chazarain.
1414
1415- Better shell support on Windows, thanks Noel O'Boyle.
1416
1417- Python 2.2 support maintained, thanks Catherine Proulx.
1418
1419- Minor changes to avoid lint warnings.
1420
1421
1422Version 2.6 --- 23 August 2006
1423------------------------------
1424
1425- Applied Joseph Tate's patch for function decorators.
1426
1427- Applied Sigve Tjora and Mark van der Wal's fixes for argument handling.
1428
1429- Applied Geoff Bache's parallel mode patch.
1430
1431- Refactorings to improve testability. Fixes to command-line logic for parallel
1432  mode and collect.
1433
1434
1435Version 2.5 --- 4 December 2005
1436-------------------------------
1437
1438- Call threading.settrace so that all threads are measured. Thanks Martin
1439  Fuzzey.
1440
1441- Add a file argument to report so that reports can be captured to a different
1442  destination.
1443
1444- Coverage.py can now measure itself.
1445
1446- Adapted Greg Rogers' patch for using relative file names, and sorting and
1447  omitting files to report on.
1448
1449
1450Version 2.2 --- 31 December 2004
1451--------------------------------
1452
1453- Allow for keyword arguments in the module global functions. Thanks, Allen.
1454
1455
1456Version 2.1 --- 14 December 2004
1457--------------------------------
1458
1459- Return 'analysis' to its original behavior and add 'analysis2'. Add a global
1460  for 'annotate', and factor it, adding 'annotate_file'.
1461
1462
1463Version 2.0 --- 12 December 2004
1464--------------------------------
1465
1466Significant code changes.
1467
1468- Finding executable statements has been rewritten so that docstrings and
1469  other quirks of Python execution aren't mistakenly identified as missing
1470  lines.
1471
1472- Lines can be excluded from consideration, even entire suites of lines.
1473
1474- The file system cache of covered lines can be disabled programmatically.
1475
1476- Modernized the code.
1477
1478
1479Earlier History
1480---------------
1481
14822001-12-04 GDR Created.
1483
14842001-12-06 GDR Added command-line interface and source code annotation.
1485
14862001-12-09 GDR Moved design and interface to separate documents.
1487
14882001-12-10 GDR Open cache file as binary on Windows. Allow simultaneous -e and
1489-x, or -a and -r.
1490
14912001-12-12 GDR Added command-line help. Cache analysis so that it only needs to
1492be done once when you specify -a and -r.
1493
14942001-12-13 GDR Improved speed while recording. Portable between Python 1.5.2
1495and 2.1.1.
1496
14972002-01-03 GDR Module-level functions work correctly.
1498
14992002-01-07 GDR Update sys.path when running a file with the -x option, so that
1500it matches the value the program would get if it were run on its own.
1501