{"action":"closed","number":100,"pull_request":{"url":"https://api.github.com/repos/trungdong/prov/pulls/100","id":90112665,"html_url":"https://github.com/trungdong/prov/pull/100","diff_url":"https://github.com/trungdong/prov/pull/100.diff","patch_url":"https://github.com/trungdong/prov/pull/100.patch","issue_url":"https://api.github.com/repos/trungdong/prov/issues/100","number":100,"state":"closed","locked":false,"title":"Pin coverage to latest version 4.2","user":{"login":"pyup-bot","id":16239342,"avatar_url":"https://avatars.githubusercontent.com/u/16239342?v=3","gravatar_id":"","url":"https://api.github.com/users/pyup-bot","html_url":"https://github.com/pyup-bot","followers_url":"https://api.github.com/users/pyup-bot/followers","following_url":"https://api.github.com/users/pyup-bot/following{/other_user}","gists_url":"https://api.github.com/users/pyup-bot/gists{/gist_id}","starred_url":"https://api.github.com/users/pyup-bot/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pyup-bot/subscriptions","organizations_url":"https://api.github.com/users/pyup-bot/orgs","repos_url":"https://api.github.com/users/pyup-bot/repos","events_url":"https://api.github.com/users/pyup-bot/events{/privacy}","received_events_url":"https://api.github.com/users/pyup-bot/received_events","type":"User","site_admin":false},"body":"coverage is not pinned to a specific version.\n\nI'm pinning it to the latest version **4.2** for now.\n\nThese links might come in handy:  <a href=\"http://pypi.python.org/pypi/coverage\">PyPi</a> | <a href=\"https://pyup.io/changelogs/coverage/\">Changelog</a> | <a href=\"https://coverage.readthedocs.io\">Docs</a> \n### Changelog\n\n> ### 4.2\n> ---\n> - Since `concurrency=multiprocessing` uses subprocesses, options specified on\n>   the coverage.py command line will not be communicated down to them.  Only\n>   options in the configuration file will apply to the subprocesses.\n>   Previously, the options didn&#39;t apply to the subprocesses, but there was no\n>   indication.  Now it is an error to use `--concurrency=multiprocessing` and\n>   other run-affecting options on the command line.  This prevents\n>   failures like those reported in `issue 495`_.\n> - Filtering the HTML report is now faster, thanks to Ville SkyttÃ¤.\n> \n> .. _issue 495: https://bitbucket.org/ned/coveragepy/issues/495/branch-and-concurrency-are-conflicting\n> ### 4.2b1\n> ---\n> \n> Work from the PyCon 2016 Sprints!\n> - BACKWARD INCOMPATIBILITY: the `coverage combine` command now ignores an\n>   existing `.coverage` data file.  It used to include that file in its\n>   combining.  This caused confusing results, and extra tox &quot;clean&quot; steps.  If\n>   you want the old behavior, use the new `coverage combine --append` option.\n> - The `concurrency` option can now take multiple values, to support programs\n>   using multiprocessing and another library such as eventlet.  This is only\n>   possible in the configuration file, not from the command line. The\n>   configuration file is the only way for sub-processes to all run with the same\n>   options.  Fixes `issue 484`_.  Thanks to Josh Williams for prototyping.\n> - Using a `concurrency` setting of `multiprocessing` now implies\n>   `--parallel` so that the main program is measured similarly to the\n>   sub-processes.\n> - When using `automatic subprocess measurement`_, running coverage commands\n>   would create spurious data files.  This is now fixed, thanks to diagnosis and\n>   testing by Dan Riti.  Closes `issue 492`_.\n> - A new configuration option, `report:sort`, controls what column of the\n>   text report is used to sort the rows.  Thanks to Dan Wandschneider, this\n>   closes `issue 199`_.\n> - The HTML report has a more-visible indicator for which column is being\n>   sorted.  Closes `issue 298`_, thanks to Josh Williams.\n> - If the HTML report cannot find the source for a file, the message now\n>   suggests using the `-i` flag to allow the report to continue. Closes\n>   `issue 231`_, thanks, Nathan Land.\n> - When reports are ignoring errors, there&#39;s now a warning if a file cannot be\n>   parsed, rather than being silently ignored.  Closes `issue 396`_. Thanks,\n>   Matthew Boehm.\n> - A new option for `coverage debug` is available: `coverage debug config`\n>   shows the current configuration.  Closes `issue 454`_, thanks to Matthew\n>   Boehm.\n> - Running coverage as a module (`python -m coverage`) no longer shows the\n>   program name as `__main__.py`.  Fixes `issue 478`_.  Thanks, Scott Belden.\n> - The `test_helpers` module has been moved into a separate pip-installable\n>   package: `unittest-mixins`_.\n> \n> .. _automatic subprocess measurement: http://coverage.readthedocs.io/en/latest/subprocess.html\n> .. _issue 199: https://bitbucket.org/ned/coveragepy/issues/199/add-a-way-to-sort-the-text-report\n> .. _issue 231: https://bitbucket.org/ned/coveragepy/issues/231/various-default-behavior-in-report-phase\n> .. _issue 298: https://bitbucket.org/ned/coveragepy/issues/298/show-in-html-report-that-the-columns-are\n> .. _issue 396: https://bitbucket.org/ned/coveragepy/issues/396/coverage-xml-shouldnt-bail-out-on-parse\n> .. _issue 454: https://bitbucket.org/ned/coveragepy/issues/454/coverage-debug-config-should-be\n> .. _issue 478: https://bitbucket.org/ned/coveragepy/issues/478/help-shows-silly-program-name-when-running\n> .. _issue 484: https://bitbucket.org/ned/coveragepy/issues/484/multiprocessing-greenlet-concurrency\n> .. _issue 492: https://bitbucket.org/ned/coveragepy/issues/492/subprocess-coverage-strange-detection-of\n> .. _unittest-mixins: https://pypi.python.org/pypi/unittest-mixins\n> ### 4.1\n> ---\n> - The internal attribute `Reporter.file_reporters` was removed in 4.1b3.  It\n>   should have come has no surprise that there were third-party tools out there\n>   using that attribute.  It has been restored, but with a deprecation warning.\n> ### 4.1b3\n> ---\n> - When running your program, execution can jump from an `except X:` line to\n>   some other line when an exception other than `X` happens.  This jump is no\n>   longer considered a branch when measuring branch coverage.\n> - When measuring branch coverage, `yield` statements that were never resumed\n>   were incorrectly marked as missing, as reported in `issue 440`_.  This is now\n>   fixed.\n> - During branch coverage of single-line callables like lambdas and generator\n>   expressions, coverage.py can now distinguish between them never being called,\n>   or being called but not completed.  Fixes `issue 90`_, `issue 460`_ and\n>   `issue 475`_.\n> - The HTML report now has a map of the file along the rightmost edge of the\n>   page, giving an overview of where the missed lines are.  Thanks, Dmitry\n>   Shishov.\n> - The HTML report now uses different monospaced fonts, favoring Consolas over\n>   Courier.  Along the way, `issue 472`_ about not properly handling one-space\n>   indents was fixed.  The index page also has slightly different styling, to\n>   try to make the clickable detail pages more apparent.\n> - Missing branches reported with `coverage report -m` will now say `-&gt;exit`\n>   for missed branches to the exit of a function, rather than a negative number.\n>   Fixes `issue 469`_.\n> - `coverage --help` and `coverage --version` now mention which tracer is\n>   installed, to help diagnose problems. The docs mention which features need\n>   the C extension. (`issue 479`_)\n> - Officially support PyPy 5.1, which required no changes, just updates to the\n>   docs.\n> - The `Coverage.report` function had two parameters with non-None defaults,\n>   which have been changed.  `show_missing` used to default to True, but now\n>   defaults to None.  If you had been calling `Coverage.report` without\n>   specifying `show_missing`, you&#39;ll need to explicitly set it to True to keep\n>   the same behavior.  `skip_covered` used to default to False. It is now None,\n>   which doesn&#39;t change the behavior.  This fixes `issue 485`_.\n> - It&#39;s never been possible to pass a namespace module to one of the analysis\n>   functions, but now at least we raise a more specific error message, rather\n>   than getting confused. (`issue 456`_)\n> - The `coverage.process_startup` function now returns the `Coverage` instance\n>   it creates, as suggested in `issue 481`_.\n> - Make a small tweak to how we compare threads, to avoid buggy custom\n>   comparison code in thread classes. (`issue 245`_)\n> \n> .. _issue 90: https://bitbucket.org/ned/coveragepy/issues/90/lambda-expression-confuses-branch\n> .. _issue 245: https://bitbucket.org/ned/coveragepy/issues/245/change-solution-for-issue-164\n> .. _issue 440: https://bitbucket.org/ned/coveragepy/issues/440/yielded-twisted-failure-marked-as-missed\n> .. _issue 456: https://bitbucket.org/ned/coveragepy/issues/456/coverage-breaks-with-implicit-namespaces\n> .. _issue 460: https://bitbucket.org/ned/coveragepy/issues/460/confusing-html-report-for-certain-partial\n> .. _issue 469: https://bitbucket.org/ned/coveragepy/issues/469/strange-1-line-number-in-branch-coverage\n> .. _issue 472: https://bitbucket.org/ned/coveragepy/issues/472/html-report-indents-incorrectly-for-one\n> .. _issue 475: https://bitbucket.org/ned/coveragepy/issues/475/generator-expression-is-marked-as-not\n> .. _issue 479: https://bitbucket.org/ned/coveragepy/issues/479/clarify-the-need-for-the-c-extension\n> .. _issue 481: https://bitbucket.org/ned/coveragepy/issues/481/asyncioprocesspoolexecutor-tracing-not\n> .. _issue 485: https://bitbucket.org/ned/coveragepy/issues/485/coveragereport-ignores-show_missing-and\n> ### 4.1b2\n> ---\n> - Problems with the new branch measurement in 4.1 beta 1 were fixed:\n>   - Class docstrings were considered executable.  Now they no longer are.\n>   - `yield from` and `await` were considered returns from functions, since\n>     they could tranfer control to the caller.  This produced unhelpful &quot;missing\n>     branch&quot; reports in a number of circumstances.  Now they no longer are\n>     considered returns.\n>   - In unusual situations, a missing branch to a negative number was reported.\n>     This has been fixed, closing `issue 466`_.\n> - The XML report now produces correct package names for modules found in\n>   directories specified with `source=`.  Fixes `issue 465`_.\n> - `coverage report` won&#39;t produce trailing whitespace.\n> \n> .. _issue 465: https://bitbucket.org/ned/coveragepy/issues/465/coveragexml-produces-package-names-with-an\n> .. _issue 466: https://bitbucket.org/ned/coveragepy/issues/466/impossible-missed-branch-to-a-negative\n> ### 4.1b1\n> ---\n> - Branch analysis has been rewritten: it used to be based on bytecode, but now\n>   uses AST analysis.  This has changed a number of things:\n>   - More code paths are now considered runnable, especially in\n>     `try`/`except` structures.  This may mean that coverage.py will\n>     identify more code paths as uncovered.  This could either raise or lower\n>     your overall coverage number.\n>   - Python 3.5&#39;s `async` and `await` keywords are properly supported,\n>     fixing `issue 434`_.\n>   - Some long-standing branch coverage bugs were fixed:\n>     - `issue 129`_: functions with only a docstring for a body would\n>       incorrectly report a missing branch on the `def` line.\n>   - `issue 212`_: code in an `except` block could be incorrectly marked as\n>     a missing branch.\n>   - `issue 146`_: context managers (`with` statements) in a loop or `try`\n>     block could confuse the branch measurement, reporting incorrect partial\n>     branches.\n>   - `issue 422`_: in Python 3.5, an actual partial branch could be marked as\n>     complete.\n> - Pragmas to disable coverage measurement can now be used on decorator lines,\n>   and they will apply to the entire function or class being decorated.  This\n>   implements the feature requested in `issue 131`_.\n> - Multiprocessing support is now available on Windows.  Thanks, Rodrigue\n>   Cloutier.\n> - Files with two encoding declarations are properly supported, fixing\n>   `issue 453`_. Thanks, Max Linke.\n> - Non-ascii characters in regexes in the configuration file worked in 3.7, but\n>   stopped working in 4.0.  Now they work again, closing `issue 455`_.\n> - Form-feed characters would prevent accurate determination of the beginning of\n>   statements in the rest of the file.  This is now fixed, closing `issue 461`_.\n> \n> .. _issue 129: https://bitbucket.org/ned/coveragepy/issues/129/misleading-branch-coverage-of-empty\n> .. _issue 131: https://bitbucket.org/ned/coveragepy/issues/131/pragma-on-a-decorator-line-should-affect\n> .. _issue 146: https://bitbucket.org/ned/coveragepy/issues/146/context-managers-confuse-branch-coverage\n> .. _issue 212: https://bitbucket.org/ned/coveragepy/issues/212/coverage-erroneously-reports-partial\n> .. _issue 422: https://bitbucket.org/ned/coveragepy/issues/422/python35-partial-branch-marked-as-fully\n> .. _issue 434: https://bitbucket.org/ned/coveragepy/issues/434/indexerror-in-python-35\n> .. _issue 453: https://bitbucket.org/ned/coveragepy/issues/453/source-code-encoding-can-only-be-specified\n> .. _issue 455: https://bitbucket.org/ned/coveragepy/issues/455/unusual-exclusions-stopped-working-in\n> .. _issue 461: https://bitbucket.org/ned/coveragepy/issues/461/multiline-asserts-need-too-many-pragma\n> ### 4.0.3\n> ---\n> - Fixed a mysterious problem that manifested in different ways: sometimes\n>   hanging the process (`issue 420`_), sometimes making database connections\n>   fail (`issue 445`_).\n> - The XML report now has correct `&lt;source&gt;` elements when using a\n>   `--source=` option somewhere besides the current directory.  This fixes\n>   `issue 439`_. Thanks, Arcady Ivanov.\n> - Fixed an unusual edge case of detecting source encodings, described in\n>   `issue 443`_.\n> - Help messages that mention the command to use now properly use the actual\n>   command name, which might be different than &quot;coverage&quot;.  Thanks to Ben\n>   Finney, this closes `issue 438`_.\n> \n> .. _issue 420: https://bitbucket.org/ned/coveragepy/issues/420/coverage-40-hangs-indefinitely-on-python27\n> .. _issue 438: https://bitbucket.org/ned/coveragepy/issues/438/parameterise-coverage-command-name\n> .. _issue 439: https://bitbucket.org/ned/coveragepy/issues/439/incorrect-cobertura-file-sources-generated\n> .. _issue 443: https://bitbucket.org/ned/coveragepy/issues/443/coverage-gets-confused-when-encoding\n> .. _issue 445: https://bitbucket.org/ned/coveragepy/issues/445/django-app-cannot-connect-to-cassandra\n> ### 4.0.2\n> ---\n> - More work on supporting unusually encoded source. Fixed `issue 431`_.\n> - Files or directories with non-ASCII characters are now handled properly,\n>   fixing `issue 432`_.\n> - Setting a trace function with sys.settrace was broken by a change in 4.0.1,\n>   as reported in `issue 436`_.  This is now fixed.\n> - Officially support PyPy 4.0, which required no changes, just updates to the\n>   docs.\n> \n> .. _issue 431: https://bitbucket.org/ned/coveragepy/issues/431/couldnt-parse-python-file-with-cp1252\n> .. _issue 432: https://bitbucket.org/ned/coveragepy/issues/432/path-with-unicode-characters-various\n> .. _issue 436: https://bitbucket.org/ned/coveragepy/issues/436/disabled-coverage-ctracer-may-rise-from\n> ### 4.0.1\n> ---\n> - When combining data files, unreadable files will now generate a warning\n>   instead of failing the command.  This is more in line with the older\n>   coverage.py v3.7.1 behavior, which silently ignored unreadable files.\n>   Prompted by `issue 418`_.\n> - The --skip-covered option would skip reporting on 100% covered files, but\n>   also skipped them when calculating total coverage.  This was wrong, it should\n>   only remove lines from the report, not change the final answer.  This is now\n>   fixed, closing `issue 423`_.\n> - In 4.0, the data file recorded a summary of the system on which it was run.\n>   Combined data files would keep all of those summaries.  This could lead to\n>   enormous data files consisting of mostly repetitive useless information. That\n>   summary is now gone, fixing `issue 415`_.  If you want summary information,\n>   get in touch, and we&#39;ll figure out a better way to do it.\n> - Test suites that mocked os.path.exists would experience strange failures, due\n>   to coverage.py using their mock inadvertently.  This is now fixed, closing\n>   `issue 416`_.\n> - Importing a `__init__` module explicitly would lead to an error:\n>   `AttributeError: &#39;module&#39; object has no attribute &#39;__path__&#39;`, as reported\n>   in `issue 410`_.  This is now fixed.\n> - Code that uses `sys.settrace(sys.gettrace())` used to incur a more than 2x\n>   speed penalty.  Now there&#39;s no penalty at all. Fixes `issue 397`_.\n> - Pyexpat C code will no longer be recorded as a source file, fixing\n>   `issue 419`_.\n> - The source kit now contains all of the files needed to have a complete source\n>   tree, re-fixing `issue 137`_ and closing `issue 281`_.\n> \n> .. _issue 281: https://bitbucket.org/ned/coveragepy/issues/281/supply-scripts-for-testing-in-the\n> .. _issue 397: https://bitbucket.org/ned/coveragepy/issues/397/stopping-and-resuming-coverage-with\n> .. _issue 410: https://bitbucket.org/ned/coveragepy/issues/410/attributeerror-module-object-has-no\n> .. _issue 415: https://bitbucket.org/ned/coveragepy/issues/415/repeated-coveragedataupdates-cause\n> .. _issue 416: https://bitbucket.org/ned/coveragepy/issues/416/mocking-ospathexists-causes-failures\n> .. _issue 418: https://bitbucket.org/ned/coveragepy/issues/418/json-parse-error\n> .. _issue 419: https://bitbucket.org/ned/coveragepy/issues/419/nosource-no-source-for-code-path-to-c\n> .. _issue 423: https://bitbucket.org/ned/coveragepy/issues/423/skip_covered-changes-reported-total\n> ### 4.0\n> ---\n> ### 4.0b3\n> ---\n> - Reporting on an unmeasured file would fail with a traceback.  This is now\n>   fixed, closing `issue 403`_.\n> - The Jenkins ShiningPanda plugin looks for an obsolete file name to find the\n>   HTML reports to publish, so it was failing under coverage.py 4.0.  Now we\n>   create that file if we are running under Jenkins, to keep things working\n>   smoothly. `issue 404`_.\n> - Kits used to include tests and docs, but didn&#39;t install them anywhere, or\n>   provide all of the supporting tools to make them useful.  Kits no longer\n>   include tests and docs.  If you were using them from the older packages, get\n>   in touch and help me understand how.\n> \n> .. _issue 403: https://bitbucket.org/ned/coveragepy/issues/403/hasherupdate-fails-with-typeerror-nonetype\n> .. _issue 404: https://bitbucket.org/ned/coveragepy/issues/404/shiningpanda-jenkins-plugin-cant-find-html\n> ### 4.0b2\n> ---\n> - 4.0b1 broke `--append` creating new data files.  This is now fixed, closing\n>   `issue 392`_.\n> - `py.test --cov` can write empty data, then touch files due to `--source`,\n>   which made coverage.py mistakenly force the data file to record lines instead\n>   of arcs.  This would lead to a &quot;Can&#39;t combine line data with arc data&quot; error\n>   message.  This is now fixed, and changed some method names in the\n>   CoverageData interface.  Fixes `issue 399`_.\n> - `CoverageData.read_fileobj` and `CoverageData.write_fileobj` replace the\n>   `.read` and `.write` methods, and are now properly inverses of each other.\n> - When using `report --skip-covered`, a message will now be included in the\n>   report output indicating how many files were skipped, and if all files are\n>   skipped, coverage.py won&#39;t accidentally scold you for having no data to\n>   report.  Thanks, Krystian Kichewko.\n> - A new conversion utility has been added:  `python -m coverage.pickle2json`\n>   will convert v3.x pickle data files to v4.x JSON data files.  Thanks,\n>   Alexander Todorov.  Closes `issue 395`_.\n> - A new version identifier is available, `coverage.version_info`, a plain tuple\n>   of values similar to `sys.version_info`_.\n> \n> .. _issue 392: https://bitbucket.org/ned/coveragepy/issues/392/run-append-doesnt-create-coverage-file\n> .. _issue 395: https://bitbucket.org/ned/coveragepy/issues/395/rfe-read-pickled-files-as-well-for\n> .. _issue 399: https://bitbucket.org/ned/coveragepy/issues/399/coverageexception-cant-combine-line-data\n> .. _sys.version_info: https://docs.python.org/3/library/sys.htmlsys.version_info\n> ### 4.0b1\n> ---\n> - Coverage.py is now licensed under the Apache 2.0 license.  See NOTICE.txt for\n>   details.  Closes `issue 313`_.\n> - The data storage has been completely revamped.  The data file is now\n>   JSON-based instead of a pickle, closing `issue 236`_.  The `CoverageData`\n>   class is now a public supported documented API to the data file.\n> - A new configuration option, `[run] note`, lets you set a note that will be\n>   stored in the `runs` section of the data file.  You can use this to annotate\n>   the data file with any information you like.\n> - Unrecognized configuration options will now print an error message and stop\n>   coverage.py.  This should help prevent configuration mistakes from passing\n>   silently.  Finishes `issue 386`_.\n> - In parallel mode, `coverage erase` will now delete all of the data files,\n>   fixing `issue 262`_.\n> - Coverage.py now accepts a directory name for `coverage run` and will run a\n>   `__main__.py` found there, just like Python will.  Fixes `issue 252`_.\n>   Thanks, Dmitry Trofimov.\n> - The XML report now includes a `missing-branches` attribute.  Thanks, Steve\n>   Peak.  This is not a part of the Cobertura DTD, so the XML report no longer\n>   references the DTD.\n> - Missing branches in the HTML report now have a bit more information in the\n>   right-hand annotations.  Hopefully this will make their meaning clearer.\n> - All the reporting functions now behave the same if no data had been\n>   collected, exiting with a status code of 1.  Fixed `fail_under` to be\n>   applied even when the report is empty.  Thanks, Ionel Cristian MÄrieÈ.\n> - Plugins are now initialized differently.  Instead of looking for a class\n>   called `Plugin`, coverage.py looks for a function called `coverage_init`.\n> - A file-tracing plugin can now ask to have built-in Python reporting by\n>   returning `&quot;python&quot;` from its `file_reporter()` method.\n> - Code that was executed with `exec` would be mis-attributed to the file that\n>   called it.  This is now fixed, closing `issue 380`_.\n> - The ability to use item access on `Coverage.config` (introduced in 4.0a2) has\n>   been changed to a more explicit `Coverage.get_option` and\n>   `Coverage.set_option` API.\n> - The `Coverage.use_cache` method is no longer supported.\n> - The private method `Coverage._harvest_data` is now called\n>   `Coverage.get_data`, and returns the `CoverageData` containing the\n>   collected data.\n> - The project is consistently referred to as &quot;coverage.py&quot; throughout the code\n>   and the documentation, closing `issue 275`_.\n> - Combining data files with an explicit configuration file was broken in 4.0a6,\n>   but now works again, closing `issue 385`_.\n> - `coverage combine` now accepts files as well as directories.\n> - The speed is back to 3.7.1 levels, after having slowed down due to plugin\n>   support, finishing up `issue 387`_.\n> \n> .. _issue 236: https://bitbucket.org/ned/coveragepy/issues/236/pickles-are-bad-and-you-should-feel-bad\n> .. _issue 252: https://bitbucket.org/ned/coveragepy/issues/252/coverage-wont-run-a-program-with\n> .. _issue 262: https://bitbucket.org/ned/coveragepy/issues/262/when-parallel-true-erase-should-erase-all\n> .. _issue 275: https://bitbucket.org/ned/coveragepy/issues/275/refer-consistently-to-project-as-coverage\n> .. _issue 313: https://bitbucket.org/ned/coveragepy/issues/313/add-license-file-containing-2-3-or-4\n> .. _issue 380: https://bitbucket.org/ned/coveragepy/issues/380/code-executed-by-exec-excluded-from\n> .. _issue 385: https://bitbucket.org/ned/coveragepy/issues/385/coverage-combine-doesnt-work-with-rcfile\n> .. _issue 386: https://bitbucket.org/ned/coveragepy/issues/386/error-on-unrecognised-configuration\n> .. _issue 387: https://bitbucket.org/ned/coveragepy/issues/387/performance-degradation-from-371-to-40\n> \n> .. 40 issues closed in 4.0 below here\n> ### 4.0a6\n> ---\n> - Python 3.5b2 and PyPy 2.6.0 are supported.\n> - The original module-level function interface to coverage.py is no longer\n>   supported.  You must now create a `coverage.Coverage` object, and use\n>   methods on it.\n> - The `coverage combine` command now accepts any number of directories as\n>   arguments, and will combine all the data files from those directories.  This\n>   means you don&#39;t have to copy the files to one directory before combining.\n>   Thanks, Christine Lytwynec.  Finishes `issue 354`_.\n> - Branch coverage couldn&#39;t properly handle certain extremely long files. This\n>   is now fixed (`issue 359`_).\n> - Branch coverage didn&#39;t understand yield statements properly.  Mickie Betz\n>   persisted in pursuing this despite Ned&#39;s pessimism.  Fixes `issue 308`_ and\n>   `issue 324`_.\n> - The COVERAGE_DEBUG environment variable can be used to set the `[run] debug`\n>   configuration option to control what internal operations are logged.\n> - HTML reports were truncated at formfeed characters.  This is now fixed\n>   (`issue 360`_).  It&#39;s always fun when the problem is due to a `bug in the\n>   Python standard library &lt;http://bugs.python.org/issue19035&gt;`_.\n> - Files with incorrect encoding declaration comments are no longer ignored by\n>   the reporting commands, fixing `issue 351`_.\n> - HTML reports now include a timestamp in the footer, closing `issue 299`_.\n>   Thanks, Conrad Ho.\n> - HTML reports now begrudgingly use double-quotes rather than single quotes,\n>   because there are &quot;software engineers&quot; out there writing tools that read HTML\n>   and somehow have no idea that single quotes exist.  Capitulates to the absurd\n>   `issue 361`_.  Thanks, Jon Chappell.\n> - The `coverage annotate` command now handles non-ASCII characters properly,\n>   closing `issue 363`_.  Thanks, Leonardo Pistone.\n> - Drive letters on Windows were not normalized correctly, now they are. Thanks,\n>   Ionel Cristian MÄrieÈ.\n> - Plugin support had some bugs fixed, closing `issue 374`_ and `issue 375`_.\n>   Thanks, Stefan Behnel.\n> \n> .. _issue 299: https://bitbucket.org/ned/coveragepy/issue/299/inserted-created-on-yyyy-mm-dd-hh-mm-in\n> .. _issue 308: https://bitbucket.org/ned/coveragepy/issue/308/yield-lambda-branch-coverage\n> .. _issue 324: https://bitbucket.org/ned/coveragepy/issue/324/yield-in-loop-confuses-branch-coverage\n> .. _issue 351: https://bitbucket.org/ned/coveragepy/issue/351/files-with-incorrect-encoding-are-ignored\n> .. _issue 354: https://bitbucket.org/ned/coveragepy/issue/354/coverage-combine-should-take-a-list-of\n> .. _issue 359: https://bitbucket.org/ned/coveragepy/issue/359/xml-report-chunk-error\n> .. _issue 360: https://bitbucket.org/ned/coveragepy/issue/360/html-reports-get-confused-by-l-in-the-code\n> .. _issue 361: https://bitbucket.org/ned/coveragepy/issue/361/use-double-quotes-in-html-output-to\n> .. _issue 363: https://bitbucket.org/ned/coveragepy/issue/363/annotate-command-hits-unicode-happy-fun\n> .. _issue 374: https://bitbucket.org/ned/coveragepy/issue/374/c-tracer-lookups-fail-in\n> .. _issue 375: https://bitbucket.org/ned/coveragepy/issue/375/ctracer_handle_return-reads-byte-code\n> ### 4.0a5\n> ---\n> - Plugin support is now implemented in the C tracer instead of the Python\n>   tracer. This greatly improves the speed of tracing projects using plugins.\n> - Coverage.py now always adds the current directory to sys.path, so that\n>   plugins can import files in the current directory (`issue 358`_).\n> - If the `config_file` argument to the Coverage constructor is specified as\n>   &quot;.coveragerc&quot;, it is treated as if it were True.  This means setup.cfg is\n>   also examined, and a missing file is not considered an error (`issue 357`_).\n> - Wildly experimental: support for measuring processes started by the\n>   multiprocessing module.  To use, set `--concurrency=multiprocessing`,\n>   either on the command line or in the .coveragerc file (`issue 117`_). Thanks,\n>   Eduardo Schettino.  Currently, this does not work on Windows.\n> - A new warning is possible, if a desired file isn&#39;t measured because it was\n>   imported before coverage.py was started (`issue 353`_).\n> - The `coverage.process_startup` function now will start coverage measurement\n>   only once, no matter how many times it is called.  This fixes problems due\n>   to unusual virtualenv configurations (`issue 340`_).\n> - Added 3.5.0a1 to the list of supported CPython versions.\n> \n> .. _issue 117: https://bitbucket.org/ned/coveragepy/issue/117/enable-coverage-measurement-of-code-run-by\n> .. _issue 340: https://bitbucket.org/ned/coveragepy/issue/340/keyerror-subpy\n> .. _issue 353: https://bitbucket.org/ned/coveragepy/issue/353/40a3-introduces-an-unexpected-third-case\n> .. _issue 357: https://bitbucket.org/ned/coveragepy/issue/357/behavior-changed-when-coveragerc-is\n> .. _issue 358: https://bitbucket.org/ned/coveragepy/issue/358/all-coverage-commands-should-adjust\n> ### 4.0a4\n> ---\n> - Plugins can now provide sys_info for debugging output.\n> - Started plugins documentation.\n> - Prepared to move the docs to readthedocs.org.\n> ### 4.0a3\n> ---\n> - Reports now use file names with extensions.  Previously, a report would\n>   describe a/b/c.py as &quot;a/b/c&quot;.  Now it is shown as &quot;a/b/c.py&quot;.  This allows\n>   for better support of non-Python files, and also fixed `issue 69`_.\n> - The XML report now reports each directory as a package again.  This was a bad\n>   regression, I apologize.  This was reported in `issue 235`_, which is now\n>   fixed.\n> - A new configuration option for the XML report: `[xml] package_depth`\n>   controls which directories are identified as packages in the report.\n>   Directories deeper than this depth are not reported as packages.\n>   The default is that all directories are reported as packages.\n>   Thanks, Lex Berezhny.\n> - When looking for the source for a frame, check if the file exists. On\n>   Windows, .pyw files are no longer recorded as .py files. Along the way, this\n>   fixed `issue 290`_.\n> - Empty files are now reported as 100% covered in the XML report, not 0%\n>   covered (`issue 345`_).\n> - Regexes in the configuration file are now compiled as soon as they are read,\n>   to provide error messages earlier (`issue 349`_).\n> \n> .. _issue 69: https://bitbucket.org/ned/coveragepy/issue/69/coverage-html-overwrite-files-that-doesnt\n> .. _issue 235: https://bitbucket.org/ned/coveragepy/issue/235/package-name-is-missing-in-xml-report\n> .. _issue 290: https://bitbucket.org/ned/coveragepy/issue/290/running-programmatically-with-pyw-files\n> .. _issue 345: https://bitbucket.org/ned/coveragepy/issue/345/xml-reports-line-rate-0-for-empty-files\n> .. _issue 349: https://bitbucket.org/ned/coveragepy/issue/349/bad-regex-in-config-should-get-an-earlier\n> ### 4.0a2\n> ---\n> - Officially support PyPy 2.4, and PyPy3 2.4.  Drop support for\n>   CPython 3.2 and older versions of PyPy.  The code won&#39;t work on CPython 3.2.\n>   It will probably still work on older versions of PyPy, but I&#39;m not testing\n>   against them.\n> - Plugins!\n> - The original command line switches (`-x` to run a program, etc) are no\n>   longer supported.\n> - A new option: `coverage report --skip-covered` will reduce the number of\n>   files reported by skipping files with 100% coverage.  Thanks, Krystian\n>   Kichewko.  This means that empty `__init__.py` files will be skipped, since\n>   they are 100% covered, closing `issue 315`_.\n> - You can now specify the `--fail-under` option in the `.coveragerc` file\n>   as the `[report] fail_under` option.  This closes `issue 314`_.\n> - The `COVERAGE_OPTIONS` environment variable is no longer supported.  It was\n>   a hack for `--timid` before configuration files were available.\n> - The HTML report now has filtering.  Type text into the Filter box on the\n>   index page, and only modules with that text in the name will be shown.\n>   Thanks, Danny Allen.\n> - The textual report and the HTML report used to report partial branches\n>   differently for no good reason.  Now the text report&#39;s &quot;missing branches&quot;\n>   column is a &quot;partial branches&quot; column so that both reports show the same\n>   numbers.  This closes `issue 342`_.\n> - If you specify a `--rcfile` that cannot be read, you will get an error\n>   message.  Fixes `issue 343`_.\n> - The `--debug` switch can now be used on any command.\n> - You can now programmatically adjust the configuration of coverage.py by\n>   setting items on `Coverage.config` after construction.\n> - A module run with `-m` can be used as the argument to `--source`, fixing\n>   `issue 328`_.  Thanks, Buck Evan.\n> - The regex for matching exclusion pragmas has been fixed to allow more kinds\n>   of whitespace, fixing `issue 334`_.\n> - Made some PyPy-specific tweaks to improve speed under PyPy.  Thanks, Alex\n>   Gaynor.\n> - In some cases, with a source file missing a final newline, coverage.py would\n>   count statements incorrectly.  This is now fixed, closing `issue 293`_.\n> - The status.dat file that HTML reports use to avoid re-creating files that\n>   haven&#39;t changed is now a JSON file instead of a pickle file.  This obviates\n>   `issue 287`_ and `issue 237`_.\n> \n> .. _issue 237: https://bitbucket.org/ned/coveragepy/issue/237/htmlcov-with-corrupt-statusdat\n> .. _issue 287: https://bitbucket.org/ned/coveragepy/issue/287/htmlpy-doesnt-specify-pickle-protocol\n> .. _issue 293: https://bitbucket.org/ned/coveragepy/issue/293/number-of-statement-detection-wrong-if-no\n> .. _issue 314: https://bitbucket.org/ned/coveragepy/issue/314/fail_under-param-not-working-in-coveragerc\n> .. _issue 315: https://bitbucket.org/ned/coveragepy/issue/315/option-to-omit-empty-files-eg-__init__py\n> .. _issue 328: https://bitbucket.org/ned/coveragepy/issue/328/misbehavior-in-run-source\n> .. _issue 334: https://bitbucket.org/ned/coveragepy/issue/334/pragma-not-recognized-if-tab-character\n> .. _issue 342: https://bitbucket.org/ned/coveragepy/issue/342/console-and-html-coverage-reports-differ\n> .. _issue 343: https://bitbucket.org/ned/coveragepy/issue/343/an-explicitly-named-non-existent-config\n> ### 4.0a1\n> ---\n> - Python versions supported are now CPython 2.6, 2.7, 3.2, 3.3, and 3.4, and\n>   PyPy 2.2.\n> - Gevent, eventlet, and greenlet are now supported, closing `issue 149`_.\n>   The `concurrency` setting specifies the concurrency library in use.  Huge\n>   thanks to Peter Portante for initial implementation, and to Joe Jevnik for\n>   the final insight that completed the work.\n> - Options are now also read from a setup.cfg file, if any.  Sections are\n>   prefixed with &quot;coverage:&quot;, so the `[run]` options will be read from the\n>   `[coverage:run]` section of setup.cfg.  Finishes `issue 304`_.\n> - The `report -m` command can now show missing branches when reporting on\n>   branch coverage.  Thanks, Steve Leonard. Closes `issue 230`_.\n> - The XML report now contains a &lt;source&gt; element, fixing `issue 94`_.  Thanks\n>   Stan Hu.\n> - The class defined in the coverage module is now called `Coverage` instead\n>   of `coverage`, though the old name still works, for backward compatibility.\n> - The `fail-under` value is now rounded the same as reported results,\n>   preventing paradoxical results, fixing `issue 284`_.\n> - The XML report will now create the output directory if need be, fixing\n>   `issue 285`_.  Thanks, Chris Rose.\n> - HTML reports no longer raise UnicodeDecodeError if a Python file has\n>   undecodable characters, fixing `issue 303`_ and `issue 331`_.\n> - The annotate command will now annotate all files, not just ones relative to\n>   the current directory, fixing `issue 57`_.\n> - The coverage module no longer causes deprecation warnings on Python 3.4 by\n>   importing the imp module, fixing `issue 305`_.\n> - Encoding declarations in source files are only considered if they are truly\n>   comments.  Thanks, Anthony Sottile.\n> \n> .. _issue 57: https://bitbucket.org/ned/coveragepy/issue/57/annotate-command-fails-to-annotate-many\n> .. _issue 94: https://bitbucket.org/ned/coveragepy/issue/94/coverage-xml-doesnt-produce-sources\n> .. _issue 149: https://bitbucket.org/ned/coveragepy/issue/149/coverage-gevent-looks-broken\n> .. _issue 230: https://bitbucket.org/ned/coveragepy/issue/230/show-line-no-for-missing-branches-in\n> .. _issue 284: https://bitbucket.org/ned/coveragepy/issue/284/fail-under-should-show-more-precision\n> .. _issue 285: https://bitbucket.org/ned/coveragepy/issue/285/xml-report-fails-if-output-file-directory\n> .. _issue 303: https://bitbucket.org/ned/coveragepy/issue/303/unicodedecodeerror\n> .. _issue 304: https://bitbucket.org/ned/coveragepy/issue/304/attempt-to-get-configuration-from-setupcfg\n> .. _issue 305: https://bitbucket.org/ned/coveragepy/issue/305/pendingdeprecationwarning-the-imp-module\n> .. _issue 331: https://bitbucket.org/ned/coveragepy/issue/331/failure-of-encoding-detection-on-python2\n> ### 3.7.1\n> ---\n> - Improved the speed of HTML report generation by about 20%.\n> - Fixed the mechanism for finding OS-installed static files for the HTML report\n>   so that it will actually find OS-installed static files.\n> ### 3.7\n> ---\n> - Added the `--debug` switch to `coverage run`.  It accepts a list of\n>   options indicating the type of internal activity to log to stderr.\n> - Improved the branch coverage facility, fixing `issue 92`_ and `issue 175`_.\n> - Running code with `coverage run -m` now behaves more like Python does,\n>   setting sys.path properly, which fixes `issue 207`_ and `issue 242`_.\n> - Coverage.py can now run .pyc files directly, closing `issue 264`_.\n> - Coverage.py properly supports .pyw files, fixing `issue 261`_.\n> - Omitting files within a tree specified with the `source` option would\n>   cause them to be incorrectly marked as unexecuted, as described in\n>   `issue 218`_.  This is now fixed.\n> - When specifying paths to alias together during data combining, you can now\n>   specify relative paths, fixing `issue 267`_.\n> - Most file paths can now be specified with username expansion (`~/src`, or\n>   `~build/src`, for example), and with environment variable expansion\n>   (`build/$BUILDNUM/src`).\n> - Trying to create an XML report with no files to report on, would cause a\n>   ZeroDivideError, but no longer does, fixing `issue 250`_.\n> - When running a threaded program under the Python tracer, coverage.py no\n>   longer issues a spurious warning about the trace function changing: &quot;Trace\n>   function changed, measurement is likely wrong: None.&quot;  This fixes `issue\n>   164`_.\n> - Static files necessary for HTML reports are found in system-installed places,\n>   to ease OS-level packaging of coverage.py.  Closes `issue 259`_.\n> - Source files with encoding declarations, but a blank first line, were not\n>   decoded properly.  Now they are.  Thanks, Roger Hu.\n> - The source kit now includes the `__main__.py` file in the root coverage\n>   directory, fixing `issue 255`_.\n> \n> .. _issue 92: https://bitbucket.org/ned/coveragepy/issue/92/finally-clauses-arent-treated-properly-in\n> .. _issue 164: https://bitbucket.org/ned/coveragepy/issue/164/trace-function-changed-warning-when-using\n> .. _issue 175: https://bitbucket.org/ned/coveragepy/issue/175/branch-coverage-gets-confused-in-certain\n> .. _issue 207: https://bitbucket.org/ned/coveragepy/issue/207/run-m-cannot-find-module-or-package-in\n> .. _issue 242: https://bitbucket.org/ned/coveragepy/issue/242/running-a-two-level-package-doesnt-work\n> .. _issue 218: https://bitbucket.org/ned/coveragepy/issue/218/run-command-does-not-respect-the-omit-flag\n> .. _issue 250: https://bitbucket.org/ned/coveragepy/issue/250/uncaught-zerodivisionerror-when-generating\n> .. _issue 255: https://bitbucket.org/ned/coveragepy/issue/255/directory-level-__main__py-not-included-in\n> .. _issue 259: https://bitbucket.org/ned/coveragepy/issue/259/allow-use-of-system-installed-third-party\n> .. _issue 261: https://bitbucket.org/ned/coveragepy/issue/261/pyw-files-arent-reported-properly\n> .. _issue 264: https://bitbucket.org/ned/coveragepy/issue/264/coverage-wont-run-pyc-files\n> .. _issue 267: https://bitbucket.org/ned/coveragepy/issue/267/relative-path-aliases-dont-work\n> ### 3.6\n> ---\n> - Added a page to the docs about troublesome situations, closing `issue 226`_,\n>   and added some info to the TODO file, closing `issue 227`_.\n> \n> .. _issue 226: https://bitbucket.org/ned/coveragepy/issue/226/make-readme-section-to-describe-when\n> .. _issue 227: https://bitbucket.org/ned/coveragepy/issue/227/update-todo\n> ### 3.6b3\n> ---\n> - Beta 2 broke the nose plugin. It&#39;s fixed again, closing `issue 224`_.\n> \n> .. _issue 224: https://bitbucket.org/ned/coveragepy/issue/224/36b2-breaks-nosexcover\n> ### 3.6b2\n> ---\n> - Coverage.py runs on Python 2.3 and 2.4 again. It was broken in 3.6b1.\n> - The C extension is optionally compiled using a different more widely-used\n>   technique, taking another stab at fixing `issue 80`_ once and for all.\n> - Combining data files would create entries for phantom files if used with\n>   `source` and path aliases.  It no longer does.\n> - `debug sys` now shows the configuration file path that was read.\n> - If an oddly-behaved package claims that code came from an empty-string\n>   file name, coverage.py no longer associates it with the directory name,\n>   fixing `issue 221`_.\n> \n> .. _issue 221: https://bitbucket.org/ned/coveragepy/issue/221/coveragepy-incompatible-with-pyratemp\n> ### 3.6b1\n> ---\n> - Wildcards in `include=` and `omit=` arguments were not handled properly\n>   in reporting functions, though they were when running.  Now they are handled\n>   uniformly, closing `issue 143`_ and `issue 163`_.  **NOTE**: it is possible\n>   that your configurations may now be incorrect.  If you use `include` or\n>   `omit` during reporting, whether on the command line, through the API, or\n>   in a configuration file, please check carefully that you were not relying on\n>   the old broken behavior.\n> - The **report**, **html**, and **xml** commands now accept a `--fail-under`\n>   switch that indicates in the exit status whether the coverage percentage was\n>   less than a particular value.  Closes `issue 139`_.\n> - The reporting functions coverage.report(), coverage.html_report(), and\n>   coverage.xml_report() now all return a float, the total percentage covered\n>   measurement.\n> - The HTML report&#39;s title can now be set in the configuration file, with the\n>   `--title` switch on the command line, or via the API.\n> - Configuration files now support substitution of environment variables, using\n>   syntax like `${WORD}`.  Closes `issue 97`_.\n> - Embarrassingly, the `[xml] output=` setting in the .coveragerc file simply\n>   didn&#39;t work.  Now it does.\n> - The XML report now consistently uses file names for the file name attribute,\n>   rather than sometimes using module names.  Fixes `issue 67`_.\n>   Thanks, Marcus Cobden.\n> - Coverage percentage metrics are now computed slightly differently under\n>   branch coverage.  This means that completely unexecuted files will now\n>   correctly have 0% coverage, fixing `issue 156`_.  This also means that your\n>   total coverage numbers will generally now be lower if you are measuring\n>   branch coverage.\n> - When installing, now in addition to creating a &quot;coverage&quot; command, two new\n>   aliases are also installed.  A &quot;coverage2&quot; or &quot;coverage3&quot; command will be\n>   created, depending on whether you are installing in Python 2.x or 3.x.\n>   A &quot;coverage-X.Y&quot; command will also be created corresponding to your specific\n>   version of Python.  Closes `issue 111`_.\n> - The coverage.py installer no longer tries to bootstrap setuptools or\n>   Distribute.  You must have one of them installed first, as `issue 202`_\n>   recommended.\n> - The coverage.py kit now includes docs (closing `issue 137`_) and tests.\n> - On Windows, files are now reported in their correct case, fixing `issue 89`_\n>   and `issue 203`_.\n> - If a file is missing during reporting, the path shown in the error message\n>   is now correct, rather than an incorrect path in the current directory.\n>   Fixes `issue 60`_.\n> - Running an HTML report in Python 3 in the same directory as an old Python 2\n>   HTML report would fail with a UnicodeDecodeError. This issue (`issue 193`_)\n>   is now fixed.\n> - Fixed yet another error trying to parse non-Python files as Python, this\n>   time an IndentationError, closing `issue 82`_ for the fourth time...\n> - If `coverage xml` fails because there is no data to report, it used to\n>   create a zero-length XML file.  Now it doesn&#39;t, fixing `issue 210`_.\n> - Jython files now work with the `--source` option, fixing `issue 100`_.\n> - Running coverage.py under a debugger is unlikely to work, but it shouldn&#39;t\n>   fail with &quot;TypeError: &#39;NoneType&#39; object is not iterable&quot;.  Fixes `issue\n>   201`_.\n> - On some Linux distributions, when installed with the OS package manager,\n>   coverage.py would report its own code as part of the results.  Now it won&#39;t,\n>   fixing `issue 214`_, though this will take some time to be repackaged by the\n>   operating systems.\n> - Docstrings for the legacy singleton methods are more helpful.  Thanks Marius\n>   Gedminas.  Closes `issue 205`_.\n> - The pydoc tool can now show documentation for the class `coverage.coverage`.\n>   Closes `issue 206`_.\n> - Added a page to the docs about contributing to coverage.py, closing\n>   `issue 171`_.\n> - When coverage.py ended unsuccessfully, it may have reported odd errors like\n>   `&#39;NoneType&#39; object has no attribute &#39;isabs&#39;`.  It no longer does,\n>   so kiss `issue 153`_ goodbye.\n> \n> .. _issue 60: https://bitbucket.org/ned/coveragepy/issue/60/incorrect-path-to-orphaned-pyc-files\n> .. _issue 67: https://bitbucket.org/ned/coveragepy/issue/67/xml-report-filenames-may-be-generated\n> .. _issue 89: https://bitbucket.org/ned/coveragepy/issue/89/on-windows-all-packages-are-reported-in\n> .. _issue 97: https://bitbucket.org/ned/coveragepy/issue/97/allow-environment-variables-to-be\n> .. _issue 100: https://bitbucket.org/ned/coveragepy/issue/100/source-directive-doesnt-work-for-packages\n> .. _issue 111: https://bitbucket.org/ned/coveragepy/issue/111/when-installing-coverage-with-pip-not\n> .. _issue 137: https://bitbucket.org/ned/coveragepy/issue/137/provide-docs-with-source-distribution\n> .. _issue 139: https://bitbucket.org/ned/coveragepy/issue/139/easy-check-for-a-certain-coverage-in-tests\n> .. _issue 143: https://bitbucket.org/ned/coveragepy/issue/143/omit-doesnt-seem-to-work-in-coverage\n> .. _issue 153: https://bitbucket.org/ned/coveragepy/issue/153/non-existent-filename-triggers\n> .. _issue 156: https://bitbucket.org/ned/coveragepy/issue/156/a-completely-unexecuted-file-shows-14\n> .. _issue 163: https://bitbucket.org/ned/coveragepy/issue/163/problem-with-include-and-omit-filename\n> .. _issue 171: https://bitbucket.org/ned/coveragepy/issue/171/how-to-contribute-and-run-tests\n> .. _issue 193: https://bitbucket.org/ned/coveragepy/issue/193/unicodedecodeerror-on-htmlpy\n> .. _issue 201: https://bitbucket.org/ned/coveragepy/issue/201/coverage-using-django-14-with-pydb-on\n> .. _issue 202: https://bitbucket.org/ned/coveragepy/issue/202/get-rid-of-ez_setuppy-and\n> .. _issue 203: https://bitbucket.org/ned/coveragepy/issue/203/duplicate-filenames-reported-when-filename\n> .. _issue 205: https://bitbucket.org/ned/coveragepy/issue/205/make-pydoc-coverage-more-friendly\n> .. _issue 206: https://bitbucket.org/ned/coveragepy/issue/206/pydoc-coveragecoverage-fails-with-an-error\n> .. _issue 210: https://bitbucket.org/ned/coveragepy/issue/210/if-theres-no-coverage-data-coverage-xml\n> .. _issue 214: https://bitbucket.org/ned/coveragepy/issue/214/coveragepy-measures-itself-on-precise\n> ### 3.5.3\n> ---\n> - Line numbers in the HTML report line up better with the source lines, fixing\n>   `issue 197`_, thanks Marius Gedminas.\n> - When specifying a directory as the source= option, the directory itself no\n>   longer needs to have a `__init__.py` file, though its sub-directories do,\n>   to be considered as source files.\n> - Files encoded as UTF-8 with a BOM are now properly handled, fixing\n>   `issue 179`_.  Thanks, Pablo Carballo.\n> - Fixed more cases of non-Python files being reported as Python source, and\n>   then not being able to parse them as Python.  Closes `issue 82`_ (again).\n>   Thanks, Julian Berman.\n> - Fixed memory leaks under Python 3, thanks, Brett Cannon. Closes `issue 147`_.\n> - Optimized .pyo files may not have been handled correctly, `issue 195`_.\n>   Thanks, Marius Gedminas.\n> - Certain unusually named file paths could have been mangled during reporting,\n>   `issue 194`_.  Thanks, Marius Gedminas.\n> - Try to do a better job of the impossible task of detecting when we can&#39;t\n>   build the C extension, fixing `issue 183`_.\n> - Testing is now done with `tox`_, thanks, Marc Abramowitz.\n> \n> .. _issue 147: https://bitbucket.org/ned/coveragepy/issue/147/massive-memory-usage-by-ctracer\n> .. _issue 179: https://bitbucket.org/ned/coveragepy/issue/179/htmlreporter-fails-when-source-file-is\n> .. _issue 183: https://bitbucket.org/ned/coveragepy/issue/183/install-fails-for-python-23\n> .. _issue 194: https://bitbucket.org/ned/coveragepy/issue/194/filelocatorrelative_filename-could-mangle\n> .. _issue 195: https://bitbucket.org/ned/coveragepy/issue/195/pyo-file-handling-in-codeunit\n> .. _issue 197: https://bitbucket.org/ned/coveragepy/issue/197/line-numbers-in-html-report-do-not-align\n> .. _tox: http://tox.readthedocs.org/\n> ### 3.5.2\n> ---\n> ### 3.5.2b1\n> ---\n> - The HTML report has slightly tweaked controls: the buttons at the top of\n>   the page are color-coded to the source lines they affect.\n> - Custom CSS can be applied to the HTML report by specifying a CSS file as\n>   the `extra_css` configuration value in the `[html]` section.\n> - Source files with custom encodings declared in a comment at the top are now\n>   properly handled during reporting on Python 2.  Python 3 always handled them\n>   properly.  This fixes `issue 157`_.\n> - Backup files left behind by editors are no longer collected by the source=\n>   option, fixing `issue 168`_.\n> - If a file doesn&#39;t parse properly as Python, we don&#39;t report it as an error\n>   if the file name seems like maybe it wasn&#39;t meant to be Python.  This is a\n>   pragmatic fix for `issue 82`_.\n> - The `-m` switch on `coverage report`, which includes missing line numbers\n>   in the summary report, can now be specified as `show_missing` in the\n>   config file.  Closes `issue 173`_.\n> - When running a module with `coverage run -m &lt;modulename&gt;`, certain details\n>   of the execution environment weren&#39;t the same as for\n>   `python -m &lt;modulename&gt;`.  This had the unfortunate side-effect of making\n>   `coverage run -m unittest discover` not work if you had tests in a\n>   directory named &quot;test&quot;.  This fixes `issue 155`_ and `issue 142`_.\n> - Now the exit status of your product code is properly used as the process\n>   status when running `python -m coverage run ...`.  Thanks, JT Olds.\n> - When installing into pypy, we no longer attempt (and fail) to compile\n>   the C tracer function, closing `issue 166`_.\n> \n> .. _issue 142: https://bitbucket.org/ned/coveragepy/issue/142/executing-python-file-syspath-is-replaced\n> .. _issue 155: https://bitbucket.org/ned/coveragepy/issue/155/cant-use-coverage-run-m-unittest-discover\n> .. _issue 157: https://bitbucket.org/ned/coveragepy/issue/157/chokes-on-source-files-with-non-utf-8\n> .. _issue 166: https://bitbucket.org/ned/coveragepy/issue/166/dont-try-to-compile-c-extension-on-pypy\n> .. _issue 168: https://bitbucket.org/ned/coveragepy/issue/168/dont-be-alarmed-by-emacs-droppings\n> .. _issue 173: https://bitbucket.org/ned/coveragepy/issue/173/theres-no-way-to-specify-show-missing-in\n> ### 3.5.2.b1\n> ### 3.5.1\n> ---\n> - The `[paths]` feature unfortunately didn&#39;t work in real world situations\n>   where you wanted to, you know, report on the combined data.  Now all paths\n>   stored in the combined file are canonicalized properly.\n> ### 3.5.1b1\n> ---\n> - When combining data files from parallel runs, you can now instruct\n>   coverage.py about which directories are equivalent on different machines.  A\n>   `[paths]` section in the configuration file lists paths that are to be\n>   considered equivalent.  Finishes `issue 17`_.\n> - for-else constructs are understood better, and don&#39;t cause erroneous partial\n>   branch warnings.  Fixes `issue 122`_.\n> - Branch coverage for `with` statements is improved, fixing `issue 128`_.\n> - The number of partial branches reported on the HTML summary page was\n>   different than the number reported on the individual file pages.  This is\n>   now fixed.\n> - An explicit include directive to measure files in the Python installation\n>   wouldn&#39;t work because of the standard library exclusion.  Now the include\n>   directive takes precedence, and the files will be measured.  Fixes\n>   `issue 138`_.\n> - The HTML report now handles Unicode characters in Python source files\n>   properly.  This fixes `issue 124`_ and `issue 144`_. Thanks, Devin\n>   Jeanpierre.\n> - In order to help the core developers measure the test coverage of the\n>   standard library, Brandon Rhodes devised an aggressive hack to trick Python\n>   into running some coverage.py code before anything else in the process.\n>   See the coverage/fullcoverage directory if you are interested.\n> \n> .. _issue 17: http://bitbucket.org/ned/coveragepy/issue/17/support-combining-coverage-data-from\n> .. _issue 122: http://bitbucket.org/ned/coveragepy/issue/122/for-else-always-reports-missing-branch\n> .. _issue 124: http://bitbucket.org/ned/coveragepy/issue/124/no-arbitrary-unicode-in-html-reports-in\n> .. _issue 128: http://bitbucket.org/ned/coveragepy/issue/128/branch-coverage-of-with-statement-in-27\n> .. _issue 138: http://bitbucket.org/ned/coveragepy/issue/138/include-should-take-precedence-over-is\n> .. _issue 144: http://bitbucket.org/ned/coveragepy/issue/144/failure-generating-html-output-for\n> ### 3.5\n> ---\n> - The HTML report hotkeys now behave slightly differently when the current\n>   chunk isn&#39;t visible at all:  a chunk on the screen will be selected,\n>   instead of the old behavior of jumping to the literal next chunk.\n>   The hotkeys now work in Google Chrome.  Thanks, Guido van Rossum.\n> ### 3.5b1\n> ---\n> - The HTML report now has hotkeys.  Try `n`, `s`, `m`, `x`, `b`,\n>   `p`, and `c` on the overview page to change the column sorting.\n>   On a file page, `r`, `m`, `x`, and `p` toggle the run, missing,\n>   excluded, and partial line markings.  You can navigate the highlighted\n>   sections of code by using the `j` and `k` keys for next and previous.\n>   The `1` (one) key jumps to the first highlighted section in the file,\n>   and `0` (zero) scrolls to the top of the file.\n> - The `--omit` and `--include` switches now interpret their values more\n>   usefully.  If the value starts with a wildcard character, it is used as-is.\n>   If it does not, it is interpreted relative to the current directory.\n>   Closes `issue 121`_.\n> - Partial branch warnings can now be pragma&#39;d away.  The configuration option\n>   `partial_branches` is a list of regular expressions.  Lines matching any of\n>   those expressions will never be marked as a partial branch.  In addition,\n>   there&#39;s a built-in list of regular expressions marking statements which should\n>   never be marked as partial.  This list includes `while True:`, `while 1:`,\n>   `if 1:`, and `if 0:`.\n> - The `coverage()` constructor accepts single strings for the `omit=` and\n>   `include=` arguments, adapting to a common error in programmatic use.\n> - Modules can now be run directly using `coverage run -m modulename`, to\n>   mirror Python&#39;s `-m` flag.  Closes `issue 95`_, thanks, Brandon Rhodes.\n> - `coverage run` didn&#39;t emulate Python accurately in one small detail: the\n>   current directory inserted into `sys.path` was relative rather than\n>   absolute. This is now fixed.\n> - HTML reporting is now incremental: a record is kept of the data that\n>   produced the HTML reports, and only files whose data has changed will\n>   be generated.  This should make most HTML reporting faster.\n> - Pathological code execution could disable the trace function behind our\n>   backs, leading to incorrect code measurement.  Now if this happens,\n>   coverage.py will issue a warning, at least alerting you to the problem.\n>   Closes `issue 93`_.  Thanks to Marius Gedminas for the idea.\n> - The C-based trace function now behaves properly when saved and restored\n>   with `sys.gettrace()` and `sys.settrace()`.  This fixes `issue 125`_\n>   and `issue 123`_.  Thanks, Devin Jeanpierre.\n> - Source files are now opened with Python 3.2&#39;s `tokenize.open()` where\n>   possible, to get the best handling of Python source files with encodings.\n>   Closes `issue 107`_, thanks, Brett Cannon.\n> - Syntax errors in supposed Python files can now be ignored during reporting\n>   with the `-i` switch just like other source errors.  Closes `issue 115`_.\n> - Installation from source now succeeds on machines without a C compiler,\n>   closing `issue 80`_.\n> - Coverage.py can now be run directly from a working tree by specifying\n>   the directory name to python:  `python coverage_py_working_dir run ...`.\n>   Thanks, Brett Cannon.\n> - A little bit of Jython support: `coverage run` can now measure Jython\n>   execution by adapting when $py.class files are traced. Thanks, Adi Roiban.\n>   Jython still doesn&#39;t provide the Python libraries needed to make\n>   coverage reporting work, unfortunately.\n> - Internally, files are now closed explicitly, fixing `issue 104`_.  Thanks,\n>   Brett Cannon.\n> \n> .. _issue 80: https://bitbucket.org/ned/coveragepy/issue/80/is-there-a-duck-typing-way-to-know-we-cant\n> .. _issue 93: http://bitbucket.org/ned/coveragepy/issue/93/copying-a-mock-object-breaks-coverage\n> .. _issue 95: https://bitbucket.org/ned/coveragepy/issue/95/run-subcommand-should-take-a-module-name\n> .. _issue 104: https://bitbucket.org/ned/coveragepy/issue/104/explicitly-close-files\n> .. _issue 107: https://bitbucket.org/ned/coveragepy/issue/107/codeparser-not-opening-source-files-with\n> .. _issue 115: https://bitbucket.org/ned/coveragepy/issue/115/fail-gracefully-when-reporting-on-file\n> .. _issue 121: https://bitbucket.org/ned/coveragepy/issue/121/filename-patterns-are-applied-stupidly\n> .. _issue 123: https://bitbucket.org/ned/coveragepy/issue/123/pyeval_settrace-used-in-way-that-breaks\n> .. _issue 125: https://bitbucket.org/ned/coveragepy/issue/125/coverage-removes-decoratortoolss-tracing\n> ### 3.4\n> ---\n> - The XML report is now sorted by package name, fixing `issue 88`_.\n> - Programs that exited with `sys.exit()` with no argument weren&#39;t handled\n>   properly, producing a coverage.py stack trace.  That is now fixed.\n> \n> .. _issue 88: http://bitbucket.org/ned/coveragepy/issue/88/xml-report-lists-packages-in-random-order\n> ### 3.4b2\n> ---\n> - Completely unexecuted files can now be included in coverage results, reported\n>   as 0% covered.  This only happens if the --source option is specified, since\n>   coverage.py needs guidance about where to look for source files.\n> - The XML report output now properly includes a percentage for branch coverage,\n>   fixing `issue 65`_ and `issue 81`_.\n> - Coverage percentages are now displayed uniformly across reporting methods.\n>   Previously, different reports could round percentages differently.  Also,\n>   percentages are only reported as 0% or 100% if they are truly 0 or 100, and\n>   are rounded otherwise.  Fixes `issue 41`_ and `issue 70`_.\n> - The precision of reported coverage percentages can be set with the\n>   `[report] precision` config file setting.  Completes `issue 16`_.\n> - Threads derived from `threading.Thread` with an overridden `run` method\n>   would report no coverage for the `run` method.  This is now fixed, closing\n>   `issue 85`_.\n> \n> .. _issue 16: http://bitbucket.org/ned/coveragepy/issue/16/allow-configuration-of-accuracy-of-percentage-totals\n> .. _issue 41: http://bitbucket.org/ned/coveragepy/issue/41/report-says-100-when-it-isnt-quite-there\n> .. _issue 65: http://bitbucket.org/ned/coveragepy/issue/65/branch-option-not-reported-in-cobertura\n> .. _issue 70: http://bitbucket.org/ned/coveragepy/issue/70/text-report-and-html-report-disagree-on-coverage\n> .. _issue 81: http://bitbucket.org/ned/coveragepy/issue/81/xml-report-does-not-have-condition-coverage-attribute-for-lines-with-a\n> .. _issue 85: http://bitbucket.org/ned/coveragepy/issue/85/threadrun-isnt-measured\n> ### 3.4b1\n> ---\n> - BACKWARD INCOMPATIBILITY: the `--omit` and `--include` switches now take\n>   file patterns rather than file prefixes, closing `issue 34`_ and `issue 36`_.\n> - BACKWARD INCOMPATIBILITY: the `omit_prefixes` argument is gone throughout\n>   coverage.py, replaced with `omit`, a list of file name patterns suitable for\n>   `fnmatch`.  A parallel argument `include` controls what files are included.\n> - The run command now has a `--source` switch, a list of directories or\n>   module names.  If provided, coverage.py will only measure execution in those\n>   source files.\n> - Various warnings are printed to stderr for problems encountered during data\n>   measurement: if a `--source` module has no Python source to measure, or is\n>   never encountered at all, or if no data is collected.\n> - The reporting commands (report, annotate, html, and xml) now have an\n>   `--include` switch to restrict reporting to modules matching those file\n>   patterns, similar to the existing `--omit` switch. Thanks, Zooko.\n> - The run command now supports `--include` and `--omit` to control what\n>   modules it measures. This can speed execution and reduce the amount of data\n>   during reporting. Thanks Zooko.\n> - Since coverage.py 3.1, using the Python trace function has been slower than\n>   it needs to be.  A cache of tracing decisions was broken, but has now been\n>   fixed.\n> - Python 2.7 and 3.2 have introduced new opcodes that are now supported.\n> - Python files with no statements, for example, empty `__init__.py` files,\n>   are now reported as having zero statements instead of one.  Fixes `issue 1`_.\n> - Reports now have a column of missed line counts rather than executed line\n>   counts, since developers should focus on reducing the missed lines to zero,\n>   rather than increasing the executed lines to varying targets.  Once\n>   suggested, this seemed blindingly obvious.\n> - Line numbers in HTML source pages are clickable, linking directly to that\n>   line, which is highlighted on arrival.  Added a link back to the index page\n>   at the bottom of each HTML page.\n> - Programs that call `os.fork` will properly collect data from both the child\n>   and parent processes.  Use `coverage run -p` to get two data files that can\n>   be combined with `coverage combine`.  Fixes `issue 56`_.\n> - Coverage.py is now runnable as a module: `python -m coverage`.  Thanks,\n>   Brett Cannon.\n> - When measuring code running in a virtualenv, most of the system library was\n>   being measured when it shouldn&#39;t have been.  This is now fixed.\n> - Doctest text files are no longer recorded in the coverage data, since they\n>   can&#39;t be reported anyway.  Fixes `issue 52`_ and `issue 61`_.\n> - Jinja HTML templates compile into Python code using the HTML file name,\n>   which confused coverage.py.  Now these files are no longer traced, fixing\n>   `issue 82`_.\n> - Source files can have more than one dot in them (foo.test.py), and will be\n>   treated properly while reporting.  Fixes `issue 46`_.\n> - Source files with DOS line endings are now properly tokenized for syntax\n>   coloring on non-DOS machines.  Fixes `issue 53`_.\n> - Unusual code structure that confused exits from methods with exits from\n>   classes is now properly analyzed.  See `issue 62`_.\n> - Asking for an HTML report with no files now shows a nice error message rather\n>   than a cryptic failure (&#39;int&#39; object is unsubscriptable). Fixes `issue 59`_.\n> \n> .. _issue 1:  http://bitbucket.org/ned/coveragepy/issue/1/empty-__init__py-files-are-reported-as-1-executable\n> .. _issue 34: http://bitbucket.org/ned/coveragepy/issue/34/enhanced-omit-globbing-handling\n> .. _issue 36: http://bitbucket.org/ned/coveragepy/issue/36/provide-regex-style-omit\n> .. _issue 46: http://bitbucket.org/ned/coveragepy/issue/46\n> .. _issue 53: http://bitbucket.org/ned/coveragepy/issue/53\n> .. _issue 52: http://bitbucket.org/ned/coveragepy/issue/52/doctesttestfile-confuses-source-detection\n> .. _issue 56: http://bitbucket.org/ned/coveragepy/issue/56\n> .. _issue 61: http://bitbucket.org/ned/coveragepy/issue/61/annotate-i-doesnt-work\n> .. _issue 62: http://bitbucket.org/ned/coveragepy/issue/62\n> .. _issue 59: http://bitbucket.org/ned/coveragepy/issue/59/html-report-fails-with-int-object-is\n> .. _issue 82: http://bitbucket.org/ned/coveragepy/issue/82/tokenerror-when-generating-html-report\n> ### 3.3.1\n> ---\n> - Using `parallel=True` in .coveragerc file prevented reporting, but now does\n>   not, fixing `issue 49`_.\n> - When running your code with &quot;coverage run&quot;, if you call `sys.exit()`,\n>   coverage.py will exit with that status code, fixing `issue 50`_.\n> \n> .. _issue 49: http://bitbucket.org/ned/coveragepy/issue/49\n> .. _issue 50: http://bitbucket.org/ned/coveragepy/issue/50\n> ### 3.3\n> ---\n> - Settings are now read from a .coveragerc file.  A specific file can be\n>   specified on the command line with --rcfile=FILE.  The name of the file can\n>   be programmatically set with the `config_file` argument to the coverage()\n>   constructor, or reading a config file can be disabled with\n>   `config_file=False`.\n> - Fixed a problem with nested loops having their branch possibilities\n>   mischaracterized: `issue 39`_.\n> - Added coverage.process_start to enable coverage measurement when Python\n>   starts.\n> - Parallel data file names now have a random number appended to them in\n>   addition to the machine name and process id.\n> - Parallel data files combined with &quot;coverage combine&quot; are deleted after\n>   they&#39;re combined, to clean up unneeded files.  Fixes `issue 40`_.\n> - Exceptions thrown from product code run with &quot;coverage run&quot; are now displayed\n>   without internal coverage.py frames, so the output is the same as when the\n>   code is run without coverage.py.\n> - The `data_suffix` argument to the coverage constructor is now appended with\n>   an added dot rather than simply appended, so that .coveragerc files will not\n>   be confused for data files.\n> - Python source files that don&#39;t end with a newline can now be executed, fixing\n>   `issue 47`_.\n> - Added an AUTHORS.txt file.\n> \n> .. _issue 39: http://bitbucket.org/ned/coveragepy/issue/39\n> .. _issue 40: http://bitbucket.org/ned/coveragepy/issue/40\n> .. _issue 47: http://bitbucket.org/ned/coveragepy/issue/47\n> ### 3.2\n> ---\n> - Added a `--version` option on the command line.\n> ### 3.2b4\n> ---\n> - Branch coverage improvements:\n>   - The XML report now includes branch information.\n> - Click-to-sort HTML report columns are now persisted in a cookie.  Viewing\n>   a report will sort it first the way you last had a coverage report sorted.\n>   Thanks, `Chris Adams`_.\n> - On Python 3.x, setuptools has been replaced by `Distribute`_.\n> \n> .. _Distribute: http://packages.python.org/distribute/\n> ### 3.2b3\n> ---\n> - Fixed a memory leak in the C tracer that was introduced in 3.2b1.\n> - Branch coverage improvements:\n>   - Branches to excluded code are ignored.\n> - The table of contents in the HTML report is now sortable: click the headers\n>   on any column.  Thanks, `Chris Adams`_.\n> \n> .. _Chris Adams: http://improbable.org/chris/\n> ### 3.2b2\n> ---\n> - Branch coverage improvements:\n>   - Classes are no longer incorrectly marked as branches: `issue 32`_.\n>   - &quot;except&quot; clauses with types are no longer incorrectly marked as branches:\n>     `issue 35`_.\n> - Fixed some problems syntax coloring sources with line continuations and\n>   source with tabs: `issue 30`_ and `issue 31`_.\n> - The --omit option now works much better than before, fixing `issue 14`_ and\n>   `issue 33`_.  Thanks, Danek Duvall.\n> \n> .. _issue 14: http://bitbucket.org/ned/coveragepy/issue/14\n> .. _issue 30: http://bitbucket.org/ned/coveragepy/issue/30\n> .. _issue 31: http://bitbucket.org/ned/coveragepy/issue/31\n> .. _issue 32: http://bitbucket.org/ned/coveragepy/issue/32\n> .. _issue 33: http://bitbucket.org/ned/coveragepy/issue/33\n> .. _issue 35: http://bitbucket.org/ned/coveragepy/issue/35\n> ### 3.2b1\n> ---\n> - Branch coverage!\n> - XML reporting has file paths that let Cobertura find the source code.\n> - The tracer code has changed, it&#39;s a few percent faster.\n> - Some exceptions reported by the command line interface have been cleaned up\n>   so that tracebacks inside coverage.py aren&#39;t shown.  Fixes `issue 23`_.\n> \n> .. _issue 23: http://bitbucket.org/ned/coveragepy/issue/23\n> ### 3.1\n> ---\n> - Source code can now be read from eggs.  Thanks, Ross Lawley.  Fixes\n>   `issue 25`_.\n> \n> .. _issue 25: http://bitbucket.org/ned/coveragepy/issue/25\n> ### 3.1b1\n> ---\n> - Python 3.1 is now supported.\n> - Coverage.py has a new command line syntax with sub-commands.  This expands\n>   the possibilities for adding features and options in the future.  The old\n>   syntax is still supported.  Try &quot;coverage help&quot; to see the new commands.\n>   Thanks to Ben Finney for early help.\n> - Added an experimental &quot;coverage xml&quot; command for producing coverage reports\n>   in a Cobertura-compatible XML format.  Thanks, Bill Hart.\n> - Added the --timid option to enable a simpler slower trace function that works\n>   for DecoratorTools projects, including TurboGears.  Fixed `issue 12`_ and\n>   `issue 13`_.\n> - HTML reports show modules from other directories.  Fixed `issue 11`_.\n> - HTML reports now display syntax-colored Python source.\n> - Programs that change directory will still write .coverage files in the\n>   directory where execution started.  Fixed `issue 24`_.\n> - Added a &quot;coverage debug&quot; command for getting diagnostic information about the\n>   coverage.py installation.\n> \n> .. _issue 11: http://bitbucket.org/ned/coveragepy/issue/11\n> .. _issue 12: http://bitbucket.org/ned/coveragepy/issue/12\n> .. _issue 13: http://bitbucket.org/ned/coveragepy/issue/13\n> .. _issue 24: http://bitbucket.org/ned/coveragepy/issue/24\n> ### 3.0.1\n> ---\n> - Removed the recursion limit in the tracer function.  Previously, code that\n>   ran more than 500 frames deep would crash. Fixed `issue 9`_.\n> - Fixed a bizarre problem involving pyexpat, whereby lines following XML parser\n>   invocations could be overlooked.  Fixed `issue 10`_.\n> - On Python 2.3, coverage.py could mis-measure code with exceptions being\n>   raised.  This is now fixed.\n> - The coverage.py code itself will now not be measured by coverage.py, and no\n>   coverage.py modules will be mentioned in the nose --with-cover plug-in.\n>   Fixed `issue 8`_.\n> - When running source files, coverage.py now opens them in universal newline\n>   mode just like Python does.  This lets it run Windows files on Mac, for\n>   example.\n> \n> .. _issue 9: http://bitbucket.org/ned/coveragepy/issue/9\n> .. _issue 10: http://bitbucket.org/ned/coveragepy/issue/10\n> .. _issue 8: http://bitbucket.org/ned/coveragepy/issue/8\n> ### 3.0\n> ---\n> - Fixed the way the Python library was ignored.  Too much code was being\n>   excluded the old way.\n> - Tabs are now properly converted in HTML reports.  Previously indentation was\n>   lost.  Fixed `issue 6`_.\n> - Nested modules now get a proper flat_rootname.  Thanks, Christian Heimes.\n> \n> .. _issue 6: http://bitbucket.org/ned/coveragepy/issue/6\n> ### 3.0b3\n> ---\n> - Added parameters to coverage.**init** for options that had been set on the\n>   coverage object itself.\n> - Added clear_exclude() and get_exclude_list() methods for programmatic\n>   manipulation of the exclude regexes.\n> - Added coverage.load() to read previously-saved data from the data file.\n> - Improved the finding of code files.  For example, .pyc files that have been\n>   installed after compiling are now located correctly.  Thanks, Detlev\n>   Offenbach.\n> - When using the object API (that is, constructing a coverage() object), data\n>   is no longer saved automatically on process exit.  You can re-enable it with\n>   the auto_data=True parameter on the coverage() constructor. The module-level\n>   interface still uses automatic saving.\n> ### 3.0b1\n> ---\n> \n> Major overhaul.\n> - Coverage.py is now a package rather than a module.  Functionality has been\n>   split into classes.\n> - The trace function is implemented in C for speed.  Coverage.py runs are now\n>   much faster.  Thanks to David Christian for productive micro-sprints and\n>   other encouragement.\n> - Executable lines are identified by reading the line number tables in the\n>   compiled code, removing a great deal of complicated analysis code.\n> - Precisely which lines are considered executable has changed in some cases.\n>   Therefore, your coverage stats may also change slightly.\n> - The singleton coverage object is only created if the module-level functions\n>   are used.  This maintains the old interface while allowing better\n>   programmatic use of Coverage.py.\n> - The minimum supported Python version is 2.3.\n> ### 3.0b\n> ---\n> \n> HTML reporting, and continued refactoring.\n> - HTML reports and annotation of source files: use the new -b (browser) switch.\n>   Thanks to George Song for code, inspiration and guidance.\n> - Code in the Python standard library is not measured by default.  If you need\n>   to measure standard library code, use the -L command-line switch during\n>   execution, or the cover_pylib=True argument to the coverage() constructor.\n> - Source annotation into a directory (-a -d) behaves differently.  The\n>   annotated files are named with their hierarchy flattened so that same-named\n>   files from different directories no longer collide.  Also, only files in the\n>   current tree are included.\n> - coverage.annotate_file is no longer available.\n> - Programs executed with -x now behave more as they should, for example,\n>   **file** has the correct value.\n> - .coverage data files have a new pickle-based format designed for better\n>   extensibility.\n> - Removed the undocumented cache_file argument to coverage.usecache().\n> ### 2.85\n> ---\n> - Add support for finding source files in eggs. Don&#39;t check for\n>   morf&#39;s being instances of ModuleType, instead use duck typing so that\n>   pseudo-modules can participate. Thanks, Imri Goldberg.\n> - Use os.realpath as part of the fixing of file names so that symlinks won&#39;t\n>   confuse things. Thanks, Patrick Mezard.\n> ### 2.80\n> ---\n> - Open files in rU mode to avoid line ending craziness. Thanks, Edward Loper.\n> ### 2.78\n> ---\n> - Don&#39;t try to predict whether a file is Python source based on the extension.\n>   Extension-less files are often Pythons scripts. Instead, simply parse the file\n>   and catch the syntax errors. Hat tip to Ben Finney.\n> ### 2.77\n> ---\n> - Better packaging.\n> ### 2.76\n> ---\n> - Now Python 2.5 is _really_ fully supported: the body of the new with\n>   statement is counted as executable.\n> ### 2.75\n> ---\n> - Python 2.5 now fully supported. The method of dealing with multi-line\n>   statements is now less sensitive to the exact line that Python reports during\n>   execution. Pass statements are handled specially so that their disappearance\n>   during execution won&#39;t throw off the measurement.\n> ### 2.7\n> ---\n> - &quot;pragma: nocover&quot; is excluded by default.\n> - Properly ignore docstrings and other constant expressions that appear in the\n>   middle of a function, a problem reported by Tim Leslie.\n> - coverage.erase() shouldn&#39;t clobber the exclude regex. Change how parallel\n>   mode is invoked, and fix erase() so that it erases the cache when called\n>   programmatically.\n> - In reports, ignore code executed from strings, since we can&#39;t do anything\n>   useful with it anyway.\n> - Better file handling on Linux, thanks Guillaume Chazarain.\n> - Better shell support on Windows, thanks Noel O&#39;Boyle.\n> - Python 2.2 support maintained, thanks Catherine Proulx.\n> - Minor changes to avoid lint warnings.\n> ### 2.6\n> ---\n> - Applied Joseph Tate&#39;s patch for function decorators.\n> - Applied Sigve Tjora and Mark van der Wal&#39;s fixes for argument handling.\n> - Applied Geoff Bache&#39;s parallel mode patch.\n> - Refactorings to improve testability. Fixes to command-line logic for parallel\n>   mode and collect.\n> ### 2.5\n> ---\n> - Call threading.settrace so that all threads are measured. Thanks Martin\n>   Fuzzey.\n> - Add a file argument to report so that reports can be captured to a different\n>   destination.\n> - Coverage.py can now measure itself.\n> - Adapted Greg Rogers&#39; patch for using relative file names, and sorting and\n>   omitting files to report on.\n> ### 2.2\n> ---\n> - Allow for keyword arguments in the module global functions. Thanks, Allen.\n> ### 2.1\n> ---\n> - Return &#39;analysis&#39; to its original behavior and add &#39;analysis2&#39;. Add a global\n>   for &#39;annotate&#39;, and factor it, adding &#39;annotate_file&#39;.\n> ### 2.0\n> ---\n> \n> Significant code changes.\n> - Finding executable statements has been rewritten so that docstrings and\n>   other quirks of Python execution aren&#39;t mistakenly identified as missing\n>   lines.\n> - Lines can be excluded from consideration, even entire suites of lines.\n> - The file system cache of covered lines can be disabled programmatically.\n> - Modernized the code.\n> ## Earlier History\n> \n> 2001-12-04 GDR Created.\n> \n> 2001-12-06 GDR Added command-line interface and source code annotation.\n> \n> 2001-12-09 GDR Moved design and interface to separate documents.\n> \n> 2001-12-10 GDR Open cache file as binary on Windows. Allow simultaneous -e and\n> -x, or -a and -r.\n> \n> 2001-12-12 GDR Added command-line help. Cache analysis so that it only needs to\n> be done once when you specify -a and -r.\n> ### 1.5.2\n> \n> and 2.1.1.\n> \n> 2002-01-03 GDR Module-level functions work correctly.\n> \n> 2002-01-07 GDR Update sys.path when running a file with the -x option, so that\n> it matches the value the program would get if it were run on its own.\n\n_Got merge conflicts? Close this PR and delete the branch. I'll create a new PR for you._\n\nHappy merging! 🤖\n","created_at":"2016-10-20T00:03:35Z","updated_at":"2016-11-30T10:22:54Z","closed_at":"2016-11-30T10:22:53Z","merged_at":"2016-11-30T10:22:53Z","merge_commit_sha":"57f99771914e73036405ccd84820d0577fd7d630","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/trungdong/prov/pulls/100/commits","review_comments_url":"https://api.github.com/repos/trungdong/prov/pulls/100/comments","review_comment_url":"https://api.github.com/repos/trungdong/prov/pulls/comments{/number}","comments_url":"https://api.github.com/repos/trungdong/prov/issues/100/comments","statuses_url":"https://api.github.com/repos/trungdong/prov/statuses/e28a0b2fa454f16bc005c5e4f43646f249cfdeee","head":{"label":"trungdong:pyup-pin-coverage-4.2","ref":"pyup-pin-coverage-4.2","sha":"e28a0b2fa454f16bc005c5e4f43646f249cfdeee","user":{"login":"trungdong","id":325184,"avatar_url":"https://avatars.githubusercontent.com/u/325184?v=3","gravatar_id":"","url":"https://api.github.com/users/trungdong","html_url":"https://github.com/trungdong","followers_url":"https://api.github.com/users/trungdong/followers","following_url":"https://api.github.com/users/trungdong/following{/other_user}","gists_url":"https://api.github.com/users/trungdong/gists{/gist_id}","starred_url":"https://api.github.com/users/trungdong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trungdong/subscriptions","organizations_url":"https://api.github.com/users/trungdong/orgs","repos_url":"https://api.github.com/users/trungdong/repos","events_url":"https://api.github.com/users/trungdong/events{/privacy}","received_events_url":"https://api.github.com/users/trungdong/received_events","type":"User","site_admin":false},"repo":{"id":6577385,"name":"prov","full_name":"trungdong/prov","owner":{"login":"trungdong","id":325184,"avatar_url":"https://avatars.githubusercontent.com/u/325184?v=3","gravatar_id":"","url":"https://api.github.com/users/trungdong","html_url":"https://github.com/trungdong","followers_url":"https://api.github.com/users/trungdong/followers","following_url":"https://api.github.com/users/trungdong/following{/other_user}","gists_url":"https://api.github.com/users/trungdong/gists{/gist_id}","starred_url":"https://api.github.com/users/trungdong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trungdong/subscriptions","organizations_url":"https://api.github.com/users/trungdong/orgs","repos_url":"https://api.github.com/users/trungdong/repos","events_url":"https://api.github.com/users/trungdong/events{/privacy}","received_events_url":"https://api.github.com/users/trungdong/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/trungdong/prov","description":"A Python library for W3C Provenance Data Model supporting PROV-JSON import/export","fork":false,"url":"https://api.github.com/repos/trungdong/prov","forks_url":"https://api.github.com/repos/trungdong/prov/forks","keys_url":"https://api.github.com/repos/trungdong/prov/keys{/key_id}","collaborators_url":"https://api.github.com/repos/trungdong/prov/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/trungdong/prov/teams","hooks_url":"https://api.github.com/repos/trungdong/prov/hooks","issue_events_url":"https://api.github.com/repos/trungdong/prov/issues/events{/number}","events_url":"https://api.github.com/repos/trungdong/prov/events","assignees_url":"https://api.github.com/repos/trungdong/prov/assignees{/user}","branches_url":"https://api.github.com/repos/trungdong/prov/branches{/branch}","tags_url":"https://api.github.com/repos/trungdong/prov/tags","blobs_url":"https://api.github.com/repos/trungdong/prov/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/trungdong/prov/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/trungdong/prov/git/refs{/sha}","trees_url":"https://api.github.com/repos/trungdong/prov/git/trees{/sha}","statuses_url":"https://api.github.com/repos/trungdong/prov/statuses/{sha}","languages_url":"https://api.github.com/repos/trungdong/prov/languages","stargazers_url":"https://api.github.com/repos/trungdong/prov/stargazers","contributors_url":"https://api.github.com/repos/trungdong/prov/contributors","subscribers_url":"https://api.github.com/repos/trungdong/prov/subscribers","subscription_url":"https://api.github.com/repos/trungdong/prov/subscription","commits_url":"https://api.github.com/repos/trungdong/prov/commits{/sha}","git_commits_url":"https://api.github.com/repos/trungdong/prov/git/commits{/sha}","comments_url":"https://api.github.com/repos/trungdong/prov/comments{/number}","issue_comment_url":"https://api.github.com/repos/trungdong/prov/issues/comments{/number}","contents_url":"https://api.github.com/repos/trungdong/prov/contents/{+path}","compare_url":"https://api.github.com/repos/trungdong/prov/compare/{base}...{head}","merges_url":"https://api.github.com/repos/trungdong/prov/merges","archive_url":"https://api.github.com/repos/trungdong/prov/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/trungdong/prov/downloads","issues_url":"https://api.github.com/repos/trungdong/prov/issues{/number}","pulls_url":"https://api.github.com/repos/trungdong/prov/pulls{/number}","milestones_url":"https://api.github.com/repos/trungdong/prov/milestones{/number}","notifications_url":"https://api.github.com/repos/trungdong/prov/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/trungdong/prov/labels{/name}","releases_url":"https://api.github.com/repos/trungdong/prov/releases{/id}","deployments_url":"https://api.github.com/repos/trungdong/prov/deployments","created_at":"2012-11-07T10:20:33Z","updated_at":"2016-11-10T09:01:28Z","pushed_at":"2016-11-30T10:22:54Z","git_url":"git://github.com/trungdong/prov.git","ssh_url":"git@github.com:trungdong/prov.git","clone_url":"https://github.com/trungdong/prov.git","svn_url":"https://github.com/trungdong/prov","homepage":"","size":2595,"stargazers_count":30,"watchers_count":30,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":15,"forks":20,"open_issues":15,"watchers":30,"default_branch":"master"}},"base":{"label":"trungdong:master","ref":"master","sha":"bab9ba3b8434ee83e8c02c221b408b6730926ea6","user":{"login":"trungdong","id":325184,"avatar_url":"https://avatars.githubusercontent.com/u/325184?v=3","gravatar_id":"","url":"https://api.github.com/users/trungdong","html_url":"https://github.com/trungdong","followers_url":"https://api.github.com/users/trungdong/followers","following_url":"https://api.github.com/users/trungdong/following{/other_user}","gists_url":"https://api.github.com/users/trungdong/gists{/gist_id}","starred_url":"https://api.github.com/users/trungdong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trungdong/subscriptions","organizations_url":"https://api.github.com/users/trungdong/orgs","repos_url":"https://api.github.com/users/trungdong/repos","events_url":"https://api.github.com/users/trungdong/events{/privacy}","received_events_url":"https://api.github.com/users/trungdong/received_events","type":"User","site_admin":false},"repo":{"id":6577385,"name":"prov","full_name":"trungdong/prov","owner":{"login":"trungdong","id":325184,"avatar_url":"https://avatars.githubusercontent.com/u/325184?v=3","gravatar_id":"","url":"https://api.github.com/users/trungdong","html_url":"https://github.com/trungdong","followers_url":"https://api.github.com/users/trungdong/followers","following_url":"https://api.github.com/users/trungdong/following{/other_user}","gists_url":"https://api.github.com/users/trungdong/gists{/gist_id}","starred_url":"https://api.github.com/users/trungdong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trungdong/subscriptions","organizations_url":"https://api.github.com/users/trungdong/orgs","repos_url":"https://api.github.com/users/trungdong/repos","events_url":"https://api.github.com/users/trungdong/events{/privacy}","received_events_url":"https://api.github.com/users/trungdong/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/trungdong/prov","description":"A Python library for W3C Provenance Data Model supporting PROV-JSON import/export","fork":false,"url":"https://api.github.com/repos/trungdong/prov","forks_url":"https://api.github.com/repos/trungdong/prov/forks","keys_url":"https://api.github.com/repos/trungdong/prov/keys{/key_id}","collaborators_url":"https://api.github.com/repos/trungdong/prov/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/trungdong/prov/teams","hooks_url":"https://api.github.com/repos/trungdong/prov/hooks","issue_events_url":"https://api.github.com/repos/trungdong/prov/issues/events{/number}","events_url":"https://api.github.com/repos/trungdong/prov/events","assignees_url":"https://api.github.com/repos/trungdong/prov/assignees{/user}","branches_url":"https://api.github.com/repos/trungdong/prov/branches{/branch}","tags_url":"https://api.github.com/repos/trungdong/prov/tags","blobs_url":"https://api.github.com/repos/trungdong/prov/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/trungdong/prov/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/trungdong/prov/git/refs{/sha}","trees_url":"https://api.github.com/repos/trungdong/prov/git/trees{/sha}","statuses_url":"https://api.github.com/repos/trungdong/prov/statuses/{sha}","languages_url":"https://api.github.com/repos/trungdong/prov/languages","stargazers_url":"https://api.github.com/repos/trungdong/prov/stargazers","contributors_url":"https://api.github.com/repos/trungdong/prov/contributors","subscribers_url":"https://api.github.com/repos/trungdong/prov/subscribers","subscription_url":"https://api.github.com/repos/trungdong/prov/subscription","commits_url":"https://api.github.com/repos/trungdong/prov/commits{/sha}","git_commits_url":"https://api.github.com/repos/trungdong/prov/git/commits{/sha}","comments_url":"https://api.github.com/repos/trungdong/prov/comments{/number}","issue_comment_url":"https://api.github.com/repos/trungdong/prov/issues/comments{/number}","contents_url":"https://api.github.com/repos/trungdong/prov/contents/{+path}","compare_url":"https://api.github.com/repos/trungdong/prov/compare/{base}...{head}","merges_url":"https://api.github.com/repos/trungdong/prov/merges","archive_url":"https://api.github.com/repos/trungdong/prov/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/trungdong/prov/downloads","issues_url":"https://api.github.com/repos/trungdong/prov/issues{/number}","pulls_url":"https://api.github.com/repos/trungdong/prov/pulls{/number}","milestones_url":"https://api.github.com/repos/trungdong/prov/milestones{/number}","notifications_url":"https://api.github.com/repos/trungdong/prov/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/trungdong/prov/labels{/name}","releases_url":"https://api.github.com/repos/trungdong/prov/releases{/id}","deployments_url":"https://api.github.com/repos/trungdong/prov/deployments","created_at":"2012-11-07T10:20:33Z","updated_at":"2016-11-10T09:01:28Z","pushed_at":"2016-11-30T10:22:54Z","git_url":"git://github.com/trungdong/prov.git","ssh_url":"git@github.com:trungdong/prov.git","clone_url":"https://github.com/trungdong/prov.git","svn_url":"https://github.com/trungdong/prov","homepage":"","size":2595,"stargazers_count":30,"watchers_count":30,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":20,"mirror_url":null,"open_issues_count":15,"forks":20,"open_issues":15,"watchers":30,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/trungdong/prov/pulls/100"},"html":{"href":"https://github.com/trungdong/prov/pull/100"},"issue":{"href":"https://api.github.com/repos/trungdong/prov/issues/100"},"comments":{"href":"https://api.github.com/repos/trungdong/prov/issues/100/comments"},"review_comments":{"href":"https://api.github.com/repos/trungdong/prov/pulls/100/comments"},"review_comment":{"href":"https://api.github.com/repos/trungdong/prov/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/trungdong/prov/pulls/100/commits"},"statuses":{"href":"https://api.github.com/repos/trungdong/prov/statuses/e28a0b2fa454f16bc005c5e4f43646f249cfdeee"}},"merged":true,"mergeable":null,"mergeable_state":"unknown","merged_by":{"login":"trungdong","id":325184,"avatar_url":"https://avatars.githubusercontent.com/u/325184?v=3","gravatar_id":"","url":"https://api.github.com/users/trungdong","html_url":"https://github.com/trungdong","followers_url":"https://api.github.com/users/trungdong/followers","following_url":"https://api.github.com/users/trungdong/following{/other_user}","gists_url":"https://api.github.com/users/trungdong/gists{/gist_id}","starred_url":"https://api.github.com/users/trungdong/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/trungdong/subscriptions","organizations_url":"https://api.github.com/users/trungdong/orgs","repos_url":"https://api.github.com/users/trungdong/repos","events_url":"https://api.github.com/users/trungdong/events{/privacy}","received_events_url":"https://api.github.com/users/trungdong/received_events","type":"User","site_admin":false},"comments":1,"review_comments":0,"commits":1,"additions":1,"deletions":1,"changed_files":1}}
{"actor":{"display_login":"trungdong"}}