Home | History | Annotate | Download | only in coverage
      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 ==============================
      5 Change history for Coverage.py
      6 ==============================
      7 
      8 
      9 Version 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 
     34 Version 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 
     53 Version 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 
     99 Version 4.0 --- 20 September 2015
    100 ---------------------------------
    101 
    102 No changes from 4.0b3
    103 
    104 
    105 Version 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 
    126 Version 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 
    159 Version 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 Mrie.
    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 
    238 Version 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 Mrie.
    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 
    299 Version 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 
    333 Version 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 
    343 Version 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 
    377 Version 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 
    445 Version 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 
    499 Version 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 
    508 Version 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 
    565 Version 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 
    575 Version 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 
    583 Version 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 
    603 Version 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 
    717 Version 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 
    756 Version 3.5.2 --- 4 May 2012
    757 ----------------------------
    758 
    759 No changes since 3.5.2.b1
    760 
    761 
    762 Version 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 
    806 Version 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 
    814 Version 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 
    853 Version 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 
    862 Version 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 
    941 Version 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 
    952 Version 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 
    982 Version 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 
   1068 Version 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 
   1081 Version 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 
   1120 Version 3.2 --- 5 December 2009
   1121 -------------------------------
   1122 
   1123 - Added a ``--version`` option on the command line.
   1124 
   1125 
   1126 Version 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 
   1142 Version 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 
   1157 Version 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 
   1181 Version 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 
   1196 Version 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 
   1205 Version 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 
   1238 Version 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 
   1263 Version 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 
   1277 Version 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 
   1298 Version 3.0b --- 30 April 2009
   1299 ------------------------------
   1300 
   1301 HTML 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 
   1326 Version 3.0b1 --- 7 March 2009
   1327 ------------------------------
   1328 
   1329 Major 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 
   1351 Version 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 
   1362 Version 2.80 --- 25 May 2008
   1363 ----------------------------
   1364 
   1365 - Open files in rU mode to avoid line ending craziness. Thanks, Edward Loper.
   1366 
   1367 
   1368 Version 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 
   1376 Version 2.77 --- 29 July 2007
   1377 -----------------------------
   1378 
   1379 - Better packaging.
   1380 
   1381 
   1382 Version 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 
   1389 Version 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 
   1398 Version 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 
   1422 Version 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 
   1435 Version 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 
   1450 Version 2.2 --- 31 December 2004
   1451 --------------------------------
   1452 
   1453 - Allow for keyword arguments in the module global functions. Thanks, Allen.
   1454 
   1455 
   1456 Version 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 
   1463 Version 2.0 --- 12 December 2004
   1464 --------------------------------
   1465 
   1466 Significant 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 
   1479 Earlier History
   1480 ---------------
   1481 
   1482 2001-12-04 GDR Created.
   1483 
   1484 2001-12-06 GDR Added command-line interface and source code annotation.
   1485 
   1486 2001-12-09 GDR Moved design and interface to separate documents.
   1487 
   1488 2001-12-10 GDR Open cache file as binary on Windows. Allow simultaneous -e and
   1489 -x, or -a and -r.
   1490 
   1491 2001-12-12 GDR Added command-line help. Cache analysis so that it only needs to
   1492 be done once when you specify -a and -r.
   1493 
   1494 2001-12-13 GDR Improved speed while recording. Portable between Python 1.5.2
   1495 and 2.1.1.
   1496 
   1497 2002-01-03 GDR Module-level functions work correctly.
   1498 
   1499 2002-01-07 GDR Update sys.path when running a file with the -x option, so that
   1500 it matches the value the program would get if it were run on its own.
   1501