Projects
openEuler:Mainline
python-coverage
Sign Up
Log In
Username
Password
We truncated the diff of some files because they were too big. If you want to see the full diff for every file,
click here
.
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 3
View file
_service:tar_scm:python-coverage.spec
Changed
@@ -1,5 +1,5 @@ Name: python-coverage -Version: 6.3.2 +Version: 6.5.0 Release: 1 Summary: Code coverage measurement for Python @@ -55,6 +55,9 @@ %{python3_sitearch}/coverage* %changelog +* Mon Dec 05 2022 yanglu <yanglu72@h-partners.com> - 6.5.0-1 +- Upgrade package python-coverage to version 6.5.0 + * Tue Jul 12 2022 renliang16 <renliang@uniontech.com> - 6.3.2-1 - Upgrade package python-coverage to version 6.3.2
View file
_service
Changed
@@ -2,7 +2,7 @@ <service name="tar_scm"> <param name="scm">git</param> <param name="url">git@gitee.com:src-openeuler/python-coverage.git</param> - <param name="revision">a618f6d25723471cc18a4afc4e6b25f2fd87f6b4</param> + <param name="revision">master</param> <param name="exclude">*</param> <param name="extract">*</param> </service>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/.github/workflows/cancel.yml
Deleted
@@ -1,20 +0,0 @@ -# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 -# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt - -# This action finds in-progress Action jobs for the same branch, and cancels -# them. There's little point in continuing to run superseded jobs. - -name: "Cancel" - -on: - push: - -jobs: - cancel: - runs-on: ubuntu-latest - steps: - - name: "Cancel Previous Runs" - uses: styfle/cancel-workflow-action@0.9.1 - with: - access_token: ${{ github.token }} - workflow_id: coverage.yml, kit.yml, quality.yml, testsuite.yml
View file
_service:tar_scm:coverage-6.5.0.tar.gz/.github/CODE_OF_CONDUCT.md
Added
@@ -0,0 +1,8 @@ +# Treat each other well + +Everyone participating in the coverage.py project, and in particular in the +issue tracker, pull requests, and social media activity, is expected to treat +other people with respect and to follow the guidelines articulated in the +Python Community Code of Conductpsf_coc. + +psf_coc: https://www.python.org/psf/codeofconduct/
View file
_service:tar_scm:coverage-6.5.0.tar.gz/.github/SECURITY.md
Added
@@ -0,0 +1,4 @@ +# Security Disclosures + +To report a security vulnerability, please use the Tidelift security contact(https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure with maintainers.
View file
_service:tar_scm:coverage-6.5.0.tar.gz/.github/workflows/codeql-analysis.yml
Added
@@ -0,0 +1,77 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: + - master + pull_request: + # The branches below must be a subset of the branches above + branches: + - master + schedule: + - cron: '30 20 * * 6' + +permissions: + contents: read + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: + - python + - javascript + # CodeQL supports 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' + # Learn more about CodeQL language support at https://git.io/codeql-language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2
View file
_service:tar_scm:coverage-6.3.2.tar.gz/.github/workflows/coverage.yml -> _service:tar_scm:coverage-6.5.0.tar.gz/.github/workflows/coverage.yml
Changed
@@ -19,6 +19,13 @@ env: PIP_DISABLE_PIP_VERSION_CHECK: 1 +permissions: + contents: read + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + jobs: coverage: name: "Python ${{ matrix.python-version }} on ${{ matrix.os }}" @@ -39,7 +46,7 @@ - "3.8" - "3.9" - "3.10" - - "3.11.0-alpha.5" + - "3.11.0-rc.2" - "pypy-3.7" exclude: # Windows PyPy doesn't seem to work? @@ -53,10 +60,10 @@ steps: - name: "Check out the repo" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Set up Python" - uses: "actions/setup-python@v2" + uses: "actions/setup-python@v4" with: python-version: "${{ matrix.python-version }}" cache: pip @@ -67,7 +74,7 @@ set -xe python -VV python -m site - python -m pip install -r requirements/tox.pip + python -m pip install --require-hashes -r requirements/tox.pip - name: "Run tox coverage for ${{ matrix.python-version }}" env: @@ -78,7 +85,7 @@ python -m tox - name: "Upload coverage data" - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: metacov path: .metacov.* @@ -90,10 +97,10 @@ steps: - name: "Check out the repo" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Set up Python" - uses: "actions/setup-python@v2" + uses: "actions/setup-python@v4" with: python-version: "3.8" cache: pip @@ -108,7 +115,7 @@ python igor.py zip_mods - name: "Download coverage data" - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: metacov @@ -124,13 +131,13 @@ python -m coverage json - name: "Upload HTML report" - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: html_report path: htmlcov - name: "Upload JSON report" - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: json_report path: coverage.json @@ -147,13 +154,13 @@ git clone --depth=1 --no-checkout https://${{ secrets.COVERAGE_REPORTS_TOKEN }}@github.com/nedbat/coverage-reports reports_repo cd reports_repo git sparse-checkout init --cone - git sparse-checkout set '/*' '!/reports' + git sparse-checkout set --skip-checks '/*' '!/reports' git config user.name nedbat git config user.email ned@nedbatchelder.com git checkout main - name: "Download coverage JSON report" - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: json_report @@ -162,7 +169,6 @@ run: | set -xe export TOTAL=$(python -c "import json;print(json.load(open('coverage.json'))'totals''percent_covered_display')") - export PCTINT=$(echo $TOTAL | cut -f1 -d.) export SHA10=$(echo ${{ github.sha }} | cut -c 1-10) export SLUG=$(date +'%Y%m%d')_$SHA10 export REPORT_DIR=reports/$SLUG/htmlcov @@ -173,18 +179,16 @@ echo "report_dir=$REPORT_DIR" >> $GITHUB_ENV echo "url=https://nedbat.github.io/coverage-reports/$REPORT_DIR" >> $GITHUB_ENV echo "branch=${REF#refs/heads/}" >> $GITHUB_ENV - if (($PCTINT >= 85)); then echo "badge_color=green"; fi >> $GITHUB_ENV - if (($PCTINT < 85)); then echo "badge_color=yellow"; fi >> $GITHUB_ENV - if (($PCTINT < 70)); then echo "badge_color=orange"; fi >> $GITHUB_ENV - if (($PCTINT < 60)); then echo "badge_color=red"; fi >> $GITHUB_ENV - name: "Download coverage HTML report" - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: html_report path: reports_repo/${{ env.report_dir }} - name: "Push to report repo" + env: + COMMIT_MESSAGE: ${{ github.event.head_commit.message }} run: | set -xe # Make the redirect to the latest report. @@ -192,13 +196,13 @@ echo "<meta http-equiv='refresh' content='0;url=${{ env.url }}' />" >> reports_repo/latest.html echo "<body>Coverage report redirect..." >> reports_repo/latest.html # Make the commit message. - echo "${{ env.total }}% - ${{ github.event.head_commit.message }}" > commit.txt + echo "${{ env.total }}% - $COMMIT_MESSAGE" > commit.txt echo "" >> commit.txt echo "${{ env.url }}" >> commit.txt echo "${{ env.sha10 }}: ${{ env.branch }}" >> commit.txt # Commit. cd ./reports_repo - git sparse-checkout set '/*' '${{ env.report_dir }}' + git sparse-checkout set --skip-checks '/*' '${{ env.report_dir }}' rm ${{ env.report_dir }}/.gitignore git add ${{ env.report_dir }} latest.html git commit --file=../commit.txt @@ -206,11 +210,19 @@ - name: "Create badge" # https://gist.githubusercontent.com/nedbat/8c6980f77988a327348f9b02bbaf67f5 - uses: schneegans/dynamic-badges-action@v1.1.0 + # uses: schneegans/dynamic-badges-action@v1.4.0 + uses: schneegans/dynamic-badges-action@54d929a33e7521ab6bf19d323d28fb7b876c53f7 with: auth: ${{ secrets.METACOV_GIST_SECRET }} gistID: 8c6980f77988a327348f9b02bbaf67f5 filename: metacov.json label: Coverage message: ${{ env.total }}% - color: ${{ env.badge_color }} + minColorRange: 60 + maxColorRange: 95 + valColorRange: ${{ env.total }} + + - name: "Create summary" + run: | + echo '### Total coverage: ${{ env.total }}%' >> $GITHUB_STEP_SUMMARY + echo '${{ env.url }}(${{ env.url }})' >> $GITHUB_STEP_SUMMARY
View file
_service:tar_scm:coverage-6.5.0.tar.gz/.github/workflows/dependency-review.yml
Added
@@ -0,0 +1,20 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement +name: 'Dependency Review' +on: pull_request + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@v3 + - name: 'Dependency Review' + uses: actions/dependency-review-action@v2
View file
_service:tar_scm:coverage-6.3.2.tar.gz/.github/workflows/kit.yml -> _service:tar_scm:coverage-6.5.0.tar.gz/.github/workflows/kit.yml
Changed
@@ -15,6 +15,9 @@ # $ piprepo build /tmp/pypi # $ python -m pip install -v coverage --index-url=file:///tmp/pypi/simple # +# Note that cibuildwheel recommends not shipping wheels for pre-release versions +# of Python: https://cibuildwheel.readthedocs.io/en/stable/options/#prerelease-pythons +# So we don't. name: "Kits" @@ -24,6 +27,9 @@ # Don't build kits all the time, but do if the branch is about kits. - "**/*kit*" workflow_dispatch: + repository_dispatch: + types: + - build-kits defaults: run: @@ -32,6 +38,13 @@ env: PIP_DISABLE_PIP_VERSION_CHECK: 1 +permissions: + contents: read + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + jobs: wheels: name: "Build ${{ matrix.os }} ${{ matrix.py }} ${{ matrix.arch }} wheels" @@ -64,7 +77,7 @@ # } # # PYVERSIONS. Available versions: # # https://github.com/actions/python-versions/blob/main/versions-manifest.json - # pys = "cp37", "cp38", "cp39", "cp310" + # pys = "cp37", "cp38", "cp39", "cp310", "cp311" # # # Some OS/arch combinations need overrides for the Python versions: # os_arch_pys = { @@ -88,14 +101,17 @@ - {"os": "ubuntu", "py": "cp38", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp39", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp310", "arch": "x86_64"} + - {"os": "ubuntu", "py": "cp311", "arch": "x86_64"} - {"os": "ubuntu", "py": "cp37", "arch": "i686"} - {"os": "ubuntu", "py": "cp38", "arch": "i686"} - {"os": "ubuntu", "py": "cp39", "arch": "i686"} - {"os": "ubuntu", "py": "cp310", "arch": "i686"} + - {"os": "ubuntu", "py": "cp311", "arch": "i686"} - {"os": "ubuntu", "py": "cp37", "arch": "aarch64"} - {"os": "ubuntu", "py": "cp38", "arch": "aarch64"} - {"os": "ubuntu", "py": "cp39", "arch": "aarch64"} - {"os": "ubuntu", "py": "cp310", "arch": "aarch64"} + - {"os": "ubuntu", "py": "cp311", "arch": "aarch64"} - {"os": "macos", "py": "cp38", "arch": "arm64"} - {"os": "macos", "py": "cp39", "arch": "arm64"} - {"os": "macos", "py": "cp310", "arch": "arm64"} @@ -103,29 +119,33 @@ - {"os": "macos", "py": "cp38", "arch": "x86_64"} - {"os": "macos", "py": "cp39", "arch": "x86_64"} - {"os": "macos", "py": "cp310", "arch": "x86_64"} + - {"os": "macos", "py": "cp311", "arch": "x86_64"} - {"os": "windows", "py": "cp37", "arch": "x86"} - {"os": "windows", "py": "cp38", "arch": "x86"} - {"os": "windows", "py": "cp39", "arch": "x86"} - {"os": "windows", "py": "cp310", "arch": "x86"} + - {"os": "windows", "py": "cp311", "arch": "x86"} - {"os": "windows", "py": "cp37", "arch": "AMD64"} - {"os": "windows", "py": "cp38", "arch": "AMD64"} - {"os": "windows", "py": "cp39", "arch": "AMD64"} - {"os": "windows", "py": "cp310", "arch": "AMD64"} - # end (checksum: 4b02126e18e2b3798783d3cc6f303552) + - {"os": "windows", "py": "cp311", "arch": "AMD64"} + # end (checksum: 428e5138336453464dde968cc3149f4f) fail-fast: false steps: - - name: Setup QEMU + - name: "Setup QEMU" if: matrix.os == 'ubuntu' - uses: docker/setup-qemu-action@v1 + # uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@8b122486cedac8393e77aa9734c3528886e4a1a8 with: platforms: arm64 - name: "Check out the repo" - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: "Install Python 3.8" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: "3.8" cache: pip @@ -133,7 +153,7 @@ - name: "Install tools" run: | - python -m pip install -r requirements/kit.pip + python -m pip install --require-hashes -r requirements/kit.pip - name: "Build wheels" env: @@ -149,7 +169,7 @@ ls -al wheelhouse/ - name: "Upload wheels" - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: dist path: wheelhouse/*.whl @@ -159,10 +179,10 @@ runs-on: ubuntu-latest steps: - name: "Check out the repo" - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: "Install Python 3.8" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: python-version: "3.8" cache: pip @@ -170,7 +190,7 @@ - name: "Install tools" run: | - python -m pip install -r requirements/kit.pip + python -m pip install --require-hashes -r requirements/kit.pip - name: "Build sdist" run: | @@ -181,7 +201,7 @@ ls -al dist/ - name: "Upload sdist" - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: dist path: dist/*.tar.gz @@ -191,10 +211,10 @@ runs-on: ubuntu-latest steps: - name: "Check out the repo" - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: "Install PyPy" - uses: actions/setup-python@v2 + uses: actions/setup-python@v4 with: # PYVERSIONS python-version: "pypy-3.7" @@ -216,65 +236,7 @@ ls -al dist/ - name: "Upload wheels" - uses: actions/upload-artifact@v2 - with: - name: dist - path: dist/*.whl - - prerel: - name: "Build pre-rel ${{ matrix.os }} ${{ matrix.py }} wheels" - # Our C extension uses internal fields, which are moving during the 3.11.0 - # alpha phases. Don't pre-build wheels. - if: ${{ false }} # true when there are pre-rel, false when not. - runs-on: "${{ matrix.os }}-latest" - strategy: - matrix: - os: - - ubuntu - - windows - - macos - py: - # PYVERSIONS. Available versions: - # https://github.com/actions/python-versions/blob/main/versions-manifest.json - - "3.11.0-alpha.5" - fail-fast: false - - steps: - - name: "Check out the repo" - uses: actions/checkout@v2 - - - name: "Install Python ${{ matrix.py }}" - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.py }} - cache: pip - cache-dependency-path: 'requirements/*.pip' -
View file
_service:tar_scm:coverage-6.3.2.tar.gz/.github/workflows/python-nightly.yml -> _service:tar_scm:coverage-6.5.0.tar.gz/.github/workflows/python-nightly.yml
Changed
@@ -8,10 +8,10 @@ branches: - "**/*nightly*" schedule: - # Run at 2:22am early Saturday morning Eastern time (6/7:22 UTC) + # Run at 2:22am early every morning Eastern time (6/7:22 UTC) # so that we get tips of CPython development tested. - # https://crontab.guru/#22_7_*_*_6 - - cron: "22 7 * * 6" + # https://crontab.guru/#22_7_%2a_%2a_%2a + - cron: "22 7 * * *" workflow_dispatch: defaults: @@ -22,6 +22,13 @@ PIP_DISABLE_PIP_VERSION_CHECK: 1 COVERAGE_IGOR_VERBOSE: 1 +permissions: + contents: read + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + jobs: tests: name: "Python ${{ matrix.python-version }}" @@ -45,26 +52,32 @@ steps: - name: "Check out the repo" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Install ${{ matrix.python-version }} with deadsnakes" - uses: "deadsnakes/action@v2.1.1" + # uses: deadsnakes/action@v2.1.1 + uses: deadsnakes/action@7ab8819e223c70d2bdedd692dfcea75824e0a617 if: "!startsWith(matrix.python-version, 'pypy-')" with: python-version: "${{ matrix.python-version }}" - name: "Install ${{ matrix.python-version }} with setup-python" - uses: "actions/setup-python@v2" + uses: "actions/setup-python@v4" if: "startsWith(matrix.python-version, 'pypy-')" with: python-version: "${{ matrix.python-version }}" - - name: "Install dependencies" + - name: "Show diagnostic info" run: | set -xe python -VV python -m site - python -m pip install -r requirements/tox.pip + python -m coverage debug sys + python -m coverage debug pybehave + + - name: "Install dependencies" + run: | + python -m pip install --require-hashes -r requirements/tox.pip - name: "Run tox" run: |
View file
_service:tar_scm:coverage-6.3.2.tar.gz/.github/workflows/quality.yml -> _service:tar_scm:coverage-6.5.0.tar.gz/.github/workflows/quality.yml
Changed
@@ -18,6 +18,13 @@ env: PIP_DISABLE_PIP_VERSION_CHECK: 1 +permissions: + contents: read + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + jobs: lint: name: "Pylint etc" @@ -28,10 +35,10 @@ steps: - name: "Check out the repo" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Install Python" - uses: "actions/setup-python@v2" + uses: "actions/setup-python@v4" with: python-version: "3.7" # Minimum of PYVERSIONS cache: pip @@ -42,7 +49,7 @@ set -xe python -VV python -m site - python -m pip install -r requirements/tox.pip + python -m pip install --require-hashes -r requirements/tox.pip - name: "Tox lint" run: | @@ -54,10 +61,10 @@ steps: - name: "Check out the repo" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Install Python" - uses: "actions/setup-python@v2" + uses: "actions/setup-python@v4" with: python-version: "3.7" # Minimum of PYVERSIONS cache: pip @@ -68,7 +75,7 @@ set -xe python -VV python -m site - python -m pip install -r requirements/tox.pip + python -m pip install --require-hashes -r requirements/tox.pip - name: "Tox doc" run: |
View file
_service:tar_scm:coverage-6.3.2.tar.gz/.github/workflows/testsuite.yml -> _service:tar_scm:coverage-6.5.0.tar.gz/.github/workflows/testsuite.yml
Changed
@@ -19,43 +19,47 @@ PIP_DISABLE_PIP_VERSION_CHECK: 1 COVERAGE_IGOR_VERBOSE: 1 +permissions: + contents: read + +concurrency: + group: "${{ github.workflow }}-${{ github.ref }}" + cancel-in-progress: true + jobs: tests: - name: "Python ${{ matrix.python-version }} on ${{ matrix.os }}" - runs-on: "${{ matrix.os }}" + name: "${{ matrix.python-version }} on ${{ matrix.os }}" + runs-on: "${{ matrix.os }}-latest" strategy: matrix: os: - - ubuntu-latest - - macos-latest - - windows-latest + - ubuntu + - macos + - windows python-version: # When changing this list, be sure to check the gh-actions list in # tox.ini so that tox will run properly. PYVERSIONS # Available versions: # https://github.com/actions/python-versions/blob/main/versions-manifest.json + # https://github.com/actions/setup-python/blob/main/docs/advanced-usage.md#available-versions-of-python-and-pypy - "3.7" - "3.8" - "3.9" - "3.10" - - "3.11.0-alpha.5" + - "3.11.0-rc.2" - "pypy-3.7" - exclude: - # Windows PyPy doesn't seem to work? - - os: windows-latest - python-version: "pypy-3.7" + - "pypy-3.9" fail-fast: false steps: - name: "Check out the repo" - uses: "actions/checkout@v2" + uses: "actions/checkout@v3" - name: "Set up Python" - uses: "actions/setup-python@v2" + uses: "actions/setup-python@v4" with: python-version: "${{ matrix.python-version }}" - # Can we start using the pip cache again? cache: pip cache-dependency-path: 'requirements/*.pip' @@ -64,7 +68,7 @@ set -xe python -VV python -m site - python -m pip install -r requirements/tox.pip + python -m pip install --require-hashes -r requirements/tox.pip # For extreme debugging: # python -c "import urllib.request as r; exec(r.urlopen('https://bit.ly/pydoctor').read())" @@ -86,3 +90,14 @@ if ${{ steps.tox1.outcome != 'success' && steps.tox2.outcome != 'success' }}; then exit 1 fi + + # A final step to give a simple name for required status checks. + # https://github.com/orgs/community/discussions/33579 + success: + needs: tests + runs-on: ubuntu-latest + name: Tests successful + steps: + - name: "Success" + run: | + echo Tests successful
View file
_service:tar_scm:coverage-6.3.2.tar.gz/CHANGES.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/CHANGES.rst
Changed
@@ -12,11 +12,172 @@ .. When updating the "Unreleased" header to a specific version, use this .. format. Don't forget the jump target: .. - .. .. _changes_981: + .. .. _changes_9-8-1: .. .. Version 9.8.1 — 2027-07-27 .. -------------------------- +.. _changes_6-5-0: + +Version 6.5.0 — 2022-09-29 +-------------------------- + +- The JSON report now includes details of which branches were taken, and which + are missing for each file. Thanks, Christoph Blessing (`pull 1438`_). Closes + `issue 1425`_. + +- Starting with coverage.py 6.2, ``class`` statements were marked as a branch. + This wasn't right, and has been reverted, fixing `issue 1449`_. Note this + will very slightly reduce your coverage total if you are measuring branch + coverage. + +- Packaging is now compliant with `PEP 517`_, closing `issue 1395`_. + +- A new debug option ``--debug=pathmap`` shows details of the remapping of + paths that happens during combine due to the ``paths`` setting. + +- Fix an internal problem with caching of invalid Python parsing. Found by + OSS-Fuzz, fixing their `bug 50381`_. + +.. _bug 50381: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=50381 +.. _PEP 517: https://peps.python.org/pep-0517/ +.. _issue 1395: https://github.com/nedbat/coveragepy/issues/1395 +.. _issue 1425: https://github.com/nedbat/coveragepy/issues/1425 +.. _pull 1438: https://github.com/nedbat/coveragepy/pull/1438 +.. _issue 1449: https://github.com/nedbat/coveragepy/issues/1449 + + +.. _changes_6-4-4: + +Version 6.4.4 — 2022-08-16 +-------------------------- + +- Wheels are now provided for Python 3.11. + + +.. _changes_6-4-3: + +Version 6.4.3 — 2022-08-06 +-------------------------- + +- Fix a failure when combining data files if the file names contained + glob-like patterns (`pull 1405`_). Thanks, Michael Krebs and Benjamin + Schubert. + +- Fix a messaging failure when combining Windows data files on a different + drive than the current directory. (`pull 1430`_, fixing `issue 1428`_). + Thanks, Lorenzo Micò. + +- Fix path calculations when running in the root directory, as you might do in + a Docker container: `pull 1403`_, thanks Arthur Rio. + +- Filtering in the HTML report wouldn't work when reloading the index page. + This is now fixed (`pull 1413`_). Thanks, Marc Legendre. + +- Fix a problem with Cython code measurement (`pull 1347`_, fixing `issue + 972`_). Thanks, Matus Valo. + +.. _issue 972: https://github.com/nedbat/coveragepy/issues/972 +.. _pull 1347: https://github.com/nedbat/coveragepy/pull/1347 +.. _pull 1403: https://github.com/nedbat/coveragepy/issues/1403 +.. _pull 1405: https://github.com/nedbat/coveragepy/issues/1405 +.. _pull 1413: https://github.com/nedbat/coveragepy/issues/1413 +.. _issue 1428: https://github.com/nedbat/coveragepy/issues/1428 +.. _pull 1430: https://github.com/nedbat/coveragepy/pull/1430 + + +.. _changes_6-4-2: + +Version 6.4.2 — 2022-07-12 +-------------------------- + +- Updated for a small change in Python 3.11.0 beta 4: modules now start with a + line with line number 0, which is ignored. This line cannnot be executed, so + coverage totals were thrown off. This line is now ignored by coverage.py, + but this also means that truly empty modules (like ``__init__.py``) have no + lines in them, rather than one phantom line. Fixes `issue 1419`_. + +- Internal debugging data added to sys.modules is now an actual module, to + avoid confusing code that examines everything in sys.modules. Thanks, + Yilei Yang (`pull 1399`_). + +.. _pull 1399: https://github.com/nedbat/coveragepy/pull/1399 +.. _issue 1419: https://github.com/nedbat/coveragepy/issues/1419 + + +.. _changes_6-4-1: + +Version 6.4.1 — 2022-06-02 +-------------------------- + +- Greatly improved performance on PyPy, and other environments that need the + pure Python trace function. Thanks, Carl Friedrich Bolz-Tereick (`pull + 1381`_ and `pull 1388`_). Slightly improved performance when using the C + trace function, as most environments do. Closes `issue 1339`_. + +- The conditions for using tomllib from the standard library have been made + more precise, so that 3.11 alphas will continue to work. Closes `issue + 1390`_. + +.. _issue 1339: https://github.com/nedbat/coveragepy/issues/1339 +.. _pull 1381: https://github.com/nedbat/coveragepy/pull/1381 +.. _pull 1388: https://github.com/nedbat/coveragepy/pull/1388 +.. _issue 1390: https://github.com/nedbat/coveragepy/issues/1390 + + +.. _changes_64: + +Version 6.4 — 2022-05-22 +------------------------ + +- A new setting, :ref:`config_run_sigterm`, controls whether a SIGTERM signal + handler is used. In 6.3, the signal handler was always installed, to capture + data at unusual process ends. Unfortunately, this introduced other problems + (see `issue 1310`_). Now the signal handler is only used if you opt-in by + setting ``run sigterm = true``. + +- Small changes to the HTML report: + + - Added links to next and previous file, and more keyboard shortcuts: ```` + and ```` for next file and previous file; ``u`` for up to the index; and + ``?`` to open/close the help panel. Thanks, `J. M. F. Tsang + <pull 1364_>`_. + + - The timestamp and version are displayed at the top of the report. Thanks, + `Ammar Askar <pull 1354_>`_. Closes `issue 1351`_. + +- A new debug option ``debug=sqldata`` adds more detail to ``debug=sql``, + logging all the data being written to the database. + +- Previously, running ``coverage report`` (or any of the reporting commands) in + an empty directory would create a .coverage data file. Now they do not, + fixing `issue 1328`_. + +- On Python 3.11, the ``toml`` extra no longer installs tomli, instead using + tomllib from the standard library. Thanks `Shantanu <pull 1359_>`_. + +- In-memory CoverageData objects now properly update(), closing `issue 1323`_. + +.. _issue 1310: https://github.com/nedbat/coveragepy/issues/1310 +.. _issue 1323: https://github.com/nedbat/coveragepy/issues/1323 +.. _issue 1328: https://github.com/nedbat/coveragepy/issues/1328 +.. _issue 1351: https://github.com/nedbat/coveragepy/issues/1351 +.. _pull 1354: https://github.com/nedbat/coveragepy/pull/1354 +.. _pull 1359: https://github.com/nedbat/coveragepy/pull/1359 +.. _pull 1364: https://github.com/nedbat/coveragepy/pull/1364 + + +.. _changes_633: + +Version 6.3.3 — 2022-05-12 +-------------------------- + +- Fix: Coverage.py now builds successfully on CPython 3.11 (3.11.0b1) again. + Closes `issue 1367`_. Some results for generators may have changed. + +.. _issue 1367: https://github.com/nedbat/coveragepy/issues/1367 + + .. _changes_632: Version 6.3.2 — 2022-02-20 @@ -26,8 +187,8 @@ decorators like CPython 3.8: both the @-line and the def-line are traced. Fixes `issue 1326`_. -- Debug: added ``pybehave`` to the list of :ref:`cmd_debug` and - :ref:`cmd_run_debug` options. +- Debug: added ``pybehave`` to the list of :ref:`coverage debug <cmd_debug>` + and :ref:`cmd_run_debug` options. - Fix: show an intelligible error message if ``--concurrency=multiprocessing`` is used without a configuration file. Closes `issue 1320`_.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/CONTRIBUTORS.txt -> _service:tar_scm:coverage-6.5.0.tar.gz/CONTRIBUTORS.txt
Changed
@@ -14,14 +14,17 @@ Alex Sandro Alexander Todorov Alexander Walters +Ammar Askar Andrew Hoos Anthony Sottile Arcadiy Ivanov Aron Griffis Artem Dayneko Arthur Deygin +Arthur Rio Ben Carlsson Ben Finney +Benjamin Schubert Bernát Gábor Bill Hart Bradley Burns @@ -30,6 +33,7 @@ Bruno P. Kinoshita Buck Evan Calen Pennington +Carl Friedrich Bolz-Tereick Carl Gieringer Catherine Proulx Chris Adams @@ -38,6 +42,7 @@ Chris Warrick Christian Heimes Christine Lytwynec +Christoph Blessing Christoph Zwerschke Clément Pit-Claudel Conrad Ho @@ -75,6 +80,7 @@ Ilia Meerovich Imri Goldberg Ionel Cristian Mărieș +J. M. F. Tsang JT Olds Jerin Peter George Jessamyn Smith @@ -95,7 +101,9 @@ Leonardo Pistone Lex Berezhny Loïc Dachary +Lorenzo Micò Marc Abramowitz +Marc Legendre Marcelo Trylesinski Marcus Cobden Marius Gedminas @@ -104,7 +112,9 @@ Matt Bachmann Matthew Boehm Matthew Desmarais +Matus Valo Max Linke +Michael Krebs Michał Bultrowicz Mickie Betz Mike Fiedler @@ -137,6 +147,7 @@ Stefan Behnel Stephan Richter Stephen Finucane +Steve Dower Steve Leonard Steve Peak S. Y. Lee @@ -149,6 +160,7 @@ Vince Salvino Ville Skyttä Xie Yanbo +Yilei "Dolee" Yang Yury Selivanov Zac Hatfield-Dodds Zooko Wilcox-O'Hearn
View file
_service:tar_scm:coverage-6.3.2.tar.gz/Makefile -> _service:tar_scm:coverage-6.5.0.tar.gz/Makefile
Changed
@@ -72,9 +72,18 @@ ##@ Requirements management +# When updating requirements, a few rules to follow: +# +# 1) Don't install more than one .pip file at once. Always use pip-compile to +# combine .in files onto a single .pip file that can be installed where needed. +# +# 2) Check manual pins before `make upgrade` to see if they can be removed. Look +# in requirements/pins.pip, and search for "windows" in .in files to find pins +# and extra requirements that have been needed, but might be obsolete. + .PHONY: upgrade -PIP_COMPILE = pip-compile --upgrade --allow-unsafe +PIP_COMPILE = pip-compile --upgrade --allow-unsafe --generate-hashes upgrade: export CUSTOM_COMPILE_COMMAND=make upgrade upgrade: ## Update the *.pip files with the latest packages satisfying *.in files. pip install -q -r requirements/pip-tools.pip @@ -86,6 +95,7 @@ $(PIP_COMPILE) -o requirements/dev.pip requirements/dev.in $(PIP_COMPILE) -o requirements/light-threads.pip requirements/light-threads.in $(PIP_COMPILE) -o doc/requirements.pip doc/requirements.in + $(PIP_COMPILE) -o requirements/lint.pip doc/requirements.in requirements/dev.in ##@ Pre-builds for prepping the code @@ -106,9 +116,35 @@ prebuild: css workflows cogdoc ## One command for all source prep. +##@ Sample HTML reports + +.PHONY: _sample_cog_html sample_html sample_html_beta + +_sample_cog_html: clean + python -m pip install -e . + cd ~/cog/trunk; \ + rm -rf htmlcov; \ + PYTEST_ADDOPTS= coverage run --branch --source=cogapp -m pytest -k CogTestsInMemory; \ + coverage combine; \ + coverage html + +sample_html: _sample_cog_html ## Generate sample HTML report. + rm -f doc/sample_html/*.* + cp -r ~/cog/trunk/htmlcov/ doc/sample_html/ + rm doc/sample_html/.gitignore + +sample_html_beta: _sample_cog_html ## Generate sample HTML report for a beta release. + rm -f doc/sample_html_beta/*.* + cp -r ~/cog/trunk/htmlcov/ doc/sample_html_beta/ + rm doc/sample_html_beta/.gitignore + + ##@ Kitting: making releases -.PHONY: kit kit_upload test_upload kit_local download_kits check_kits +.PHONY: kit kit_upload test_upload kit_local build_kits download_kits check_kits tag +.PHONY: update_stable comment_on_fixes + +REPO_OWNER = nedbat/coveragepy kit: ## Make the source distribution. python -m build @@ -117,7 +153,7 @@ twine upload --verbose dist/* test_upload: ## Upload the distributions to PyPI's testing server. - twine upload --verbose --repository testpypi dist/* + twine upload --verbose --repository testpypi --password $$TWINE_TEST_PASSWORD dist/* kit_local: # pip.conf looks like this: @@ -128,12 +164,23 @@ # don't go crazy trying to figure out why our new code isn't installing. find ~/Library/Caches/pip/wheels -name 'coverage-*' -delete +build_kits: ## Trigger GitHub to build kits + python ci/trigger_build_kits.py $(REPO_OWNER) + download_kits: ## Download the built kits from GitHub. - python ci/download_gha_artifacts.py nedbat/coveragepy + python ci/download_gha_artifacts.py $(REPO_OWNER) check_kits: ## Check that dist/* are well-formed. python -m twine check dist/* +tag: ## Make a git tag with the version number. + git tag -a -m "Version $$(python setup.py --version)" $$(python setup.py --version) + git push --follow-tags + +update_stable: ## Set the stable branch to the latest release. + git branch -f stable $$(python setup.py --version) + git push origin stable + ##@ Documentation @@ -189,4 +236,7 @@ $(DOCBIN)/python ci/parse_relnotes.py tmp/rst_rst/changes.md $(RELNOTES_JSON) github_releases: $(RELNOTES_JSON) ## Update GitHub releases. - $(DOCBIN)/python ci/github_releases.py $(RELNOTES_JSON) nedbat/coveragepy + $(DOCBIN)/python ci/github_releases.py $(RELNOTES_JSON) $(REPO_OWNER) + +comment_on_fixes: $(RELNOTES_JSON) ## Add a comment to issues that were fixed. + python ci/comment_on_fixes.py $(REPO_OWNER)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/PKG-INFO -> _service:tar_scm:coverage-6.5.0.tar.gz/PKG-INFO
Changed
@@ -1,9 +1,9 @@ Metadata-Version: 2.1 Name: coverage -Version: 6.3.2 +Version: 6.5.0 Summary: Code coverage measurement for Python Home-page: https://github.com/nedbat/coveragepy -Author: Ned Batchelder and 149 others +Author: Ned Batchelder and 161 others Author-email: ned@nedbatchelder.com License: Apache 2.0 Project-URL: Documentation, https://coverage.readthedocs.io @@ -11,7 +11,6 @@ Project-URL: Issues, https://github.com/nedbat/coveragepy/issues Project-URL: Twitter, https://twitter.com/coveragepy Keywords: code coverage testing -Platform: UNKNOWN Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Apache Software License @@ -42,11 +41,18 @@ Code coverage testing for Python. +.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg + :target: https://vshymanskyy.github.io/StandWithUkraine + :alt: Stand with Ukraine + +------------- + | |license| |versions| |status| | |test-status| |quality-status| |docs| |metacov| | |kit| |downloads| |format| |repos| | |stars| |forks| |contributors| -| |tidelift| |twitter-coveragepy| |twitter-nedbat| +| |tidelift| |core-infrastructure| |open-ssf| +| |sponsor| |twitter-coveragepy| |twitter-nedbat| Coverage.py measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard @@ -56,7 +62,7 @@ .. PYVERSIONS -* CPython 3.7 through 3.11.0a4. +* CPython 3.7 through 3.11.0 rc2. * PyPy3 7.3.8. Documentation is on `Read the Docs`_. Code repository and issue tracker are on @@ -106,6 +112,16 @@ .. _change history page: https://coverage.readthedocs.io/en/latest/changes.html +Code of Conduct +--------------- + +Everyone participating in the coverage.py project is expected to treat other +people with respect and to follow the guidelines articulated in the `Python +Community Code of Conduct`_. + +.. _Python Community Code of Conduct: https://www.python.org/psf/codeofconduct/ + + Contributing ------------ @@ -183,5 +199,12 @@ .. |twitter-nedbat| image:: https://img.shields.io/twitter/follow/nedbat.svg?label=nedbat&style=flat&logo=twitter&logoColor=4FADFF :target: https://twitter.com/nedbat :alt: nedbat on Twitter - - +.. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub + :target: https://github.com/sponsors/nedbat + :alt: Sponsor me on GitHub +.. |core-infrastructure| image:: https://bestpractices.coreinfrastructure.org/projects/6412/badge + :target: https://bestpractices.coreinfrastructure.org/projects/6412 + :alt: Core Infrastructure Initiative: passing +.. |open-ssf| image:: https://api.securityscorecards.dev/projects/github.com/nedbat/coveragepy/badge + :target: https://deps.dev/pypi/coverage + :alt: OpenSSF Scorecard
View file
_service:tar_scm:coverage-6.3.2.tar.gz/README.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/README.rst
Changed
@@ -7,11 +7,18 @@ Code coverage testing for Python. +.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg + :target: https://vshymanskyy.github.io/StandWithUkraine + :alt: Stand with Ukraine + +------------- + | |license| |versions| |status| | |test-status| |quality-status| |docs| |metacov| | |kit| |downloads| |format| |repos| | |stars| |forks| |contributors| -| |tidelift| |twitter-coveragepy| |twitter-nedbat| +| |tidelift| |core-infrastructure| |open-ssf| +| |sponsor| |twitter-coveragepy| |twitter-nedbat| Coverage.py measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard @@ -21,7 +28,7 @@ .. PYVERSIONS -* CPython 3.7 through 3.11.0a4. +* CPython 3.7 through 3.11.0 rc2. * PyPy3 7.3.8. Documentation is on `Read the Docs`_. Code repository and issue tracker are on @@ -71,6 +78,16 @@ .. _change history page: https://coverage.readthedocs.io/en/latest/changes.html +Code of Conduct +--------------- + +Everyone participating in the coverage.py project is expected to treat other +people with respect and to follow the guidelines articulated in the `Python +Community Code of Conduct`_. + +.. _Python Community Code of Conduct: https://www.python.org/psf/codeofconduct/ + + Contributing ------------ @@ -148,3 +165,12 @@ .. |twitter-nedbat| image:: https://img.shields.io/twitter/follow/nedbat.svg?label=nedbat&style=flat&logo=twitter&logoColor=4FADFF :target: https://twitter.com/nedbat :alt: nedbat on Twitter +.. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub + :target: https://github.com/sponsors/nedbat + :alt: Sponsor me on GitHub +.. |core-infrastructure| image:: https://bestpractices.coreinfrastructure.org/projects/6412/badge + :target: https://bestpractices.coreinfrastructure.org/projects/6412 + :alt: Core Infrastructure Initiative: passing +.. |open-ssf| image:: https://api.securityscorecards.dev/projects/github.com/nedbat/coveragepy/badge + :target: https://deps.dev/pypi/coverage + :alt: OpenSSF Scorecard
View file
_service:tar_scm:coverage-6.3.2.tar.gz/ci/comment_on_fixes.py -> _service:tar_scm:coverage-6.5.0.tar.gz/ci/comment_on_fixes.py
Changed
@@ -1,7 +1,11 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + """Add a release comment to all the issues mentioned in the latest release.""" import json import re +import sys import requests @@ -13,23 +17,34 @@ comment = ( f"This is now released as part of coverage {version}" + f"(https://pypi.org/project/coverage/{version})." - ) -print(f"Comment will be: {comment}") +) +print(f"Comment will be:\n\n{comment}\n") -owner = "nedbat" -repo = "coveragepy" -for m in re.finditer(r"https://github.com/nedbat/coveragepy/(issues|pull)/(\d+)", latest"text"): +repo_owner = sys.argv1 +for m in re.finditer(rf"https://github.com/{repo_owner}/(issues|pull)/(\d+)", latest"text"): kind, number = m.groups() + do_comment = False if kind == "issues": - url = f"https://api.github.com/repos/{owner}/{repo}/issues/{number}" + url = f"https://api.github.com/repos/{repo_owner}/issues/{number}" issue_data = requests.get(url).json() if issue_data"state" == "closed": - print(f"Commenting on {m0}") - url = f"https://api.github.com/repos/{owner}/{repo}/issues/{number}/comments" - resp = requests.post(url, json={"body": comment}) - print(resp) + do_comment = True else: print(f"Still open, comment manually: {m0}") else: - print(f"You need to manually coment on {m0}") + url = f"https://api.github.com/repos/{repo_owner}/pulls/{number}" + pull_data = requests.get(url).json() + if pull_data"state" == "closed": + if pull_data"merged": + do_comment = True + else: + print(f"Not merged, comment manually: {m0}") + else: + print(f"Still open, comment manually: {m0}") + + if do_comment: + print(f"Commenting on {m0}") + url = f"https://api.github.com/repos/{repo_owner}/issues/{number}/comments" + resp = requests.post(url, json={"body": comment}) + print(resp)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/ci/github_releases.py -> _service:tar_scm:coverage-6.5.0.tar.gz/ci/github_releases.py
Changed
@@ -1,7 +1,7 @@ -#!/usr/bin/env python3 -""" -Upload release notes into GitHub releases. -""" +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +"""Upload release notes into GitHub releases.""" import json import shlex @@ -135,4 +135,4 @@ update_release(gh_session, url, relnote) if __name__ == "__main__": - update_github_releases(*sys.argv1:) # pylint: disable=no-value-for-parameter + update_github_releases(*sys.argv1:3)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/ci/parse_relnotes.py -> _service:tar_scm:coverage-6.5.0.tar.gz/ci/parse_relnotes.py
Changed
@@ -1,4 +1,6 @@ -#!/usr/bin/env python3 +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + """ Parse CHANGES.md into a JSON structure. @@ -84,6 +86,14 @@ else: return None + +def fix_ref_links(text, version): + """Find links to .rst files, and make them full RTFD links.""" + def new_link(m): + return f"(https://coverage.readthedocs.io/en/{version}/{m1}.html{m2})" + return re.sub(r"\\((\w+)\.rst(#.*?)\)", new_link, text) + + def relnotes(mdlines): r"""Yield (version, text) pairs from markdown lines. @@ -97,6 +107,7 @@ if version: prerelease = any(c in version for c in "abc") when = refind(r"\d+-\d+-\d+", htext) + text = fix_ref_links(text, version) yield { "version": version, "text": text, @@ -112,4 +123,4 @@ json.dump(list(relnotes(markdown.splitlines(True))), jf, indent=4) if __name__ == "__main__": - parse(*sys.argv1:) # pylint: disable=no-value-for-parameter + parse(*sys.argv1:3)
View file
_service:tar_scm:coverage-6.5.0.tar.gz/ci/trigger_build_kits.py
Added
@@ -0,0 +1,26 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +"""Trigger the GitHub action to build our kits.""" + +import sys + +import requests + +repo_owner = sys.argv1 + +# The GitHub URL makes no mention of which workflow to use. It's found based on +# the event_type, which matches the types in the workflow: +# +# on: +# repository_dispatch: +# types: +# - build-kits +# + +resp = requests.post( + f"https://api.github.com/repos/{repo_owner}/dispatches", + json={"event_type": "build-kits"}, +) +print(f"Status: {resp.status_code}") +print(resp.text)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage.egg-info/PKG-INFO -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage.egg-info/PKG-INFO
Changed
@@ -1,9 +1,9 @@ Metadata-Version: 2.1 Name: coverage -Version: 6.3.2 +Version: 6.5.0 Summary: Code coverage measurement for Python Home-page: https://github.com/nedbat/coveragepy -Author: Ned Batchelder and 149 others +Author: Ned Batchelder and 161 others Author-email: ned@nedbatchelder.com License: Apache 2.0 Project-URL: Documentation, https://coverage.readthedocs.io @@ -11,7 +11,6 @@ Project-URL: Issues, https://github.com/nedbat/coveragepy/issues Project-URL: Twitter, https://twitter.com/coveragepy Keywords: code coverage testing -Platform: UNKNOWN Classifier: Environment :: Console Classifier: Intended Audience :: Developers Classifier: License :: OSI Approved :: Apache Software License @@ -42,11 +41,18 @@ Code coverage testing for Python. +.. image:: https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/banner2-direct.svg + :target: https://vshymanskyy.github.io/StandWithUkraine + :alt: Stand with Ukraine + +------------- + | |license| |versions| |status| | |test-status| |quality-status| |docs| |metacov| | |kit| |downloads| |format| |repos| | |stars| |forks| |contributors| -| |tidelift| |twitter-coveragepy| |twitter-nedbat| +| |tidelift| |core-infrastructure| |open-ssf| +| |sponsor| |twitter-coveragepy| |twitter-nedbat| Coverage.py measures code coverage, typically during test execution. It uses the code analysis tools and tracing hooks provided in the Python standard @@ -56,7 +62,7 @@ .. PYVERSIONS -* CPython 3.7 through 3.11.0a4. +* CPython 3.7 through 3.11.0 rc2. * PyPy3 7.3.8. Documentation is on `Read the Docs`_. Code repository and issue tracker are on @@ -106,6 +112,16 @@ .. _change history page: https://coverage.readthedocs.io/en/latest/changes.html +Code of Conduct +--------------- + +Everyone participating in the coverage.py project is expected to treat other +people with respect and to follow the guidelines articulated in the `Python +Community Code of Conduct`_. + +.. _Python Community Code of Conduct: https://www.python.org/psf/codeofconduct/ + + Contributing ------------ @@ -183,5 +199,12 @@ .. |twitter-nedbat| image:: https://img.shields.io/twitter/follow/nedbat.svg?label=nedbat&style=flat&logo=twitter&logoColor=4FADFF :target: https://twitter.com/nedbat :alt: nedbat on Twitter - - +.. |sponsor| image:: https://img.shields.io/badge/%E2%9D%A4-Sponsor%20me-brightgreen?style=flat&logo=GitHub + :target: https://github.com/sponsors/nedbat + :alt: Sponsor me on GitHub +.. |core-infrastructure| image:: https://bestpractices.coreinfrastructure.org/projects/6412/badge + :target: https://bestpractices.coreinfrastructure.org/projects/6412 + :alt: Core Infrastructure Initiative: passing +.. |open-ssf| image:: https://api.securityscorecards.dev/projects/github.com/nedbat/coveragepy/badge + :target: https://deps.dev/pypi/coverage + :alt: OpenSSF Scorecard
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage.egg-info/SOURCES.txt -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage.egg-info/SOURCES.txt
Changed
@@ -12,16 +12,20 @@ igor.py metacov.ini pylintrc +pyproject.toml setup.cfg setup.py tox.ini +.github/CODE_OF_CONDUCT.md .github/FUNDING.yml +.github/SECURITY.md .github/dependabot.yml .github/ISSUE_TEMPLATE/bug_report.md .github/ISSUE_TEMPLATE/config.yml .github/ISSUE_TEMPLATE/feature_request.md -.github/workflows/cancel.yml +.github/workflows/codeql-analysis.yml .github/workflows/coverage.yml +.github/workflows/dependency-review.yml .github/workflows/kit.yml .github/workflows/python-nightly.yml .github/workflows/quality.yml @@ -31,6 +35,7 @@ ci/download_gha_artifacts.py ci/github_releases.py ci/parse_relnotes.py +ci/trigger_build_kits.py coverage/__init__.py coverage/__main__.py coverage/annotate.py @@ -131,6 +136,7 @@ doc/sample_html/keybd_closed.png doc/sample_html/keybd_open.png lab/README.txt +lab/benchmark.py lab/bpo_prelude.py lab/branch_trace.py lab/branches.py @@ -159,6 +165,7 @@ requirements/kit.pip requirements/light-threads.in requirements/light-threads.pip +requirements/lint.pip requirements/pins.pip requirements/pip-tools.in requirements/pip-tools.pip
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage.egg-info/requires.txt -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage.egg-info/requires.txt
Changed
@@ -1,3 +1,5 @@ toml + +toml:python_full_version <= "3.11.0a6" tomli
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/cmdline.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/cmdline.py
Changed
@@ -232,9 +232,7 @@ """ def __init__(self, *args, **kwargs): - super().__init__( - add_help_option=False, *args, **kwargs - ) + super().__init__(add_help_option=False, *args, **kwargs) self.set_defaults( # Keep these arguments alphabetized by their names. action=None, @@ -267,7 +265,7 @@ timid=None, title=None, version=None, - ) + ) self.disable_interspersed_args() @@ -352,7 +350,7 @@ Opts.debug, Opts.help, Opts.rcfile, - + COMMANDS = { 'annotate': CmdOptionParser( @@ -473,7 +471,7 @@ Opts.output_lcov, Opts.omit, Opts.quiet, - + GLOBAL_ARGS, + + GLOBAL_ARGS, usage="options modules", description="Generate an LCOV report of coverage results.", ), @@ -648,7 +646,7 @@ check_preimported=True, context=options.context, messages=not options.quiet, - ) + ) if options.action == "debug": return self.do_debug(args) @@ -675,7 +673,7 @@ omit=omit, include=include, contexts=contexts, - ) + ) # We need to be able to import from the current directory, because # plugins may try to, for example, to read Django settings. @@ -692,7 +690,7 @@ skip_empty=options.skip_empty, sort=options.sort, **report_args - ) + ) elif options.action == "annotate": self.coverage.annotate(directory=options.directory, **report_args) elif options.action == "html": @@ -704,25 +702,25 @@ show_contexts=options.show_contexts, title=options.title, **report_args - ) + ) elif options.action == "xml": total = self.coverage.xml_report( outfile=options.outfile, skip_empty=options.skip_empty, **report_args - ) + ) elif options.action == "json": total = self.coverage.json_report( outfile=options.outfile, pretty_print=options.pretty_print, show_contexts=options.show_contexts, **report_args - ) + ) elif options.action == "lcov": total = self.coverage.lcov_report( outfile=options.outfile, **report_args - ) + ) else: # There are no other possible actions. raise AssertionError
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/collector.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/collector.py
Changed
@@ -145,6 +145,7 @@ raise ConfigError(f"Conflicting concurrency settings: {show}") do_threading = False + tried = "nothing" # to satisfy pylint try: if "greenlet" in concurrencies: tried = "greenlet" @@ -284,6 +285,8 @@ # for running code before the thread main is the tracing function. So we # install this as a trace function, and the first time it's called, it does # the real trace installation. + # + # New in 3.12: threading.settrace_all_threads: https://github.com/python/cpython/pull/96681 def _installation_trace(self, frame, event, arg): """Called on new threads, installs the real tracer.""" @@ -327,8 +330,7 @@ self._collectors.append(self) # Replay all the events from fullcoverage into the new trace function. - for args in traces0: - (frame, event, arg), lineno = args + for (frame, event, arg), lineno in traces0: try: fn(frame, event, arg, lineno=lineno) except TypeError as ex: @@ -432,7 +434,7 @@ else: raise runtime_err # pragma: cant happen - return {self.cached_mapped_file(k): v for k, v in items if v} + return {self.cached_mapped_file(k): v for k, v in items} def plugin_was_disabled(self, plugin): """Record that `plugin` was disabled during the run."""
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/config.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/config.py
Changed
@@ -190,6 +190,7 @@ self.relative_files = False self.run_include = None self.run_omit = None + self.sigterm = False self.source = None self.source_pkgs = self.timid = False @@ -364,6 +365,7 @@ ('relative_files', 'run:relative_files', 'boolean'), ('run_include', 'run:include', 'list'), ('run_omit', 'run:omit', 'list'), + ('sigterm', 'run:sigterm', 'boolean'), ('source', 'run:source', 'list'), ('source_pkgs', 'run:source_pkgs', 'list'), ('timid', 'run:timid', 'boolean'), @@ -499,7 +501,7 @@ """Make a list of (name, value) pairs for writing debug info.""" return human_sorted_items( (k, v) for k, v in self.__dict__.items() if not k.startswith("_") - ) + ) def config_files_to_try(config_file):
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/control.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/control.py
Changed
@@ -250,7 +250,7 @@ source=source, source_pkgs=source_pkgs, run_omit=omit, run_include=include, debug=debug, report_omit=omit, report_include=include, concurrency=concurrency, context=context, - ) + ) # If we have sub-process measurement happening automatically, then we # want any explicit creation of a Coverage object to mean, this process @@ -424,11 +424,15 @@ appropriate Python value. For example, use True for booleans, not the string ``"True"``. - As an example, calling:: + As an example, calling: + + .. code-block:: python cov.set_option("run:branch", True) - has the same effect as this configuration file:: + has the same effect as this configuration file: + + .. code-block:: ini run branch = True @@ -489,7 +493,7 @@ branch=self.config.branch, warn=self._warn, concurrency=concurrency, - ) + ) suffix = self._data_suffix_specified if suffix: @@ -515,10 +519,10 @@ ", ".join( plugin._coverage_plugin_name for plugin in self._plugins.file_tracers - ), + ), self._collector.tracer_name(), - ) ) + ) for plugin in self._plugins.file_tracers: plugin._coverage_enabled = False @@ -536,12 +540,13 @@ # Register our clean-up handlers. atexit.register(self._atexit) - is_main = (threading.current_thread() == threading.main_thread()) - if is_main and not env.WINDOWS: - # The Python docs seem to imply that SIGTERM works uniformly even - # on Windows, but that's not my experience, and this agrees: - # https://stackoverflow.com/questions/35772001/x/35792192#35792192 - self._old_sigterm = signal.signal(signal.SIGTERM, self._on_sigterm) + if self.config.sigterm: + is_main = (threading.current_thread() == threading.main_thread()) + if is_main and not env.WINDOWS: + # The Python docs seem to imply that SIGTERM works uniformly even + # on Windows, but that's not my experience, and this agrees: + # https://stackoverflow.com/questions/35772001/x/35792192#35792192 + self._old_sigterm = signal.signal(signal.SIGTERM, self._on_sigterm) def _init_data(self, suffix): """Create a data file if we don't have one yet.""" @@ -738,7 +743,10 @@ aliases = None if self.config.paths: - aliases = PathAliases(relative=self.config.relative_files) + aliases = PathAliases( + debugfn=(self._debug.write if self._debug.should("pathmap") else None), + relative=self.config.relative_files, + ) for paths in self.config.paths.values(): result = paths0 for pattern in paths1:: @@ -835,7 +843,7 @@ sorted(analysis.excluded), sorted(analysis.missing), analysis.missing_formatted(), - ) + ) def _analyze(self, it): """Analyze a single morf or code unit. @@ -1146,7 +1154,7 @@ ) )), ('command_line', " ".join(getattr(sys, 'argv', '-none-'))), - + if self._inorout: info.extend(self._inorout.sys_info())
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/ctracer/tracer.c -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/ctracer/tracer.c
Changed
@@ -119,6 +119,10 @@ } #if TRACE_LOG +/* Set debugging constants: a file substring and line number to start logging. */ +static const char * start_file = "badasync.py"; +static int start_line = 1; + static const char * indent(int n) { @@ -132,9 +136,6 @@ } static BOOL logging = FALSE; -/* Set these constants to be a file substring and line number to start logging. */ -static const char * start_file = "nested.py"; -static int start_line = 1; static void CTracer_showlog(CTracer * self, int lineno, PyObject * filename, const char * msg) @@ -306,6 +307,9 @@ PyObject * plugin = NULL; PyObject * plugin_name = NULL; PyObject * next_tracename = NULL; +#ifdef RESUME + PyObject * pCode = NULL; +#endif /* Borrowed references. */ PyObject * filename = NULL; @@ -510,6 +514,7 @@ Py_XDECREF(self->pcur_entry->file_data); self->pcur_entry->file_data = NULL; self->pcur_entry->file_tracer = Py_None; + frame->f_trace_lines = 0; SHOWLOG(PyFrame_GetLineNumber(frame), filename, "skipped"); } @@ -525,16 +530,16 @@ */ BOOL real_call = FALSE; -#ifdef RESUME // 3.11.0a4 +#ifdef RESUME /* * The current opcode is guaranteed to be RESUME. The argument * determines what kind of resume it is. */ - PyObject * pCode = MyFrame_GetCode(frame)->co_code; - real_call = (PyBytes_AS_STRING(pCode)MyFrame_lasti(frame) + 1 == 0); + pCode = MyCode_GetCode(MyFrame_GetCode(frame)); + real_call = (PyBytes_AS_STRING(pCode)MyFrame_GetLasti(frame) + 1 == 0); #else // f_lasti is -1 for a true call, and a real byte offset for a generator re-entry. - real_call = (MyFrame_lasti(frame) < 0); + real_call = (MyFrame_GetLasti(frame) < 0); #endif if (real_call) { @@ -548,6 +553,9 @@ ret = RET_OK; error: +#ifdef RESUME + MyCode_FreeCode(pCode); +#endif Py_XDECREF(next_tracename); Py_XDECREF(disposition); Py_XDECREF(plugin); @@ -688,6 +696,8 @@ { int ret = RET_ERROR; + PyObject * pCode = NULL; + STATS( self->stats.returns++; ) /* A near-copy of this code is above in the missing-return handler. */ if (CTracer_set_pdata_stack(self) < 0) { @@ -698,8 +708,8 @@ if (self->pdata_stack->depth >= 0) { if (self->tracing_arcs && self->pcur_entry->file_data) { BOOL real_return = FALSE; - PyObject * pCode = MyFrame_GetCode(frame)->co_code; - int lasti = MyFrame_lasti(frame); + pCode = MyCode_GetCode(MyFrame_GetCode(frame)); + int lasti = MyFrame_GetLasti(frame); Py_ssize_t code_size = PyBytes_GET_SIZE(pCode); unsigned char * code_bytes = (unsigned char *)PyBytes_AS_STRING(pCode); #ifdef RESUME @@ -759,6 +769,7 @@ error: + MyCode_FreeCode(pCode); return ret; } @@ -787,11 +798,13 @@ #endif #if WHAT_LOG + const char * w = "XXX "; if (what <= (int)(sizeof(what_sym)/sizeof(const char *))) { - ascii = PyUnicode_AsASCIIString(MyFrame_GetCode(frame)->co_filename); - printf("%x trace: f:%x %s @ %s %d\n", (int)self, (int)frame, what_symwhat, PyBytes_AS_STRING(ascii), PyFrame_GetLineNumber(frame)); - Py_DECREF(ascii); + w = what_symwhat; } + ascii = PyUnicode_AsASCIIString(MyFrame_GetCode(frame)->co_filename); + printf("%x trace: f:%x %s @ %s %d\n", (int)self, (int)frame, what_symwhat, PyBytes_AS_STRING(ascii), PyFrame_GetLineNumber(frame)); + Py_DECREF(ascii); #endif #if TRACE_LOG @@ -1000,7 +1013,7 @@ { #if COLLECT_STATS return Py_BuildValue( - "{sI,sI,sI,sI,sI,sI,sI,sI,si,sI,sI,sI}", + "{sI,sI,sI,sI,sI,sI,si,sI,sI,sI}", "calls", self->stats.calls, "lines", self->stats.lines, "returns", self->stats.returns,
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/ctracer/util.h -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/ctracer/util.h
Changed
@@ -17,13 +17,17 @@ // to make this work, but it's all I've got until https://bugs.python.org/issue40421 // is resolved. #include <internal/pycore_frame.h> -#define MyFrame_lasti(f) ((f)->f_frame->f_lasti * 2) +#if PY_VERSION_HEX >= 0x030B00A7 +#define MyFrame_GetLasti(f) (PyFrame_GetLasti(f)) +#else +#define MyFrame_GetLasti(f) ((f)->f_frame->f_lasti * 2) +#endif #elif PY_VERSION_HEX >= 0x030A00A7 // The f_lasti field changed meaning in 3.10.0a7. It had been bytes, but // now is instructions, so we need to adjust it to use it as a byte index. -#define MyFrame_lasti(f) ((f)->f_lasti * 2) +#define MyFrame_GetLasti(f) ((f)->f_lasti * 2) #else -#define MyFrame_lasti(f) ((f)->f_lasti) +#define MyFrame_GetLasti(f) ((f)->f_lasti) #endif // Access f_code should be done through a helper starting in 3.9. @@ -33,6 +37,17 @@ #define MyFrame_GetCode(f) ((f)->f_code) #endif +#if PY_VERSION_HEX >= 0x030B00B1 +#define MyCode_GetCode(co) (PyCode_GetCode(co)) +#define MyCode_FreeCode(code) Py_XDECREF(code) +#elif PY_VERSION_HEX >= 0x030B00A7 +#define MyCode_GetCode(co) (PyObject_GetAttrString((PyObject *)(co), "co_code")) +#define MyCode_FreeCode(code) Py_XDECREF(code) +#else +#define MyCode_GetCode(co) ((co)->co_code) +#define MyCode_FreeCode(code) +#endif + /* The values returned to indicate ok or error. */ #define RET_OK 0 #define RET_ERROR -1
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/data.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/data.py
Changed
@@ -30,6 +30,7 @@ """ summ = {} if fullpath: + # pylint: disable=unnecessary-lambda-assignment filename_fn = lambda f: f else: filename_fn = os.path.basename @@ -69,7 +70,7 @@ if os.path.isfile(p): files_to_combine.append(os.path.abspath(p)) elif os.path.isdir(p): - pattern = os.path.join(os.path.abspath(p), f"{local}.*") + pattern = glob.escape(os.path.join(os.path.abspath(p), local)) +".*" files_to_combine.extend(glob.glob(pattern)) else: raise NoDataError(f"Couldn't combine from non-existent path '{p}'") @@ -131,7 +132,14 @@ data.update(new_data, aliases=aliases) files_combined += 1 if message: - message(f"Combined data file {os.path.relpath(f)}") + try: + file_name = os.path.relpath(f) + except ValueError: + # ValueError can be raised under Windows when os.getcwd() returns a + # folder from a different drive than the drive of f, in which case + # we print the original value of f instead of its relative path + file_name = f + message(f"Combined data file {file_name}") if not keep: if data._debug.should('dataio'): data._debug.write(f"Deleting combined data file {f!r}")
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/debug.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/debug.py
Changed
@@ -12,6 +12,7 @@ import pprint import reprlib import sys +import types import _thread from coverage.misc import isolate_module @@ -211,7 +212,7 @@ klass=self.__class__.__name__, id=id(self), attrs=" ".join(f"{k}={v!r}" for k, v in show_attrs), - ) + ) def simplify(v): # pragma: debugging @@ -282,6 +283,7 @@ self.write(f"New process: pid: {os.getpid()!r}, parent pid: {os.getppid()!r}\n") SYS_MOD_NAME = '$coverage.debug.DebugOutputFile.the_one' + SINGLETON_ATTR = 'the_one_and_is_interim' @classmethod def get_one(cls, fileobj=None, show_process=True, filters=(), interim=False): @@ -310,7 +312,8 @@ # this class can be defined more than once. But we really want # a process-wide singleton. So stash it in sys.modules instead of # on a class attribute. Yes, this is aggressively gross. - the_one, is_interim = sys.modules.get(cls.SYS_MOD_NAME, (None, True)) + singleton_module = sys.modules.get(cls.SYS_MOD_NAME) + the_one, is_interim = getattr(singleton_module, cls.SINGLETON_ATTR, (None, True)) if the_one is None or is_interim: if fileobj is None: debug_file_name = os.environ.get("COVERAGE_DEBUG_FILE", FORCED_DEBUG_FILE) @@ -321,7 +324,9 @@ else: fileobj = sys.stderr the_one = cls(fileobj, show_process, filters) - sys.modulescls.SYS_MOD_NAME = (the_one, interim) + singleton_module = types.ModuleType(cls.SYS_MOD_NAME) + setattr(singleton_module, cls.SINGLETON_ATTR, (the_one, interim)) + sys.modulescls.SYS_MOD_NAME = singleton_module return the_one def write(self, text):
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/env.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/env.py
Changed
@@ -85,7 +85,7 @@ nix_while_true = (PYVERSION >= (3, 8)) # CPython 3.9a1 made sys.argv0 and other reported files absolute paths. - report_absolute_files = (CPYTHON and PYVERSION >= (3, 9)) + report_absolute_files = ((CPYTHON or (PYPYVERSION >= (7, 3, 10))) and PYVERSION >= (3, 9)) # Lines after break/continue/return/raise are no longer compiled into the # bytecode. They used to be marked as missing, now they aren't executable. @@ -110,6 +110,9 @@ # Some words are keywords in some places, identifiers in other places. soft_keywords = (PYVERSION >= (3, 10)) + # Modules start with a line numbered zero. This means empty modules have + # only a 0-number line, which is ignored, giving a truly empty module. + empty_is_empty = (PYVERSION >= (3, 11, 0, 'beta', 4)) # Coverage.py specifics.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/files.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/files.py
Changed
@@ -3,8 +3,8 @@ """File wrangling.""" -import hashlib import fnmatch +import hashlib import ntpath import os import os.path @@ -24,8 +24,14 @@ """Set the directory that `relative_filename` will be relative to.""" global RELATIVE_DIR, CANONICAL_FILENAME_CACHE + # The current directory + abs_curdir = abs_file(os.curdir) + if not abs_curdir.endswith(os.sep): + # Suffix with separator only if not at the system root + abs_curdir = abs_curdir + os.sep + # The absolute path to our current directory. - RELATIVE_DIR = os.path.normcase(abs_file(os.curdir) + os.sep) + RELATIVE_DIR = os.path.normcase(abs_curdir) # Cache of results of calling the canonical_filename() method, to # avoid duplicating work. @@ -270,7 +276,7 @@ """Find the path separator used in this string, or os.sep if none.""" sep_match = re.search(r"\\/", s) if sep_match: - the_sep = sep_match.group(0) + the_sep = sep_match0 else: the_sep = os.sep return the_sep @@ -320,15 +326,17 @@ map a path through those aliases to produce a unified path. """ - def __init__(self, relative=False): - self.aliases = + def __init__(self, debugfn=None, relative=False): + self.aliases = # A list of (original_pattern, regex, result) + self.debugfn = debugfn or (lambda msg: 0) self.relative = relative + self.pprinted = False - def pprint(self): # pragma: debugging + def pprint(self): """Dump the important parts of the PathAliases, for debugging.""" - print(f"Aliases (relative={self.relative}):") - for regex, result in self.aliases: - print(f"{regex.pattern!r} --> {result!r}") + self.debugfn(f"Aliases (relative={self.relative}):") + for original_pattern, regex, result in self.aliases: + self.debugfn(f" Rule: {original_pattern!r} -> {result!r} using regex {regex.pattern!r}") def add(self, pattern, result): """Add the `pattern`/`result` pair to the list of aliases. @@ -343,6 +351,7 @@ match an entire tree, and not just its root. """ + original_pattern = pattern pattern_sep = sep(pattern) if len(pattern) > 1: @@ -354,8 +363,7 @@ # The pattern is meant to match a filepath. Let's make it absolute # unless it already is, or is meant to match any prefix. - if not pattern.startswith('*') and not isabs_anywhere(pattern + - pattern_sep): + if not pattern.startswith('*') and not isabs_anywhere(pattern + pattern_sep): pattern = abs_file(pattern) if not pattern.endswith(pattern_sep): pattern += pattern_sep @@ -366,7 +374,7 @@ # Normalize the result: it must end with a path separator. result_sep = sep(result) result = result.rstrip(r"\/") + result_sep - self.aliases.append((regex, result)) + self.aliases.append((original_pattern, regex, result)) def map(self, path): """Map `path` through the aliases. @@ -384,14 +392,23 @@ of `path` unchanged. """ - for regex, result in self.aliases: + if not self.pprinted: + self.pprint() + self.pprinted = True + + for original_pattern, regex, result in self.aliases: m = regex.match(path) if m: - new = path.replace(m.group(0), result) + new = path.replace(m0, result) new = new.replace(sep(path), sep(result)) if not self.relative: new = canonical_filename(new) + self.debugfn( + f"Matched path {path!r} to rule {original_pattern!r} -> {result!r}, " + + f"producing {new!r}" + ) return new + self.debugfn(f"No rules match, path {path!r} is unchanged") return path
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/fullcoverage/encodings.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/fullcoverage/encodings.py
Changed
@@ -35,20 +35,14 @@ def fullcoverage_trace(self, *args): frame, event, arg = args - self.traces.append((args, frame.f_lineno)) + if frame.f_lineno is not None: + # https://bugs.python.org/issue46911 + self.traces.append((args, frame.f_lineno)) return self.fullcoverage_trace sys.settrace(FullCoverageTracer().fullcoverage_trace) -# In coverage/files.py is actual_filename(), which uses glob.glob. I don't -# understand why, but that use of glob borks everything if fullcoverage is in -# effect. So here we make an ugly hail-mary pass to switch off glob.glob over -# there. This means when using fullcoverage, Windows path names will not be -# their actual case. - -#sys.fullcoverage = True - -# Finally, remove our own directory from sys.path; remove ourselves from +# Remove our own directory from sys.path; remove ourselves from # sys.modules; and re-import "encodings", which will be the real package # this time. Note that the delete from sys.modules dictionary has to # happen last, since all of the symbols in this module will become None
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/html.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/html.py
Changed
@@ -122,6 +122,15 @@ return file_data +class FileToReport: + """A file we're considering reporting.""" + def __init__(self, fr, analysis): + self.fr = fr + self.analysis = analysis + self.rootname = flat_rootname(fr.relative_filename()) + self.html_filename = self.rootname + ".html" + + class HtmlReporter: """HTML reporting.""" @@ -165,6 +174,8 @@ self.datagen = HtmlDataGeneration(self.coverage) self.totals = Numbers(precision=self.config.precision) self.directory_was_empty = False + self.first_fr = None + self.final_fr = None self.template_globals = { # Functions available in the templates. @@ -188,7 +199,7 @@ 'mis': 'mis show_mis', 'par': 'par run show_par', 'run': 'run', - } + }, } self.pyfile_html_source = read_data("pyfile.html") self.source_tmpl = Templite(self.pyfile_html_source, self.template_globals) @@ -204,9 +215,28 @@ self.incr.read() self.incr.check_global_data(self.config, self.pyfile_html_source) - # Process all the files. + # Process all the files. For each page we need to supply a link + # to the next and previous page. + files_to_report = + for fr, analysis in get_analysis_to_report(self.coverage, morfs): - self.html_file(fr, analysis) + ftr = FileToReport(fr, analysis) + should = self.should_report_file(ftr) + if should: + files_to_report.append(ftr) + else: + file_be_gone(os.path.join(self.directory, ftr.html_filename)) + + for i, ftr in enumerate(files_to_report): + if i == 0: + prev_html = "index.html" + else: + prev_html = files_to_reporti - 1.html_filename + if i == len(files_to_report) - 1: + next_html = "index.html" + else: + next_html = files_to_reporti + 1.html_filename + self.write_html_file(ftr, prev_html, next_html) if not self.all_files_nums: raise NoDataError("No data to report.") @@ -214,11 +244,22 @@ self.totals = sum(self.all_files_nums) # Write the index file. - self.index_file() + if files_to_report: + first_html = files_to_report0.html_filename + final_html = files_to_report-1.html_filename + else: + first_html = final_html = "index.html" + self.index_file(first_html, final_html) self.make_local_static_report_files() return self.totals.n_statements and self.totals.pc_covered + def make_directory(self): + """Make sure our htmlcov directory exists.""" + ensure_dir(self.directory) + if not os.listdir(self.directory): + self.directory_was_empty = True + def make_local_static_report_files(self): """Make local instances of static files for HTML report.""" # The files we provide must always be copied. @@ -236,17 +277,10 @@ if self.extra_css: shutil.copyfile(self.config.extra_css, os.path.join(self.directory, self.extra_css)) - def html_file(self, fr, analysis): - """Generate an HTML file for one source file.""" - rootname = flat_rootname(fr.relative_filename()) - html_filename = rootname + ".html" - ensure_dir(self.directory) - if not os.listdir(self.directory): - self.directory_was_empty = True - html_path = os.path.join(self.directory, html_filename) - + def should_report_file(self, ftr): + """Determine if we'll report this file.""" # Get the numbers for this file. - nums = analysis.numbers + nums = ftr.analysis.numbers self.all_files_nums.append(nums) if self.skip_covered: @@ -255,24 +289,28 @@ no_missing_branches = (nums.n_partial_branches == 0) if no_missing_lines and no_missing_branches: # If there's an existing file, remove it. - file_be_gone(html_path) self.skipped_covered_count += 1 - return + return False if self.skip_empty: # Don't report on empty files. if nums.n_statements == 0: - file_be_gone(html_path) self.skipped_empty_count += 1 - return + return False + + return True + + def write_html_file(self, ftr, prev_html, next_html): + """Generate an HTML file for one source file.""" + self.make_directory() # Find out if the file on disk is already correct. - if self.incr.can_skip_file(self.data, fr, rootname): - self.file_summaries.append(self.incr.index_info(rootname)) + if self.incr.can_skip_file(self.data, ftr.fr, ftr.rootname): + self.file_summaries.append(self.incr.index_info(ftr.rootname)) return # Write the HTML page for this file. - file_data = self.datagen.data_for_file(fr, analysis) + file_data = self.datagen.data_for_file(ftr.fr, ftr.analysis) for ldata in file_data.lines: # Build the HTML for the line. html = @@ -292,7 +330,7 @@ ldata.annotate = ", ".join( f"{ldata.number} ↛ {d}" for d in ldata.short_annotations - ) + ) else: ldata.annotate = None @@ -306,7 +344,7 @@ ", ".join( f"{num:d}) {ann_long}" for num, ann_long in enumerate(longs, start=1) - ), + ), ) else: ldata.annotate_long = None @@ -316,20 +354,26 @@ css_classes.append(self.template_globals'category'ldata.category) ldata.css_class = ' '.join(css_classes) or "pln" - html = self.source_tmpl.render(file_data.__dict__) + html_path = os.path.join(self.directory, ftr.html_filename) + html = self.source_tmpl.render({ + **file_data.__dict__, + 'prev_html': prev_html, + 'next_html': next_html, + }) write_html(html_path, html) # Save this file's information for the index file. index_info = { - 'nums': nums, - 'html_filename': html_filename, - 'relative_filename': fr.relative_filename(), + 'nums': ftr.analysis.numbers, + 'html_filename': ftr.html_filename, + 'relative_filename': ftr.fr.relative_filename(), } self.file_summaries.append(index_info) - self.incr.set_index_info(rootname, index_info) + self.incr.set_index_info(ftr.rootname, index_info) - def index_file(self): + def index_file(self, first_html, final_html): """Write the index.html file for this report.""" + self.make_directory() index_tmpl = Templite(read_data("index.html"), self.template_globals) skipped_covered_msg = skipped_empty_msg = "" @@ -345,6 +389,8 @@ 'totals': self.totals, 'skipped_covered_msg': skipped_covered_msg,
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/htmlfiles/coverage_html.js -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/htmlfiles/coverage_html.js
Changed
@@ -25,6 +25,13 @@ return !(rect.bottom < viewTop || rect.top >= viewBottom); } +function on_click(sel, fn) { + const elt = document.querySelector(sel); + if (elt) { + elt.addEventListener("click", fn); + } +} + // Helpers for table sorting function getCellValue(row, column = 0) { const cell = row.cellscolumn @@ -159,7 +166,7 @@ // Trigger change event on setup, to force filter on page refresh // (filter value may still be present). - document.getElementById("filter").dispatchEvent(new Event("change")); + document.getElementById("filter").dispatchEvent(new Event("input")); }; coverage.INDEX_SORT_STORAGE = "COVERAGE_INDEX_SORT_2"; @@ -193,6 +200,11 @@ direction: th.getAttribute("aria-sort"), })); }); + + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + + on_click(".button_show_hide_help", coverage.show_hide_help); }; // -- pyfile stuff -- @@ -209,12 +221,6 @@ coverage.set_sel(0); } - const on_click = function(sel, fn) { - const elt = document.querySelector(sel); - if (elt) { - elt.addEventListener("click", fn); - } - } on_click(".button_toggle_run", coverage.toggle_lines); on_click(".button_toggle_mis", coverage.toggle_lines); on_click(".button_toggle_exc", coverage.toggle_lines); @@ -225,6 +231,12 @@ on_click(".button_top_of_page", coverage.to_top); on_click(".button_first_chunk", coverage.to_first_chunk); + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + on_click(".button_to_index", coverage.to_index); + + on_click(".button_show_hide_help", coverage.show_hide_help); + coverage.filters = undefined; try { coverage.filters = localStorage.getItem(coverage.LINE_FILTERS_STORAGE); @@ -299,6 +311,23 @@ coverage.to_next_chunk(); }; +coverage.to_prev_file = function () { + window.location = document.getElementById("prevFileLink").href; +} + +coverage.to_next_file = function () { + window.location = document.getElementById("nextFileLink").href; +} + +coverage.to_index = function () { + location.href = document.getElementById("indexLink").href; +} + +coverage.show_hide_help = function () { + const helpCheck = document.getElementById("help_panel_state") + helpCheck.checked = !helpCheck.checked; +} + // Return a string indicating what kind of chunk this line belongs to, // or null if not a chunk. coverage.chunk_indicator = function (line_elt) { @@ -524,7 +553,7 @@ 'p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par' ).forEach(element => { const line_top = Math.floor(element.offsetTop * marker_scale); - const line_number = parseInt(element.id.substr(1)); + const line_number = parseInt(element.querySelector(".n a").id.substr(1)); if (line_number === previous_line + 1) { // If this solid missed block just make previous mark higher.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/htmlfiles/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/htmlfiles/index.html
Changed
@@ -21,15 +21,15 @@ <span class="pc_cov">{{totals.pc_covered_str}}%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> @@ -38,15 +38,29 @@ <kbd>b</kbd> <kbd>p</kbd> {% endif %} - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + + <p class="text"> + <a class="nav" href="{{__url__}}">coverage.py v{{__version__}}</a>, + created at {{ time_stamp }} + </p> </div> </header> @@ -115,6 +129,13 @@ created at {{ time_stamp }} </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="{{ final_html }}"/> + <a id="nextFileLink" class="nav" href="{{ first_html }}"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/htmlfiles/pyfile.html -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/htmlfiles/pyfile.html
Changed
@@ -5,9 +5,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - {# IE8 rounds line-height incorrectly, and adding this emulateIE7 line makes it right! #} - {# http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/7684445e-f080-4d8f-8529-132763348e21 #} - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for {{relative_filename|escape}}: {{nums.pc_covered_str}}%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -25,15 +22,15 @@ <span class="pc_cov">{{nums.pc_covered_str}}%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> @@ -42,19 +39,31 @@ {% endif %} toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">{{nums.n_statements}} statements </span> @@ -66,12 +75,25 @@ {% endif %} </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="{{ prev_html }}">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="{{ next_html }}">» next</a> + + <a class="nav" href="{{__url__}}">coverage.py v{{__version__}}</a>, + created at {{ time_stamp }} + </p> + + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> @@ -110,7 +132,11 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="{{__url__}}">coverage.py v{{__version__}}</a>, + <a id="prevFileLink" class="nav" href="{{ prev_html }}">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="{{ next_html }}">» next</a> + + <a class="nav" href="{{__url__}}">coverage.py v{{__version__}}</a>, created at {{ time_stamp }} </p> </div>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/htmlfiles/style.css -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/htmlfiles/style.css
Changed
@@ -28,6 +28,8 @@ a.nav:hover { text-decoration: underline; color: inherit; } +.hidden { display: none; } + header { background: #f8f8f8; width: 100%; z-index: 2; border-bottom: 1px solid #ccc; } @media (prefers-color-scheme: dark) { header { background: black; } } @@ -38,6 +40,10 @@ header h2 { margin-top: .5em; font-size: 1em; } +header p.text { margin: .5em 0 -.5em; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { header p.text { color: #aaa; } } + header.sticky { position: fixed; left: 0; right: 0; height: 2.5em; } header.sticky .text { display: none; } @@ -52,9 +58,7 @@ main { position: relative; z-index: 1; } -.indexfile footer { margin: 1rem 3.5rem; } - -.pyfile footer { margin: 1rem 1rem; } +footer { margin: 1rem 3.5rem; } footer .content { padding: 0; color: #666; font-style: italic; } @@ -124,7 +128,9 @@ #help_panel_state { display: none; } -#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; } +#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; color: #333; } + +#help_panel .keyhelp p { margin-top: .75em; } #help_panel .legend { font-style: italic; margin-bottom: 1em; } @@ -134,8 +140,6 @@ #help_panel_state:checked ~ #help_panel { display: block; } -.keyhelp { margin-top: .75em; } - kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; border-radius: 3px; } #source { padding: 1em 0 1em 3.5rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/htmlfiles/style.scss -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/htmlfiles/style.scss
Changed
@@ -156,6 +156,10 @@ } } +.hidden { + display: none; +} + // Page structure header { background: $light-gray1; @@ -174,6 +178,13 @@ font-size: 1em; } + p.text { + margin: .5em 0 -.5em; + color: $light-gray5; + @include color-dark($dark-gray5); + font-style: italic; + } + &.sticky { position: fixed; left: 0; @@ -208,19 +219,15 @@ z-index: 1; } -.indexfile footer { +footer { margin: 1rem $left-gutter; -} -.pyfile footer { - margin: 1rem 1rem; -} - -footer .content { - padding: 0; - color: $light-gray5; - @include color-dark($dark-gray5); - font-style: italic; + .content { + padding: 0; + color: $light-gray5; + @include color-dark($dark-gray5); + font-style: italic; + } } #index { @@ -351,6 +358,12 @@ padding: .75em; border: 1px solid #883; + color: #333; + + .keyhelp p { + margin-top: .75em; + } + .legend { font-style: italic; margin-bottom: 1em; @@ -358,12 +371,10 @@ .indexfile & { width: 25em; - //min-height: 4em; } .pyfile & { width: 18em; - //min-height: 8em; } #help_panel_state:checked ~ & { @@ -371,10 +382,6 @@ } } -.keyhelp { - margin-top: .75em; -} - kbd { border: 1px solid black; border-color: #888 #333 #333 #888;
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/inorout.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/inorout.py
Changed
@@ -591,7 +591,7 @@ 'source_match', 'source_pkgs_match', 'include_match', 'omit_match', 'cover_match', 'pylib_match', 'third_match', - + for matcher_name in matcher_names: matcher = getattr(self, matcher_name)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/jsonreport.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/jsonreport.py
Changed
@@ -70,7 +70,7 @@ json.dump( self.report_data, outfile, - indent=4 if self.config.json_pretty_print else None + indent=(4 if self.config.json_pretty_print else None), ) return self.total.n_statements and self.total.pc_covered @@ -102,4 +102,17 @@ 'covered_branches': nums.n_executed_branches, 'missing_branches': nums.n_missing_branches, }) + reported_file'executed_branches' = list( + _convert_branch_arcs(analysis.executed_branch_arcs()) + ) + reported_file'missing_branches' = list( + _convert_branch_arcs(analysis.missing_branch_arcs()) + ) return reported_file + + +def _convert_branch_arcs(branch_arcs): + """Convert branch arcs to a list of two-element tuples.""" + for source, targets in branch_arcs.items(): + for target in targets: + yield source, target
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/misc.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/misc.py
Changed
@@ -272,7 +272,7 @@ raise NotImplementedError( f"{thing} {name!r} needs to implement {func_name}()" - ) + ) class DefaultValue: @@ -324,17 +324,17 @@ def dollar_replace(match): """Called for each $replacement.""" - # Only one of the groups will have matched, just get its text. + # Only one of the dollar_groups will have matched, just get its text. word = next(g for g in match.group(*dollar_groups) if g) # pragma: always breaks if word == "$": return "$" elif word in variables: return variablesword - elif match.group('strict'): + elif match'strict': msg = f"Variable {word} is undefined: {text!r}" raise CoverageException(msg) else: - return match.group('defval') + return match'defval' text = re.sub(dollar_pattern, dollar_replace, text) return text
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/numbits.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/numbits.py
Changed
@@ -142,8 +142,8 @@ conn = sqlite3.connect('example.db') register_sqlite_functions(conn) c = conn.cursor() - # Kind of a nonsense query: find all the files and contexts that - # executed line 47 in any file: + # Kind of a nonsense query: + # Find all the files and contexts that executed line 47 in any file: c.execute( "select file_id, context_id from line_bits where num_in_numbits(?, numbits)", (47,)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/parser.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/parser.py
Changed
@@ -67,6 +67,9 @@ # The raw line numbers of excluded lines of code, as marked by pragmas. self.raw_excluded = set() + # The line numbers of class definitions. + self.raw_classdefs = set() + # The line numbers of docstring lines. self.raw_docstrings = set() @@ -130,6 +133,12 @@ indent += 1 elif toktype == token.DEDENT: indent -= 1 + elif toktype == token.NAME: + if ttext == 'class': + # Class definitions look like branches in the bytecode, so + # we need to exclude them. The simplest way is to note the + # lines with the 'class' keyword. + self.raw_classdefs.add(slineno) elif toktype == token.OP: if ttext == ':' and nesting == 0: should_exclude = (elineno in self.raw_excluded) or excluding_decorators @@ -292,6 +301,12 @@ continue exit_countsl1 += 1 + # Class definitions have one extra exit, so remove one for each: + for l in self.raw_classdefs: + # Ensure key is there: class definitions can include excluded lines. + if l in exit_counts: + exit_countsl -= 1 + return exit_counts def missing_arc_description(self, start, end, executed_arcs=None): @@ -377,7 +392,7 @@ """ if hasattr(self.code, "co_lines"): for _, _, line in self.code.co_lines(): - if line is not None: + if line: yield line else: # Adapted from dis.py in the standard library. @@ -1231,15 +1246,15 @@ if with_block.break_from: self.process_break_exits( self._combine_finally_starts(with_block.break_from, with_exit) - ) + ) if with_block.continue_from: self.process_continue_exits( self._combine_finally_starts(with_block.continue_from, with_exit) - ) + ) if with_block.return_from: self.process_return_exits( self._combine_finally_starts(with_block.return_from, with_exit) - ) + ) return exits _handle__AsyncWith = _handle__With
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/phystokens.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/phystokens.py
Changed
@@ -60,7 +60,7 @@ 99999, "\\\n", (slineno, ccol), (slineno, ccol+2), last_line - ) + ) last_line = ltext if ttype not in (tokenize.NEWLINE, tokenize.NL): last_ttext = ttext @@ -173,7 +173,11 @@ if text != self.last_text: self.last_text = text readline = iter(text.splitlines(True)).__next__ - self.last_tokens = list(tokenize.generate_tokens(readline)) + try: + self.last_tokens = list(tokenize.generate_tokens(readline)) + except: + self.last_text = None + raise return self.last_tokens # Create our generate_tokens cache as a callable replacement function.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/python.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/python.py
Changed
@@ -202,8 +202,8 @@ def no_branch_lines(self): no_branch = self.parser.lines_matching( join_regex(self.coverage.config.partial_list), - join_regex(self.coverage.config.partial_always_list) - ) + join_regex(self.coverage.config.partial_always_list), + ) return no_branch @expensive
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/pytracer.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/pytracer.py
Changed
@@ -67,6 +67,10 @@ # On exit, self.in_atexit = True atexit.register(setattr, self, 'in_atexit', True) + # Cache a bound method on the instance, so that we don't have to + # re-create a bound method object all the time. + self._cached_bound_method_trace = self._trace + def __repr__(self): return "<PyTracer at 0x{:x}: {} lines in {} files>".format( id(self), @@ -105,7 +109,7 @@ #self.log(":", frame.f_code.co_filename, frame.f_lineno, frame.f_code.co_name + "()", event) - if (self.stopped and sys.gettrace() == self._trace): # pylint: disable=comparison-with-callable + if (self.stopped and sys.gettrace() == self._cached_bound_method_trace): # pylint: disable=comparison-with-callable # The PyTrace.stop() method has been called, possibly by another # thread, let's deactivate ourselves now. if 0: @@ -129,12 +133,13 @@ context_maybe = self.should_start_context(frame) if context_maybe is not None: self.context = context_maybe - self.started_context = True + started_context = True self.switch_context(self.context) else: - self.started_context = False + started_context = False else: - self.started_context = False + started_context = False + self.started_context = started_context # Entering a new frame. Decide if we should trace in this file. self._activity = True @@ -143,22 +148,35 @@ self.cur_file_data, self.cur_file_name, self.last_line, - self.started_context, + started_context, ) ) + + # Improve tracing performance: when calling a function, both caller + # and callee are often within the same file. if that's the case, we + # don't have to re-check whether to trace the corresponding + # function (which is a little bit espensive since it involves + # dictionary lookups). This optimization is only correct if we + # didn't start a context. filename = frame.f_code.co_filename - self.cur_file_name = filename - disp = self.should_trace_cache.get(filename) - if disp is None: - disp = self.should_trace(filename, frame) - self.should_trace_cachefilename = disp - - self.cur_file_data = None - if disp.trace: - tracename = disp.source_filename - if tracename not in self.data: - self.datatracename = set() - self.cur_file_data = self.datatracename + if filename != self.cur_file_name or started_context: + self.cur_file_name = filename + disp = self.should_trace_cache.get(filename) + if disp is None: + disp = self.should_trace(filename, frame) + self.should_trace_cachefilename = disp + + self.cur_file_data = None + if disp.trace: + tracename = disp.source_filename + if tracename not in self.data: + self.datatracename = set() + self.cur_file_data = self.datatracename + else: + frame.f_trace_lines = False + elif not self.cur_file_data: + frame.f_trace_lines = False + # The call event is really a "start frame" event, and happens for # function calls and re-entering generators. The f_lasti field is # -1 for calls, and a real offset for generators. Use <0 as the @@ -174,6 +192,7 @@ self.last_line = -frame.f_code.co_firstlineno else: self.last_line = frame.f_lineno + elif event == 'line': # Record an executed line. if self.cur_file_data is not None: @@ -184,6 +203,7 @@ else: self.cur_file_data.add(lineno) self.last_line = lineno + elif event == 'return': if self.trace_arcs and self.cur_file_data: # Record an arc leaving the function, but beware that a @@ -211,6 +231,7 @@ if real_return: first = frame.f_code.co_firstlineno self.cur_file_data.add((self.last_line, -first)) + # Leaving this function, pop the filename stack. self.cur_file_data, self.cur_file_name, self.last_line, self.started_context = ( self.data_stack.pop() @@ -219,7 +240,7 @@ if self.started_context: self.context = None self.switch_context(None) - return self._trace + return self._cached_bound_method_trace def start(self): """Start this Tracer. @@ -237,10 +258,10 @@ # function, but we are marked as running again, so maybe it # will be ok? #self.log("~", "starting on different threads") - return self._trace + return self._cached_bound_method_trace - sys.settrace(self._trace) - return self._trace + sys.settrace(self._cached_bound_method_trace) + return self._cached_bound_method_trace def stop(self): """Stop this Tracer.""" @@ -265,9 +286,10 @@ # so don't warn if we are in atexit on PyPy and the trace function # has changed to None. dont_warn = (env.PYPY and env.PYPYVERSION >= (5, 4) and self.in_atexit and tf is None) - if (not dont_warn) and tf != self._trace: # pylint: disable=comparison-with-callable + if (not dont_warn) and tf != self._cached_bound_method_trace: # pylint: disable=comparison-with-callable self.warn( - f"Trace function changed, data is likely wrong: {tf!r} != {self._trace!r}", + "Trace function changed, data is likely wrong: " + + f"{tf!r} != {self._cached_bound_method_trace!r}", slug="trace-changed", )
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/results.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/results.py
Changed
@@ -271,10 +271,10 @@ nums.n_branches = self.n_branches + other.n_branches nums.n_partial_branches = ( self.n_partial_branches + other.n_partial_branches - ) + ) nums.n_missing_branches = ( self.n_missing_branches + other.n_missing_branches - ) + ) return nums def __radd__(self, other):
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/sqldata.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/sqldata.py
Changed
@@ -1,10 +1,7 @@ # Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 # For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt -"""Sqlite coverage data.""" - -# TODO: factor out dataop debugging to a wrapper class? -# TODO: make sure all dataop debugging is in place somehow +"""SQLite coverage data.""" import collections import datetime @@ -17,6 +14,7 @@ import socket import sqlite3 import sys +import textwrap import threading import zlib @@ -30,7 +28,7 @@ os = isolate_module(os) # If you change the schema, increment the SCHEMA_VERSION, and update the -# docs in docs/dbschema.rst also. +# docs in docs/dbschema.rst by running "make cogdoc". SCHEMA_VERSION = 7 @@ -252,10 +250,10 @@ def _reset(self): """Reset our attributes.""" - if self._dbs: + if not self._no_disk: for db in self._dbs.values(): db.close() - self._dbs = {} + self._dbs = {} self._file_map = {} self._have_used = False self._current_context_id = None @@ -293,7 +291,7 @@ self._has_arcs = bool(int(row0)) self._has_lines = not self._has_arcs - for path, file_id in db.execute("select path, id from file"): + for file_id, path in db.execute("select id, path from file"): self._file_mappath = file_id def _init_db(self, db): @@ -389,8 +387,10 @@ if filename not in self._file_map: if add: with self._connect() as con: - cur = con.execute("insert or replace into file (path) values (?)", (filename,)) - self._file_mapfilename = cur.lastrowid + self._file_mapfilename = con.execute_for_rowid( + "insert or replace into file (path) values (?)", + (filename,) + ) return self._file_map.get(filename) def _context_id(self, context): @@ -427,8 +427,10 @@ self._current_context_id = context_id else: with self._connect() as con: - cur = con.execute("insert into context (context) values (?)", (context,)) - self._current_context_id = cur.lastrowid + self._current_context_id = con.execute_for_rowid( + "insert into context (context) values (?)", + (context,) + ) def base_filename(self): """The base filename for storing data. @@ -501,9 +503,6 @@ self._set_context_id() for filename, arcs in arc_data.items(): file_id = self._file_id(filename, add=True) - from coverage import env - if env.PYVERSION == (3, 11, 0, "alpha", 4, 0): - arcs = (a, b) for a, b in arcs if a is not None and b is not None data = (file_id, self._current_context_id, fromno, tono) for fromno, tono in arcs con.executemany( "insert or ignore into arc " + @@ -610,25 +609,24 @@ aliases = aliases or PathAliases() - # Force the database we're writing to to exist before we start nesting - # contexts. + # Force the database we're writing to to exist before we start nesting contexts. self._start_using() # Collector for all arcs, lines and tracers other_data.read() - with other_data._connect() as conn: + with other_data._connect() as con: # Get files data. - cur = conn.execute("select path from file") + cur = con.execute("select path from file") files = {path: aliases.map(path) for (path,) in cur} cur.close() # Get contexts data. - cur = conn.execute("select context from context") + cur = con.execute("select context from context") contexts = context for (context,) in cur cur.close() # Get arc data. - cur = conn.execute( + cur = con.execute( "select file.path, context.context, arc.fromno, arc.tono " + "from arc " + "inner join file on file.id = arc.file_id " + @@ -638,17 +636,17 @@ cur.close() # Get line data. - cur = conn.execute( + cur = con.execute( "select file.path, context.context, line_bits.numbits " + "from line_bits " + "inner join file on file.id = line_bits.file_id " + "inner join context on context.id = line_bits.context_id" - ) + ) lines = {(filespath, context): numbits for (path, context, numbits) in cur} cur.close() # Get tracer data. - cur = conn.execute( + cur = con.execute( "select file.path, tracer " + "from tracer " + "inner join file on file.id = tracer.file_id" @@ -656,38 +654,39 @@ tracers = {filespath: tracer for (path, tracer) in cur} cur.close() - with self._connect() as conn: - conn.con.isolation_level = "IMMEDIATE" + with self._connect() as con: + con.con.isolation_level = "IMMEDIATE" # Get all tracers in the DB. Files not in the tracers are assumed # to have an empty string tracer. Since Sqlite does not support # full outer joins, we have to make two queries to fill the # dictionary. - this_tracers = {path: "" for path, in conn.execute("select path from file")} + this_tracers = {path: "" for path, in con.execute("select path from file")} this_tracers.update({ aliases.map(path): tracer - for path, tracer in conn.execute( + for path, tracer in con.execute( "select file.path, tracer from tracer " + "inner join file on file.id = tracer.file_id" ) }) # Create all file and context rows in the DB. - conn.executemany( + con.executemany( "insert or ignore into file (path) values (?)", ((file,) for file in files.values()) ) file_ids = { path: id - for id, path in conn.execute("select id, path from file") + for id, path in con.execute("select id, path from file") } - conn.executemany( + self._file_map.update(file_ids) + con.executemany( "insert or ignore into context (context) values (?)", ((context,) for context in contexts) ) context_ids = { context: id - for id, context in conn.execute("select id, context from context") + for id, context in con.execute("select id, context from context") } # Prepare tracers and fail, if a conflict is found. @@ -715,12 +714,12 @@ ) # Get line data. - cur = conn.execute( + cur = con.execute( "select file.path, context.context, line_bits.numbits " + "from line_bits " + "inner join file on file.id = line_bits.file_id " + "inner join context on context.id = line_bits.context_id" - ) + ) for path, context, numbits in cur:
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/summary.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/summary.py
Changed
@@ -127,11 +127,11 @@ if self.config.skip_covered and self.skipped_count: self.writeout( fmt_skip_covered % (self.skipped_count, 's' if self.skipped_count > 1 else '') - ) + ) if self.config.skip_empty and self.empty_count: self.writeout( fmt_skip_empty % (self.empty_count, 's' if self.empty_count > 1 else '') - ) + ) return self.total.n_statements and self.total.pc_covered
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/tomlconfig.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/tomlconfig.py
Changed
@@ -7,15 +7,21 @@ import os import re +from coverage import env from coverage.exceptions import ConfigError from coverage.misc import import_third_party, substitute_variables -# TOML support is an install-time extra option. (Import typing is here because -# import_third_party will unload any module that wasn't already imported. -# tomli imports typing, and if we unload it, later it's imported again, and on -# Python 3.6, this causes infinite recursion.) -import typing # pylint: disable=unused-import, wrong-import-order -tomli = import_third_party("tomli") + +if env.PYVERSION >= (3, 11, 0, "alpha", 7): + import tomllib # pylint: disable=import-error +else: + # TOML support on Python 3.10 and below is an install-time extra option. + # (Import typing is here because import_third_party will unload any module + # that wasn't already imported. tomli imports typing, and if we unload it, + # later it's imported again, and on Python 3.6, this causes infinite + # recursion.) + import typing # pylint: disable=unused-import + tomllib = import_third_party("tomli") class TomlDecodeError(Exception): @@ -45,11 +51,11 @@ toml_text = fp.read() except OSError: return - if tomli is not None: + if tomllib is not None: toml_text = substitute_variables(toml_text, os.environ) try: - self.data = tomli.loads(toml_text) - except tomli.TOMLDecodeError as err: + self.data = tomllib.loads(toml_text) + except tomllib.TOMLDecodeError as err: raise TomlDecodeError(str(err)) from err return filename else:
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/version.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/version.py
Changed
@@ -5,15 +5,13 @@ # This file is exec'ed in setup.py, don't import anything! # Same semantics as sys.version_info. -version_info = (6, 3, 2, "final", 0) +version_info = (6, 5, 0, "final", 0) def _make_version(major, minor, micro, releaselevel, serial): """Create a readable version string from version_info tuple components.""" assert releaselevel in 'alpha', 'beta', 'candidate', 'final' - version = "%d.%d" % (major, minor) - if micro: - version += ".%d" % (micro,) + version = "%d.%d.%d" % (major, minor, micro) if releaselevel != 'final': short = {'alpha': 'a', 'beta': 'b', 'candidate': 'rc'}releaselevel version += f"{short}{serial}"
View file
_service:tar_scm:coverage-6.3.2.tar.gz/coverage/xmlreport.py -> _service:tar_scm:coverage-6.5.0.tar.gz/coverage/xmlreport.py
Changed
@@ -68,7 +68,7 @@ xcoverage.setAttribute("timestamp", str(int(time.time()*1000))) xcoverage.appendChild(self.xml_out.createComment( f" Generated by coverage.py: {__url__} " - )) + )) xcoverage.appendChild(self.xml_out.createComment(f" Based on {DTD_URL} ")) # Call xml_file for each file in the data. @@ -193,7 +193,7 @@ xline.setAttribute( "condition-coverage", "%d%% (%d/%d)" % (100*taken//total, taken, total) - ) + ) if line in missing_branch_arcs: annlines = "exit" if b < 0 else str(b) for b in missing_branch_arcsline xline.setAttribute("missing-branches", ",".join(annlines))
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/_static/coverage.css -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/_static/coverage.css
Changed
@@ -19,6 +19,13 @@ margin-bottom: 12px; } +.rst-content h3, .rst-content h4, .rst-content h5, .rst-content h6 { + /* This makes config.rst look a little better, but the paras are still too + * spaced out. + */ + margin-bottom: 12px; +} + /* Tabs */ .ui.menu {
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/cmd.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/cmd.rst
Changed
@@ -223,6 +223,9 @@ your code is running under coverage measurement. The value is not relevant, and may change in the future. +These options can also be set in the :ref:`config_run` section of your +.coveragerc file. + .. _cmd_warnings: @@ -232,51 +235,51 @@ During execution, coverage.py may warn you about conditions it detects that could affect the measurement process. The possible warnings include: -* ``Couldn't parse Python file XXX (couldnt-parse)`` |br| +Couldn't parse Python file XXX (couldnt-parse) During reporting, a file was thought to be Python, but it couldn't be parsed as Python. -* ``Trace function changed, data is likely wrong: XXX (trace-changed)`` |br| +Trace function changed, data is likely wrong: XXX (trace-changed) Coverage measurement depends on a Python setting called the trace function. Other Python code in your product might change that function, which will disrupt coverage.py's measurement. This warning indicates that has happened. The XXX in the message is the new trace function value, which might provide a clue to the cause. -* ``Module XXX has no Python source (module-not-python)`` |br| +Module XXX has no Python source (module-not-python) You asked coverage.py to measure module XXX, but once it was imported, it turned out not to have a corresponding .py file. Without a .py file, coverage.py can't report on missing lines. -* ``Module XXX was never imported (module-not-imported)`` |br| +Module XXX was never imported (module-not-imported) You asked coverage.py to measure module XXX, but it was never imported by your program. -* ``No data was collected (no-data-collected)`` |br| +No data was collected (no-data-collected) Coverage.py ran your program, but didn't measure any lines as executed. This could be because you asked to measure only modules that never ran, or for other reasons. -* ``Module XXX was previously imported, but not measured - (module-not-measured)`` - |br| + To debug this problem, try using ``run --debug=trace`` to see the tracing + decision made for each file. + +Module XXX was previously imported, but not measured (module-not-measured) You asked coverage.py to measure module XXX, but it had already been imported when coverage started. This meant coverage.py couldn't monitor its execution. -* ``Already imported a file that will be measured: XXX (already-imported)`` - |br| +Already imported a file that will be measured: XXX (already-imported) File XXX had already been imported when coverage.py started measurement. Your setting for ``--source`` or ``--include`` indicates that you wanted to measure that file. Lines will be missing from the coverage report since the execution during import hadn't been measured. -* ``--include is ignored because --source is set (include-ignored)`` |br| +\-\-include is ignored because \-\-source is set (include-ignored) Both ``--include`` and ``--source`` were specified while running code. Both are meant to focus measurement on a particular part of your source code, so ``--include`` is ignored in favor of ``--source``. -* ``Conflicting dynamic contexts (dynamic-conflict)`` |br| +Conflicting dynamic contexts (dynamic-conflict) The ``run dynamic_context`` option is set in the configuration file, but something (probably a test runner plugin) is also calling the :meth:`.Coverage.switch_context` function to change the context. Only one of @@ -289,6 +292,11 @@ run disable_warnings = no-data-collected +or pyproject.toml:: + + tool.coverage.run + disable_warnings = 'no-data-collected' + .. _cmd_datafile: @@ -461,6 +469,9 @@ can be used as part of a pass/fail condition, for example in a continuous integration server. This option isn't available for **annotate**. +These options can also be set in your .coveragerc file. See +:ref:`Configuration: report <config_report>`. + .. _cmd_report: @@ -573,14 +584,16 @@ The ``--sort`` option is the name of a column to sort the report by. Other common reporting options are described above in :ref:`cmd_reporting`. +These options can also be set in your .coveragerc file. See +:ref:`Configuration: report <config_report>`. .. _cmd_html: -HTML annotation: ``coverage html`` ----------------------------------- +HTML reporting: ``coverage html`` +--------------------------------- -Coverage.py can annotate your source code for which lines were executed +Coverage.py can annotate your source code to show which lines were executed and which were not. The **html** command creates an HTML report similar to the **report** summary, but as an HTML file. Each module name links to the source file decorated to show the status of each line. @@ -645,7 +658,7 @@ If you prefer a different style for your HTML report, you can provide your own CSS file to apply, by specifying a CSS file in the ``html`` section of -the configuration file. See :ref:`config_html` for details. +the configuration file. See :ref:`config_html_extra_css` for details. The ``-d`` argument specifies an output directory, defaulting to "htmlcov":: @@ -670,6 +683,9 @@ annotate lines with the contexts that ran them. See :ref:`context_reporting` for details. +These options can also be set in your .coveragerc file. See +:ref:`Configuration: html <config_html>`. + .. _cmd_xml: @@ -754,6 +770,8 @@ <class filename="hello.py"> <class filename="baz/hello.py"> +These options can also be set in your .coveragerc file. See +:ref:`Configuration: xml <config_xml>`. .. _cmd_json: @@ -803,6 +821,11 @@ You can specify the name of the output file with the ``-o`` switch. The JSON can be nicely formatted by specifying the ``--pretty-print`` switch. +Other common reporting options are described above in :ref:`cmd_reporting`. +These options can also be set in your .coveragerc file. See +:ref:`Configuration: json <config_json>`. + + .. _cmd_lcov: LCOV reporting: ``coverage lcov`` @@ -841,7 +864,10 @@ tried. env: COVERAGE_RCFILE .. end (checksum: 16acfbae8011d2e3b620695c5fe13746) -Other common reporting options are described above in :ref:`cmd_reporting`. +Common reporting options are described above in :ref:`cmd_reporting`. +Also see :ref:`Configuration: lcov <config_lcov>`. + +.. versionadded:: 6.3 .. _cmd_annotate: @@ -974,6 +1000,9 @@ * ``multiproc``: log the start and stop of multiprocessing processes. +* ``pathmap``: log the remapping of paths that happens during ``coverage + combine`` due to the ``paths`` setting. See :ref:`config_paths`. + * ``pid``: annotate all warnings and debug output with the process and thread ids. @@ -989,6 +1018,9 @@ * ``sql``: log the SQL statements used for recording data. +* ``sqldata``: when used with ``debug=sql``, also log the full data being used + in SQL statements. + * ``sys``: before starting, dump all the system and environment information, as with :ref:`coverage debug sys <cmd_debug>`. @@ -998,7 +1030,8 @@ .. _env.py: https://github.com/nedbat/coveragepy/blob/master/coverage/env.py Debug options can also be set with the ``COVERAGE_DEBUG`` environment variable, -a comma-separated list of these options. +a comma-separated list of these options, or in the :ref:`config_run_debug` +section of the .coveragerc file. The debug output goes to stderr, unless the ``COVERAGE_DEBUG_FILE`` environment variable names a different file, which will be appended to.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/conf.py -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/conf.py
Changed
@@ -40,7 +40,7 @@ 'sphinx.ext.intersphinx', 'sphinxcontrib.restbuilder', 'sphinx.ext.napoleon', - 'sphinx_tabs.tabs', + #'sphinx_tabs.tabs', # Add any paths that contain templates here, relative to this directory. @@ -63,12 +63,12 @@ # |version| and |release|, also used in various other places throughout the # built documents. # -# The short X.Y version. -version = "6.3.2" # CHANGEME -# The full version, including alpha/beta/rc tags. -release = "6.3.2" # CHANGEME -# The date of release, in "monthname day, year" format. -release_date = "February 20, 2022" # CHANGEME +# The short X.Y.Z version. # CHANGEME +version = "6.5.0" +# The full version, including alpha/beta/rc tags. # CHANGEME +release = "6.5.0" +# The date of release, in "monthname day, year" format. # CHANGEME +release_date = "September 29, 2022" rst_epilog = """ .. |release_date| replace:: {release_date} @@ -119,7 +119,7 @@ intersphinx_mapping = { 'python': ('https://docs.python.org/3', None), - } +} # -- Options for HTML output ---------------------------------------------------
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/config.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/config.rst
Changed
@@ -7,6 +7,8 @@ Configuration reference ======================= +.. highlight:: ini + Coverage.py options can be specified in a configuration file. This makes it easier to re-run coverage.py with consistent settings, and also allows for specification of options that are otherwise only available in the @@ -62,7 +64,7 @@ - Otherwise, missing environment variables will result in empty strings with no error. -Many sections and values correspond roughly to commands and options in +Many sections and settings correspond roughly to commands and options in the :ref:`command-line interface <cmd>`. Here's a sample configuration file:: @@ -103,107 +105,163 @@ run ----- -These values are generally used when running product code, though some apply +These settings are generally used when running product code, though some apply to more than one command. + .. _config_run_branch: -``branch`` (boolean, default False): whether to measure -:ref:`branch coverage <branch>` in addition to statement coverage. +run branch +............ + +(boolean, default False) Whether to measure :ref:`branch coverage <branch>` in +addition to statement coverage. + .. _config_run_command_line: -``command_line`` (string): the command-line to run your program. This will be -used if you run ``coverage run`` with no further arguments. Coverage.py -options cannot be specified here, other than ``-m`` to indicate the module to -run. +run command_line +.................. + +(string) The command-line to run your program. This will be used if you run +``coverage run`` with no further arguments. Coverage.py options cannot be +specified here, other than ``-m`` to indicate the module to run. .. versionadded:: 5.0 + .. _config_run_concurrency: -``concurrency`` (multi-string, default "thread"): the name concurrency -libraries in use by the product code. If your program uses `multiprocessing`_, -`gevent`_, `greenlet`_, or `eventlet`_, you must name that library in this -option, or coverage.py will produce very wrong results. +run concurrency +................. + +(multi-string, default "thread") The concurrency libraries in use by the +product code. If your program uses `multiprocessing`_, `gevent`_, `greenlet`_, +or `eventlet`_, you must name that library in this option, or coverage.py will +produce very wrong results. .. _multiprocessing: https://docs.python.org/3/library/multiprocessing.html .. _greenlet: https://greenlet.readthedocs.io/ .. _gevent: http://www.gevent.org/ .. _eventlet: http://eventlet.net/ -See :ref:subprocess: for details of multi-process measurement. +See :ref:`subprocess` for details of multi-process measurement. Before version 4.2, this option only accepted a single string. .. versionadded:: 4.0 + .. _config_run_context: -``context`` (string): the static context to record for this coverage run. See +run context +............. + +(string) The static context to record for this coverage run. See :ref:`contexts` for more information .. versionadded:: 5.0 + .. _config_run_cover_pylib: -``cover_pylib`` (boolean, default False): whether to measure the Python -standard library. +run cover_pylib +................. + +(boolean, default False) Whether to measure the Python standard library. + .. _config_run_data_file: -``data_file`` (string, default ".coverage"): the name of the data file to use -for storing or reporting coverage. This value can include a path to another -directory. +run data_file +............... + +(string, default ".coverage") The name of the data file to use for storing or +reporting coverage. This value can include a path to another directory. + .. _config_run_disable_warnings: -``disable_warnings`` (multi-string): a list of warnings to disable. Warnings -that can be disabled include a short string at the end, the name of the -warning. See :ref:`cmd_warnings` for specific warnings. +run disable_warnings +...................... + +(multi-string) A list of warnings to disable. Warnings that can be disabled +include a short string at the end, the name of the warning. See +:ref:`cmd_warnings` for specific warnings. + .. _config_run_debug: -``debug`` (multi-string): a list of debug options. See :ref:`the run ---debug option <cmd_run_debug>` for details. +run debug +........... + +(multi-string) A list of debug options. See :ref:`the run --debug option +<cmd_run_debug>` for details. + .. _config_run_dynamic_context: -``dynamic_context`` (string): the name of a strategy for setting the dynamic -context during execution. See :ref:`dynamic_contexts` for details. +run dynamic_context +..................... + +(string) The name of a strategy for setting the dynamic context during +execution. See :ref:`dynamic_contexts` for details. + .. _config_run_include: -``include`` (multi-string): a list of file name patterns, the files to include -in measurement or reporting. Ignored if ``source`` is set. See :ref:`source` -for details. +run include +............. + +(multi-string) A list of file name patterns, the files to include in +measurement or reporting. Ignored if ``source`` is set. See :ref:`source` for +details. + .. _config_run_note: -``note`` (string): this is now obsolete. +run note +.......... + +(string) This is now obsolete. + .. _config_run_omit: -``omit`` (multi-string): a list of file name patterns, the files to leave out -of measurement or reporting. See :ref:`source` for details. +run omit +.......... + +(multi-string) A list of file name patterns, the files to leave out of +measurement or reporting. See :ref:`source` for details. + .. _config_run_parallel: -``parallel`` (boolean, default False): append the machine name, process -id and random number to the data file name to simplify collecting data from -many processes. See :ref:`cmd_combine` for more information. +run parallel +.............. + +(boolean, default False) Append the machine name, process id and random number +to the data file name to simplify collecting data from many processes. See +:ref:`cmd_combine` for more information. + .. _config_run_plugins: -``plugins`` (multi-string): a list of plugin package names. See :ref:`plugins` -for more information.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/contexts.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/contexts.rst
Changed
@@ -60,6 +60,8 @@ .. _pytest-cov: https://pypi.org/project/pytest-cov/ +.. highlight:: ini + The ``run dynamic_context`` setting has only one option now. Set it to ``test_function`` to start a new dynamic context for every test function::
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/contributing.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/contributing.rst
Changed
@@ -39,8 +39,7 @@ .. minimum of PYVERSIONS: -#. (Optional, but recommended) Create a Python 3.7 virtualenv to work in, - and activate it. +#. Create a Python 3.7 virtualenv to work in, and activate it. #. Clone the repository:: @@ -118,18 +117,20 @@ You can also affect the test runs with environment variables. Define any of these as 1 to use them: -- COVERAGE_NO_PYTRACER: disables the Python tracer if you only want to run the - CTracer tests. +- ``COVERAGE_NO_PYTRACER=1`` disables the Python tracer if you only want to + run the CTracer tests. -- COVERAGE_NO_CTRACER: disables the C tracer if you only want to run the +- ``COVERAGE_NO_CTRACER=1`` disables the C tracer if you only want to run the PyTracer tests. -- COVERAGE_ONE_TRACER: only use one tracer for each Python version. This will - use the C tracer if it is available, or the Python tracer if not. +- ``COVERAGE_ONE_TRACER=1`` will use only one tracer for each Python version. + This will use the C tracer if it is available, or the Python tracer if not. -- COVERAGE_AST_DUMP: will dump the AST tree as it is being used during code - parsing. +- ``COVERAGE_AST_DUMP=1`` will dump the AST tree as it is being used during + code parsing. +There are other environment variables that affect tests. I use `set_env.py`_ +as a simple terminal interface to see and set them. Of course, run all the tests on every version of Python you have, before submitting a change. @@ -140,13 +141,10 @@ Lint, etc --------- -I try to keep the coverage.py as clean as possible. I use pylint to alert me -to possible problems:: +I try to keep the coverage.py source as clean as possible. I use pylint to +alert me to possible problems:: $ make lint - pylint coverage setup.py tests - python -m tabnanny coverage setup.py tests - python igor.py check_eol The source is pylint-clean, even if it's because there are pragmas quieting some warnings. Please try to keep it that way, but don't let pylint warnings @@ -159,6 +157,39 @@ Formatting of docstrings, comments, long lines, and so on, should match the code that already exists. +Many people love `black`_, but I would prefer not to run it on coverage.py. + + +Continuous integration +---------------------- + +When you make a pull request, `GitHub actions`__ will run all of the tests and +quality checks on your changes. If any fail, either fix them or ask for help. + +__ https://github.com/nedbat/coveragepy/actions + + +Dependencies +------------ + +Coverage.py has no direct runtime dependencies, and I would like to keep it +that way. + +It has many development dependencies. These are specified generically in the +``requirements/*.in`` files. The .in files should have no versions specified +in them. The specific versions to use are pinned in ``requirements/*.pip`` +files. These are created by running ``make upgrade``. + +.. minimum of PYVERSIONS: + +It's important to use Python 3.7 to run ``make upgrade`` so that the pinned +versions will work on all of the Python versions currently supported by +coverage.py. + +If for some reason we need to constrain a version of a dependency, the +constraint should be specified in the ``requirements/pins.pip`` file, with a +detailed reason for the pin. + Coverage testing coverage.py ---------------------------- @@ -180,6 +211,11 @@ probably fine. A pull request on GitHub is great, but a simple diff or patch works too. +All contributions are expected to include tests for new functionality and +fixes. If you need help writing tests, please ask. + .. _editorconfig.org: http://editorconfig.org .. _tox: https://tox.readthedocs.io/ +.. _black: https://pypi.org/project/black/ +.. _set_env.py: https://nedbatchelder.com/blog/201907/set_envpy.html
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/dbschema.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/dbschema.rst
Changed
@@ -19,8 +19,9 @@ to use the database. The schema can change without changing the major version of coverage.py, so be -careful when accessing the database directly. The `coverage_schema` table has -the schema number of the database. The schema described here corresponds to: +careful when accessing the database directly. The ``coverage_schema`` table +has the schema number of the database. The schema described here corresponds +to: .. cog from coverage.sqldata import SCHEMA_VERSION @@ -49,11 +50,11 @@ .. cog import textwrap from coverage.sqldata import SCHEMA - print(".. code::") + print(".. code-block:: sql") print() print(textwrap.indent(SCHEMA, " ")) .. -.. code:: +.. code-block:: sql CREATE TABLE coverage_schema ( -- One row, to record the version of the schema in this db. @@ -115,7 +116,7 @@ foreign key (file_id) references file (id) ); -.. end (checksum: 207fbab355481686e0dce0a9d99d173c) +.. end (checksum: cfce1df016afbb43a5ff94306db56657) .. _numbits:
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/dict.txt -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/dict.txt
Changed
@@ -30,6 +30,7 @@ Cobertura codecs colorsys +combinable conditionalizing config configparser @@ -45,8 +46,11 @@ CPython css CTracer +Cython datetime +deallocating dedent +defaultdict deserialize deserialized dict @@ -60,6 +64,7 @@ doctests DOCTYPE DOM +encodable encodings endfor endif @@ -71,6 +76,8 @@ executability executable's expr +extensibility +favicon filename filenames filepath @@ -86,6 +93,7 @@ gevent gevent's github +gitignore globals greenlet hotkey @@ -96,6 +104,7 @@ http https importlib +installable instancemethod int ints @@ -104,11 +113,14 @@ iterables Jinja jquery +jQuery json jython kwargs lcov +localStorage Mako +manylinux matcher matchers merchantability @@ -146,6 +158,7 @@ os outfile overridable +parallelizing parsable parsers pathnames @@ -173,15 +186,21 @@ rcfile readme readthedocs +recordable refactored refactoring refactorings regex regexes +reimplemented renderer +runnable +runtime +scrollbar serializable settrace setuptools +sigterm sitecustomize sortable src @@ -190,11 +209,17 @@ stdlib stdout str +subclasses +subdirectory +subprocess +subprocesses symlink symlinks +syntaxes sys templite templating +testability Tidelift timestamp todo @@ -206,6 +231,7 @@ tokenizes tokenizing toml +tomllib tox traceback tracebacks @@ -214,17 +240,20 @@ txt ubuntu undecodable +unexecutable unexecuted unicode uninstall unittest unparsable +unrunnable unsubscriptable untokenizable username URL UTF utf +vendored versionadded virtualenv whitespace
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/excluding.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/excluding.rst
Changed
@@ -7,6 +7,8 @@ Excluding code from coverage.py =============================== +.. highlight:: python + You may have code in your project that you know won't be executed, and you want to tell coverage.py to ignore it. For example, you may have debugging-only code that won't be executed during your unit tests. You can tell coverage.py to @@ -71,6 +73,8 @@ reporting. Matching a ``def`` line or decorator line will exclude an entire function. +.. highlight:: ini + For example, you might decide that __repr__ functions are usually only used in debugging code, and are uninteresting to test themselves. You could exclude all of them by adding a regex to the exclusion list::
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/faq.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/faq.rst
Changed
@@ -54,7 +54,9 @@ .............................................. Yes! Coverage.py has a feature called :ref:`dynamic_contexts` which can collect -this information. Add this to your .coveragerc file:: +this information. Add this to your .coveragerc file: + +.. code-block:: ini run dynamic_context = test_function @@ -90,7 +92,7 @@ implementations of the trace function. The C implementation runs much faster. To see what you are running, use ``coverage debug sys``. The output contains details of the environment, including a line that says either -``CTrace: available`` or ``CTracer: unavailable``. If it says unavailble, +``CTrace: available`` or ``CTracer: unavailable``. If it says unavailable, then you are using the slow Python implementation. Try re-installing coverage.py to see what happened and if you get the CTracer
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/index.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/index.rst
Changed
@@ -18,14 +18,14 @@ .. PYVERSIONS -* Python versions 3.7 through 3.11.0a4. +* Python versions 3.7 through 3.11.0 rc2. * PyPy3 7.3.8. .. ifconfig:: prerelease **This is a pre-release build. The usual warnings about possible bugs - apply.** The latest stable version is coverage.py 6.3.2, `described here`_. + apply.** The latest stable version is coverage.py 6.4, `described here`_. .. _described here: http://coverage.readthedocs.io/ @@ -68,9 +68,7 @@ Instructions for specific test runners: - .. tabs:: - - .. tab:: pytest + - **pytest** If you usually use:: @@ -83,7 +81,7 @@ Many people choose to use the `pytest-cov`_ plugin, but for most purposes, it is unnecessary. - .. tab:: unittest + - **unittest** Change "python" to "coverage run", so this:: @@ -93,18 +91,18 @@ $ coverage run -m unittest discover - .. tab:: nosetest - - *Nose has been unmaintained for a long time. You should seriously - consider adopting a different test runner.* - - Change this:: - - $ nosetests arg1 arg2 - - to:: - - $ coverage run -m nose arg1 arg2 + .. - **nosetest** + .. + .. *Nose has been unmaintained for a long time. You should seriously + .. consider adopting a different test runner.* + .. + .. Change this:: + .. + .. $ nosetests arg1 arg2 + .. + .. to this:: + .. + .. $ coverage run -m nose arg1 arg2 To limit coverage measurement to code in the current directory, and also find files that weren't executed at all, add the ``--source=.`` argument to
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/plugins.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/plugins.rst
Changed
@@ -25,21 +25,27 @@ example, let's say there's a Python package called ``something`` that provides a coverage.py plug-in called ``something.plugin``. -#. Install the plug-in's package as you would any other Python package:: +#. Install the plug-in's package as you would any other Python package: - pip install something + .. code-block:: sh + + $ pip install something #. Configure coverage.py to use the plug-in. You do this by editing (or creating) your .coveragerc file, as described in :ref:`config`. The ``plugins`` setting indicates your plug-in. It's a list of importable - module names of plug-ins:: + module names of plug-ins: + + .. code-block:: ini run plugins = something.plugin #. If the plug-in needs its own configuration, you can add those settings in - the .coveragerc file in a section named for the plug-in:: + the .coveragerc file in a section named for the plug-in: + + .. code-block:: ini something.plugin option1 = True
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/python-coverage.1.txt -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/python-coverage.1.txt
Changed
@@ -146,7 +146,8 @@ ``data`` to show a summary of the collected data; ``sys`` to show installation information; ``config`` to show the configuration; - ``premain`` to show what is calling coverage. + ``premain`` to show what is calling coverage; + ``pybehave`` to show internal flags describing Python behavior. **erase**
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/requirements.in -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/requirements.in
Changed
@@ -7,11 +7,11 @@ -c ../requirements/pins.pip cogapp -doc8 +#doc8 pyenchant sphinx sphinx-autobuild sphinx_rtd_theme -sphinx-tabs +#sphinx-tabs sphinxcontrib-restbuilder sphinxcontrib-spelling
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/requirements.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/requirements.pip
Changed
@@ -4,105 +4,208 @@ # # make upgrade # -alabaster==0.7.12 +alabaster==0.7.12 \ + --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ + --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 # via sphinx -babel==2.9.1 +babel==2.10.3 \ + --hash=sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51 \ + --hash=sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb # via sphinx -certifi==2021.10.8 - # via requests -charset-normalizer==2.0.11 +certifi==2022.5.18.1 \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a + # via + # -c doc/../requirements/pins.pip + # requests +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests -cogapp==3.3.0 +cogapp==3.3.0 \ + --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ + --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 # via -r doc/requirements.in -colorama==0.4.4 +colorama==0.4.5 \ + --hash=sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da \ + --hash=sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4 # via sphinx-autobuild -doc8==0.10.1 - # via -r doc/requirements.in -docutils==0.16 +docutils==0.17.1 \ + --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 \ + --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 # via - # -c doc/../requirements/pins.pip - # doc8 - # restructuredtext-lint # sphinx # sphinx-rtd-theme - # sphinx-tabs -idna==3.3 +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -imagesize==1.3.0 +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a # via sphinx -importlib-metadata==4.11.0 +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 # via # sphinx # sphinxcontrib-spelling - # stevedore -jinja2==3.0.3 +jinja2==3.1.2 \ + --hash=sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852 \ + --hash=sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 # via sphinx -livereload==2.6.3 +livereload==2.6.3 \ + --hash=sha256:776f2f865e59fde56490a56bcc6773b6917366bce0c267c60ee8aaf1a0959869 # via sphinx-autobuild -markupsafe==2.0.1 +markupsafe==2.1.1 \ + --hash=sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003 \ + --hash=sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88 \ + --hash=sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5 \ + --hash=sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7 \ + --hash=sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a \ + --hash=sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603 \ + --hash=sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1 \ + --hash=sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135 \ + --hash=sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247 \ + --hash=sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6 \ + --hash=sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601 \ + --hash=sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77 \ + --hash=sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02 \ + --hash=sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e \ + --hash=sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63 \ + --hash=sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f \ + --hash=sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980 \ + --hash=sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b \ + --hash=sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812 \ + --hash=sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff \ + --hash=sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96 \ + --hash=sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1 \ + --hash=sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925 \ + --hash=sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a \ + --hash=sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6 \ + --hash=sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e \ + --hash=sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f \ + --hash=sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4 \ + --hash=sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f \ + --hash=sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3 \ + --hash=sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c \ + --hash=sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a \ + --hash=sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417 \ + --hash=sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a \ + --hash=sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a \ + --hash=sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37 \ + --hash=sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452 \ + --hash=sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933 \ + --hash=sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a \ + --hash=sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7 # via jinja2 -packaging==21.3 +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 # via sphinx -pbr==5.8.1 - # via stevedore -pyenchant==3.2.2 +pyenchant==3.2.2 \ + --hash=sha256:1cf830c6614362a78aab78d50eaf7c6c93831369c52e1bb64ffae1df0341e637 \ + --hash=sha256:5a636832987eaf26efe971968f4d1b78e81f62bca2bde0a9da210c7de43c3bce \ + --hash=sha256:5facc821ece957208a81423af7d6ec7810dad29697cb0d77aae81e4e11c8e5a6 \ + --hash=sha256:6153f521852e23a5add923dbacfbf4bebbb8d70c4e4bad609a8e0f9faeb915d1 # via # -r doc/requirements.in # sphinxcontrib-spelling -pygments==2.11.2 - # via - # doc8 - # sphinx - # sphinx-tabs -pyparsing==3.0.7 +pygments==2.13.0 \ + --hash=sha256:56a8508ae95f98e2b9bdf93a6be5ae3f7d8af858b43e02c5a2ff083726be40c1 \ + --hash=sha256:f643f331ab57ba3c9d89212ee4a2dabc6e94f117cf4eefde99a0574720d14c42 + # via sphinx +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc # via packaging -pytz==2021.3 +pytz==2022.2.1 \ + --hash=sha256:220f481bdafa09c3955dfbdddb7b57780e9a94f5127e35456a48589b9e0c0197 \ + --hash=sha256:cea221417204f2d1a2aa03ddae3e867921971d0d76f14d87abb4414415bbdcf5 # via babel -requests==2.27.1 +requests==2.28.1 \ + --hash=sha256:7c5599b102feddaa661c826c56ab4fee28bfd17f5abca1ebbe3e7f19d7c97983 \ + --hash=sha256:8fefa2a1a1365bf5520aac41836fbee479da67864514bdb821f31ce07ce65349 # via sphinx -restructuredtext-lint==1.3.2 - # via doc8 -six==1.16.0 +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via livereload -snowballstemmer==2.2.0 +snowballstemmer==2.2.0 \ + --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ + --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a # via sphinx -sphinx==4.4.0 +sphinx==5.2.1 \ + --hash=sha256:3dcf00fcf82cf91118db9b7177edea4fc01998976f893928d0ab0c58c54be2ca \ + --hash=sha256:c009bb2e9ac5db487bcf53f015504005a330ff7c631bb6ab2604e0d65bae8b54 # via # -r doc/requirements.in # sphinx-autobuild # sphinx-rtd-theme - # sphinx-tabs # sphinxcontrib-restbuilder # sphinxcontrib-spelling -sphinx-autobuild==2021.3.14 - # via -r doc/requirements.in -sphinx-rtd-theme==1.0.0 +sphinx-autobuild==2021.3.14 \ + --hash=sha256:8fe8cbfdb75db04475232f05187c776f46f6e9e04cacf1e49ce81bdac649ccac \ + --hash=sha256:de1ca3b66e271d2b5b5140c35034c89e47f263f2cd5db302c9217065f7443f05 # via -r doc/requirements.in -sphinx-tabs==3.2.0 +sphinx-rtd-theme==1.0.0 \ + --hash=sha256:4d35a56f4508cfee4c4fb604373ede6feae2a306731d533f409ef5c3496fdbd8 \ + --hash=sha256:eec6d497e4c2195fa0e8b2016b337532b8a699a68bcb22a512870e16925c6a5c # via -r doc/requirements.in -sphinxcontrib-applehelp==1.0.2 +sphinxcontrib-applehelp==1.0.2 \ + --hash=sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a \ + --hash=sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58 # via sphinx
View file
_service:tar_scm:coverage-6.3.2.tar.gz/doc/source.rst -> _service:tar_scm:coverage-6.5.0.tar.gz/doc/source.rst
Changed
@@ -57,6 +57,8 @@ match the include patterns, then any files that match the omit pattern are removed from the set. +.. highlight:: ini + The ``include`` and ``omit`` file name patterns follow typical shell syntax: ``*`` matches any number of characters and ``?`` matches a single character. Patterns that start with a wildcard character are used as-is, other patterns
View file
_service:tar_scm:coverage-6.3.2.tar.gz/howto.txt -> _service:tar_scm:coverage-6.5.0.tar.gz/howto.txt
Changed
@@ -16,7 +16,8 @@ - Python versions supported - Update docs - Python versions in doc/index.rst - - Version of latest stable release in doc/index.rst + - IF PRE-RELEASE: + - Version of latest stable release in doc/index.rst - Version, release, release_date and copyright date in doc/conf.py - Look for CHANGEME comments - Make sure the docs are cogged: @@ -26,21 +27,10 @@ $ tox -e doc - commit the release-prep changes - Generate new sample_html to get the latest, incl footer version number: - $ make clean - $ pip install -e . - $ cd ~/cog/trunk - $ rm -rf htmlcov - $ PYTEST_ADDOPTS= coverage run --branch --source=cogapp -m pytest -k CogTestsInMemory; coverage combine; coverage html - IF PRE-RELEASE: - $ rm -f ~/coverage/trunk/doc/sample_html_beta/*.* - $ cp -r htmlcov/ ~/coverage/trunk/doc/sample_html_beta/ - $ rm ~/coverage/trunk/doc/sample_html_beta/.gitignore - - IF NOT PRE-RELEASE: - $ rm -f ~/coverage/trunk/doc/sample_html/*.* - $ cp -r htmlcov/ ~/coverage/trunk/doc/sample_html/ - $ rm ~/coverage/trunk/doc/sample_html/.gitignore - $ cd ~/coverage/trunk + $ make sample_html_beta - IF NOT PRE-RELEASE: + $ make sample_html check in the new sample html - Done with changes to source files, check them in. $ git push @@ -50,8 +40,10 @@ - ELSE: $ make publish - Kits: - - Manually trigger the kit GitHub Action - - https://github.com/nedbat/coveragepy/actions/workflows/kit.yml + - Trigger the kit GitHub Action + $ make build_kits + - wait for it to finish: + - https://github.com/nedbat/coveragepy/actions/workflows/kit.yml - Download and check built kits from GitHub Actions: $ make clean download_kits check_kits - examine the dist directory, and remove anything that looks malformed. @@ -61,12 +53,10 @@ - upload kits: $ make kit_upload - Tag the tree - $ git tag -a -m "Version 3.0.1" 3.0.1 - $ git push --follow-tags + $ make tag - IF NOT PRE-RELEASE: - update git "stable" branch to point to latest release - $ git branch -f stable <latest-tag> - $ git push origin stable + $ make update_stable - Update GitHub releases: $ make clean github_releases - Bump version: @@ -88,17 +78,15 @@ - @ https://readthedocs.org/dashboard/coverage/advanced/ - change the default version to the new version - Visit the fixed issues on GitHub and mention the version it was fixed in. - - python ci/comment_on_fixes.py + $ make comment_on_fixes - "This is now released as part of coverage 5.2(https://pypi.org/project/coverage/5.2)." - Announce: - twitter @coveragepy - nedbatchelder.com blog post? - things to automate: - - git tag command - - git stable branch update command - - comment-on-fixes.py - url to link to latest changes in docs - next version.py line + - readthedocs api to do the readthedocs changes * Testing
View file
_service:tar_scm:coverage-6.3.2.tar.gz/igor.py -> _service:tar_scm:coverage-6.5.0.tar.gz/igor.py
Changed
@@ -56,7 +56,7 @@ print(f" {env} = {os.environenv!r}") -def do_remove_extension(): +def do_remove_extension(*args): """Remove the compiled C extension, no matter what its name.""" so_patterns = """ @@ -66,8 +66,22 @@ tracer.*.pyd """.split() + if "--from-install" in args: + # Get the install location using a subprocess to avoid + # locking the file we are about to delete + root = os.path.dirname(subprocess.check_output( + sys.executable, + "-Xutf8", + "-c", + "import coverage; print(coverage.__file__)" + , encoding="utf-8").strip()) + else: + root = "coverage" + for pattern in so_patterns: - pattern = os.path.join("coverage", pattern) + pattern = os.path.join(root, pattern.strip()) + if VERBOSITY: + print(f"Searching for {pattern}") for filename in glob.glob(pattern): if os.path.exists(filename): if VERBOSITY: @@ -371,37 +385,43 @@ import coverage ver = coverage.__version__ vi = coverage.version_info - anchor = f"{vi0}{vi1}" - if vi2: - anchor += f"{vi2}" + shortver = f"{vi0}.{vi1}.{vi2}" + anchor = shortver.replace(".", "-") if vi3 != "final": - anchor += vi30 - anchor += f"{vi4}" + anchor += f"{vi30}{vi4}" + now = datetime.datetime.now() branch = subprocess.getoutput("git rev-parse --abbrev-ref @") print(f"Coverage version is {ver}") print(f"pip install git+https://github.com/nedbat/coveragepy@{branch}") + print(f"https://coverage.readthedocs.io/en/{ver}/changes.html#changes-{anchor}") - print("\nfor CHANGES.rst before release:") + print("\n## for CHANGES.rst before release:") print(f".. _changes_{anchor}:") print() - head = f"Version {ver} — {datetime.datetime.now():%Y-%m-%d}" + head = f"Version {ver} — {now:%Y-%m-%d}" print(head) print("-" * len(head)) - print("\ngit commands:") - print(f'git tag -a -m "Version {ver}" {ver}; git push --follow-tags') - print(f'git branch -f stable {ver}; git push origin stable') - print(f"https://coverage.readthedocs.io/en/{ver}/changes.html#changes-{anchor}") + print("\n## For doc/conf.py before release:") + print("\n".join( + '# The short X.Y.Z version. # CHANGEME', + f'version = "{shortver}"', + '# The full version, including alpha/beta/rc tags. # CHANGEME', + f'release = "{ver}"', + '# The date of release, in "monthname day, year" format. # CHANGEME', + f'release_date = "{now:%B %-d, %Y}"', + )) print( + "\n## For GitHub commenting:\n" + "This is now released as part of " + f"coverage {ver}(https://pypi.org/project/coverage/{ver})." ) - print("\nnext:") + print("\n## For version.py next:") next_vi = (vi0, vi1, vi2+1, "alpha", 0) print(f"version_info = {next_vi}".replace("'", '"')) - print("\nfor CHANGES.rst after release:") + print("\n## For CHANGES.rst after release:") print(textwrap.dedent("""\ Unreleased ----------
View file
_service:tar_scm:coverage-6.5.0.tar.gz/lab/benchmark.py
Added
@@ -0,0 +1,491 @@ +"""Run performance comparisons for versions of coverage""" + +import contextlib +import dataclasses +import itertools +import os +import shutil +import statistics +import subprocess +import sys +import time +from pathlib import Path + +from typing import Dict, Iterable, Iterator, List, Optional, Tuple + + +class ShellSession: + """A logged shell session. + + The duration of the last command is available as .last_duration. + """ + + def __init__(self, output_filename: str): + self.output_filename = output_filename + self.last_duration: float = 0 + self.foutput = None + + def __enter__(self): + self.foutput = open(self.output_filename, "a", encoding="utf-8") + print(f"Logging output to {os.path.abspath(self.output_filename)}") + return self + + def __exit__(self, exc_type, exc_value, traceback): + self.foutput.close() + + def print(self, *args, **kwargs): + """Print a message to this shell's log.""" + print(*args, **kwargs, file=self.foutput) + + def run_command(self, cmd: str) -> str: + """ + Run a command line (with a shell). + + Returns: + str: the output of the command. + + """ + self.print(f"\n========================\n$ {cmd}") + start = time.perf_counter() + proc = subprocess.run( + cmd, + shell=True, + check=False, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + ) + output = proc.stdout.decode("utf-8") + self.last_duration = time.perf_counter() - start + self.print(output, end="") + self.print(f"(was: {cmd})") + self.print(f"(in {os.getcwd()}, duration: {self.last_duration:.3f}s)") + + if proc.returncode != 0: + self.print(f"ERROR: command returned {proc.returncode}") + raise Exception( + f"Command failed ({proc.returncode}): {cmd!r}, output was:\n{output}" + ) + + return output.strip() + + +def rmrf(path: Path) -> None: + """ + Remove a directory tree. It's OK if it doesn't exist. + """ + if path.exists(): + shutil.rmtree(path) + + +@contextlib.contextmanager +def change_dir(newdir: Path) -> IteratorPath: + """ + Change to a new directory, and then change back. + + Will make the directory if needed. + """ + old_dir = os.getcwd() + newdir.mkdir(parents=True, exist_ok=True) + os.chdir(newdir) + try: + yield newdir + finally: + os.chdir(old_dir) + + +@contextlib.contextmanager +def file_replace(file_name: Path, old_text: str, new_text: str) -> IteratorNone: + """ + Replace some text in `file_name`, and change it back. + """ + if old_text: + file_text = file_name.read_text() + if old_text not in file_text: + raise Exception("Old text {old_text!r} not found in {file_name}") + updated_text = file_text.replace(old_text, new_text) + file_name.write_text(updated_text) + try: + yield + finally: + if old_text: + file_name.write_text(file_text) + + +class ProjectToTest: + """Information about a project to use as a test case.""" + + # Where can we clone the project from? + git_url: Optionalstr = None + + def __init__(self): + if self.git_url: + self.slug = self.git_url.split("/")-1 + self.dir = Path(self.slug) + + def get_source(self, shell): + """Get the source of the project.""" + if self.dir.exists(): + rmrf(self.dir) + shell.run_command(f"git clone {self.git_url}") + + def prep_environment(self, env): + """Prepare the environment to run the test suite. + + This is not timed. + """ + pass + + def run_no_coverage(self, env): + """Run the test suite with no coverage measurement.""" + pass + + def run_with_coverage(self, env, pip_args, cov_options): + """Run the test suite with coverage measurement.""" + pass + + +class ToxProject(ProjectToTest): + """A project using tox to run the test suite.""" + + def prep_environment(self, env): + env.shell.run_command(f"{env.python} -m pip install tox") + self.run_tox(env, env.pyver.toxenv, "--notest") + + def run_tox(self, env, toxenv, toxargs=""): + """Run a tox command. Return the duration.""" + env.shell.run_command(f"{env.python} -m tox -e {toxenv} {toxargs}") + return env.shell.last_duration + + def run_no_coverage(self, env): + return self.run_tox(env, env.pyver.toxenv, "--skip-pkg-install") + + def run_with_coverage(self, env, pip_args, cov_options): + assert not cov_options, f"ToxProject.run_with_coverage can't take cov_options={cov_options!r}" + self.run_tox(env, env.pyver.toxenv, "--notest") + env.shell.run_command( + f".tox/{env.pyver.toxenv}/bin/python -m pip install {pip_args}" + ) + return self.run_tox(env, env.pyver.toxenv, "--skip-pkg-install") + + +class ProjectPytestHtml(ToxProject): + """pytest-dev/pytest-html""" + + git_url = "https://github.com/pytest-dev/pytest-html" + + def run_with_coverage(self, env, pip_args, cov_options): + covenv = env.pyver.toxenv + "-cov" + self.run_tox(env, covenv, "--notest") + env.shell.run_command(f".tox/{covenv}/bin/python -m pip install {pip_args}") + if cov_options: + replace = ("# reference: https", f"run\n{cov_options}\n#") + else: + replace = ("", "") + with file_replace(Path(".coveragerc"), *replace): + env.shell.run_command("cat .coveragerc") + env.shell.run_command(f".tox/{covenv}/bin/python -m coverage debug sys") + return self.run_tox(env, covenv, "--skip-pkg-install") + + +class ProjectDateutil(ToxProject): + """dateutil/dateutil""" + + git_url = "https://github.com/dateutil/dateutil" + + def prep_environment(self, env): + super().prep_environment(env) + env.shell.run_command(f"{env.python} updatezinfo.py") + + def run_no_coverage(self, env):
View file
_service:tar_scm:coverage-6.3.2.tar.gz/lab/extract_code.py -> _service:tar_scm:coverage-6.5.0.tar.gz/lab/extract_code.py
Changed
@@ -11,10 +11,6 @@ If tests/test_arcs.py has this (partial) content:: - 1626 @pytest.mark.skipif( - 1627 (3, 11, 0, "alpha", 4) <= env.PYVERSION, - 1628 reason="avoid a 3.11 bug: https://bugs.python.org/issue46389", - 1629 ) 1630 def test_partial_generators(self): 1631 # https://github.com/nedbat/coveragepy/issues/475 1632 # Line 2 is executed completely.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/lab/goals.py -> _service:tar_scm:coverage-6.5.0.tar.gz/lab/goals.py
Changed
@@ -40,7 +40,7 @@ n_branches=sel_summ.get("num_branches", 0), n_partial_branches=sel_summ.get("num_partial_branches", 0), n_missing_branches=sel_summ.get("missing_branches", 0), - ) + ) return total
View file
_service:tar_scm:coverage-6.3.2.tar.gz/lab/hack_pyc.py -> _service:tar_scm:coverage-6.5.0.tar.gz/lab/hack_pyc.py
Changed
@@ -71,7 +71,7 @@ code.co_argcount, code.co_nlocals, code.co_stacksize, code.co_flags, code.co_code, tuple(new_consts), code.co_names, code.co_varnames, code.co_filename, code.co_name, new_firstlineno, new_lnotab - ) + ) return new_code
View file
_service:tar_scm:coverage-6.3.2.tar.gz/lab/parser.py -> _service:tar_scm:coverage-6.5.0.tar.gz/lab/parser.py
Changed
@@ -28,19 +28,19 @@ parser.add_option( "-d", action="store_true", dest="dis", help="Disassemble" - ) + ) parser.add_option( "-R", action="store_true", dest="recursive", help="Recurse to find source files" - ) + ) parser.add_option( "-s", action="store_true", dest="source", help="Show analyzed source" - ) + ) parser.add_option( "-t", action="store_true", dest="tokens", help="Show tokens" - ) + ) options, args = parser.parse_args() if options.recursive: @@ -108,6 +108,8 @@ marks2 = str(exits) if lineno in pyparser.raw_docstrings: marks3 = '"' + if lineno in pyparser.raw_classdefs: + marks3 = 'C' if lineno in pyparser.raw_excluded: marks4 = 'x'
View file
_service:tar_scm:coverage-6.3.2.tar.gz/lab/run_trace.py -> _service:tar_scm:coverage-6.5.0.tar.gz/lab/run_trace.py
Changed
@@ -20,7 +20,7 @@ os.path.basename(frame.f_code.co_filename), frame.f_lineno, frame.f_lasti, - )) + )) if event == 'call': nest += 1
View file
_service:tar_scm:coverage-6.3.2.tar.gz/pylintrc -> _service:tar_scm:coverage-6.5.0.tar.gz/pylintrc
Changed
@@ -25,9 +25,6 @@ # Pickle collected data for later comparisons. persistent=no -# Set the cache size for astng objects. -cache-size=500 - # List of plugins (as comma separated values of python modules names) to load, # usually to register additional checkers. load-plugins= @@ -61,15 +58,11 @@ # Messages that are just silly: locally-disabled, exec-used, - no-init, - bad-whitespace, global-statement, broad-except, no-else-return, - misplaced-comparison-constant, subprocess-run-check, # Messages that may be silly: - no-self-use, no-member, using-constant-test, too-many-nested-blocks, @@ -81,9 +74,9 @@ import-outside-toplevel, self-assigning-variable, consider-using-with, + missing-timeout, # Formatting stuff superfluous-parens, - bad-continuation, # Messages that are noisy for now, eventually maybe we'll turn them on: invalid-name, protected-access, @@ -100,11 +93,6 @@ # (visual studio) and html output-format=text -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.txt|html". -files-output=no - # Tells whether to display a full report or only the messages reports=no @@ -180,9 +168,6 @@ # Bad variable names which should always be refused, separated by a comma bad-names=foo,bar,baz,toto,tutu,tata -# List of builtins function names that should not be used, separated by a comma -bad-functions= - # try to find bugs in the code using type inference # @@ -196,10 +181,6 @@ # (useful for classes with attributes dynamically set). ignored-classes=SQLObject -# List of members which are usually get through zope's acquisition mechanism and -# so shouldn't trigger E0201 when accessed (need zope=yes to be considered). -acquired-members=REQUEST,acl_users,aq_parent - # checks for # * unused variables / imports
View file
_service:tar_scm:coverage-6.5.0.tar.gz/pyproject.toml
Added
@@ -0,0 +1,6 @@ +# Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 +# For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt + +build-system +requires = 'setuptools', 'wheel' +build-backend = 'setuptools.build_meta'
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/dev.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/dev.pip
Changed
@@ -4,65 +4,175 @@ # # make upgrade # -astroid==2.9.3 +astroid==2.12.10 \ + --hash=sha256:81f870105d892e73bf535da77a8261aa5bde838fa4ed12bb2f435291a098c581 \ + --hash=sha256:997e0c735df60d4a4caff27080a3afc51f9bdd693d3572a4a0b7090b645c36c5 # via pylint -attrs==21.4.0 +atomicwrites==1.4.1 \ + --hash=sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11 + # via -r requirements/pytest.pip +attrs==22.1.0 \ + --hash=sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6 \ + --hash=sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c # via # -r requirements/pytest.pip # hypothesis # pytest -backports-functools-lru-cache==1.6.4 - # via -r requirements/pytest.pip -backports-functools-lru-cache==1.6.4 - # via pycontracts -bleach==4.1.0 +backports-functools-lru-cache==1.6.4 \ + --hash=sha256:d5ed2169378b67d3c545e5600d363a923b09c456dab1593914935a68ad478271 \ + --hash=sha256:dbead04b9daa817909ec64e8d2855fb78feafe0b901d4568758e3a60559d8978 + # via + # -r requirements/pytest.pip + # pycontracts +bleach==5.0.1 \ + --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ + --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c # via readme-renderer -build==0.7.0 +build==0.8.0 \ + --hash=sha256:19b0ed489f92ace6947698c3ca8436cb0556a66e2aa2d34cd70e2a5d27cd0437 \ + --hash=sha256:887a6d471c901b1a6e6574ebaeeebb45e5269a79d095fe9a8f88d6614ed2e5f0 # via check-manifest -certifi==2021.10.8 - # via requests -charset-normalizer==2.0.11 +certifi==2022.5.18.1 \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a + # via + # -c requirements/pins.pip + # requests +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f # via requests -check-manifest==0.47 +check-manifest==0.48 \ + --hash=sha256:3b575f1dade7beb3078ef4bf33a94519834457c7281dbc726b15c5466b55c657 \ + --hash=sha256:b1923685f98c1c2468601a1a7bed655db549a25d43c583caded3860ad8308f8c # via -r requirements/dev.in -cogapp==3.3.0 +cogapp==3.3.0 \ + --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ + --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 # via -r requirements/dev.in -colorama==0.4.4 - # via twine -decorator==5.1.1 +colorama==0.4.5 \ + --hash=sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da \ + --hash=sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4 + # via -r requirements/pytest.pip +commonmark==0.9.1 \ + --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ + --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 + # via rich +decorator==5.1.1 \ + --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \ + --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 # via # -r requirements/pytest.pip # pycontracts -distlib==0.3.4 +dill==0.3.5.1 \ + --hash=sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302 \ + --hash=sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86 + # via pylint +distlib==0.3.6 \ + --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ + --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via # -r requirements/pip.pip # virtualenv -docutils==0.16 +docutils==0.19 \ + --hash=sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6 \ + --hash=sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc + # via readme-renderer +exceptiongroup==1.0.0rc9 \ + --hash=sha256:2e3c3fc1538a094aab74fad52d6c33fc94de3dfee3ee01f187c0e0c72aec5337 \ + --hash=sha256:9086a4a21ef9b31c72181c77c040a074ba0889ee56a7b289ff0afb0d97655f96 # via - # -c requirements/pins.pip - # readme-renderer -execnet==1.9.0 + # -r requirements/pytest.pip + # hypothesis +execnet==1.9.0 \ + --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ + --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 # via # -r requirements/pytest.pip # pytest-xdist -filelock==3.4.2 +filelock==3.8.0 \ + --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ + --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 # via # -r requirements/pip.pip # tox # virtualenv -flaky==3.7.0 +flaky==3.7.0 \ + --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ + --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.pip -future==0.18.2 +future==0.18.2 \ + --hash=sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d # via # -r requirements/pytest.pip # pycontracts -greenlet==1.1.2 +greenlet==1.1.3 \ + --hash=sha256:0118817c9341ef2b0f75f5af79ac377e4da6ff637e5ee4ac91802c0e379dadb4 \ + --hash=sha256:048d2bed76c2aa6de7af500ae0ea51dd2267aec0e0f2a436981159053d0bc7cc \ + --hash=sha256:07c58e169bbe1e87b8bbf15a5c1b779a7616df9fd3e61cadc9d691740015b4f8 \ + --hash=sha256:095a980288fe05adf3d002fbb180c99bdcf0f930e220aa66fcd56e7914a38202 \ + --hash=sha256:0b181e9aa6cb2f5ec0cacc8cee6e5a3093416c841ba32c185c30c160487f0380 \ + --hash=sha256:1626185d938d7381631e48e6f7713e8d4b964be246073e1a1d15c2f061ac9f08 \ + --hash=sha256:184416e481295832350a4bf731ba619a92f5689bf5d0fa4341e98b98b1265bd7 \ + --hash=sha256:1dd51d2650e70c6c4af37f454737bf4a11e568945b27f74b471e8e2a9fd21268 \ + --hash=sha256:1ec2779774d8e42ed0440cf8bc55540175187e8e934f2be25199bf4ed948cd9e \ + --hash=sha256:2cf45e339cabea16c07586306a31cfcc5a3b5e1626d365714d283732afed6809 \ + --hash=sha256:2fb0aa7f6996879551fd67461d5d3ab0c3c0245da98be90c89fcb7a18d437403 \ + --hash=sha256:44b4817c34c9272c65550b788913620f1fdc80362b209bc9d7dd2f40d8793080 \ + --hash=sha256:466ce0928e33421ee84ae04c4ac6f253a3a3e6b8d600a79bd43fd4403e0a7a76 \ + --hash=sha256:4f166b4aca8d7d489e82d74627a7069ab34211ef5ebb57c300ec4b9337b60fc0 \ + --hash=sha256:510c3b15587afce9800198b4b142202b323bf4b4b5f9d6c79cb9a35e5e3c30d2 \ + --hash=sha256:5b756e6730ea59b2745072e28ad27f4c837084688e6a6b3633c8b1e509e6ae0e \ + --hash=sha256:5fbe1ab72b998ca77ceabbae63a9b2e2dc2d963f4299b9b278252ddba142d3f1 \ + --hash=sha256:6200a11f003ec26815f7e3d2ded01b43a3810be3528dd760d2f1fa777490c3cd \ + --hash=sha256:65ad1a7a463a2a6f863661329a944a5802c7129f7ad33583dcc11069c17e622c \ + --hash=sha256:694ffa7144fa5cc526c8f4512665003a39fa09ef00d19bbca5c8d3406db72fbe \ + --hash=sha256:6f5d4b2280ceea76c55c893827961ed0a6eadd5a584a7c4e6e6dd7bc10dfdd96 \ + --hash=sha256:7532a46505470be30cbf1dbadb20379fb481244f1ca54207d7df3bf0bbab6a20 \ + --hash=sha256:76a53bfa10b367ee734b95988bd82a9a5f0038a25030f9f23bbbc005010ca600 \ + --hash=sha256:77e41db75f9958f2083e03e9dd39da12247b3430c92267df3af77c83d8ff9eed \ + --hash=sha256:7a43bbfa9b6cfdfaeefbd91038dde65ea2c421dc387ed171613df340650874f2 \ + --hash=sha256:7b41d19c0cfe5c259fe6c539fd75051cd39a5d33d05482f885faf43f7f5e7d26 \ + --hash=sha256:7c5227963409551ae4a6938beb70d56bf1918c554a287d3da6853526212fbe0a \ + --hash=sha256:870a48007872d12e95a996fca3c03a64290d3ea2e61076aa35d3b253cf34cd32 \ + --hash=sha256:88b04e12c9b041a1e0bcb886fec709c488192638a9a7a3677513ac6ba81d8e79 \ + --hash=sha256:8c287ae7ac921dfde88b1c125bd9590b7ec3c900c2d3db5197f1286e144e712b \ + --hash=sha256:903fa5716b8fbb21019268b44f73f3748c41d1a30d71b4a49c84b642c2fed5fa \ + --hash=sha256:9537e4baf0db67f382eb29255a03154fcd4984638303ff9baaa738b10371fa57 \ + --hash=sha256:9951dcbd37850da32b2cb6e391f621c1ee456191c6ae5528af4a34afe357c30e \ + --hash=sha256:9b2f7d0408ddeb8ea1fd43d3db79a8cefaccadd2a812f021333b338ed6b10aba \ + --hash=sha256:9c88e134d51d5e82315a7c32b914a58751b7353eb5268dbd02eabf020b4c4700 \ + --hash=sha256:9fae214f6c43cd47f7bef98c56919b9222481e833be2915f6857a1e9e8a15318 \ + --hash=sha256:a3a669f11289a8995d24fbfc0e63f8289dd03c9aaa0cc8f1eab31d18ca61a382 \ + --hash=sha256:aa741c1a8a8cc25eb3a3a01a62bdb5095a773d8c6a86470bde7f607a447e7905 \ + --hash=sha256:b0877a9a2129a2c56a2eae2da016743db7d9d6a05d5e1c198f1b7808c602a30e \ + --hash=sha256:bcb6c6dd1d6be6d38d6db283747d07fda089ff8c559a835236560a4410340455 \ + --hash=sha256:caff52cb5cd7626872d9696aee5b794abe172804beb7db52eed1fd5824b63910 \ + --hash=sha256:cbc1eb55342cbac8f7ec159088d54e2cfdd5ddf61c87b8bbe682d113789331b2 \ + --hash=sha256:cd16a89efe3a003029c87ff19e9fba635864e064da646bc749fc1908a4af18f3 \ + --hash=sha256:ce5b64dfe8d0cca407d88b0ee619d80d4215a2612c1af8c98a92180e7109f4b5 \ + --hash=sha256:d58a5a71c4c37354f9e0c24c9c8321f0185f6945ef027460b809f4bb474bfe41 \ + --hash=sha256:db41f3845eb579b544c962864cce2c2a0257fe30f0f1e18e51b1e8cbb4e0ac6d \ + --hash=sha256:db5b25265010a1b3dca6a174a443a0ed4c4ab12d5e2883a11c97d6e6d59b12f9 \ + --hash=sha256:dd0404d154084a371e6d2bafc787201612a1359c2dee688ae334f9118aa0bf47 \ + --hash=sha256:de431765bd5fe62119e0bc6bc6e7b17ac53017ae1782acf88fcf6b7eae475a49 \ + --hash=sha256:df02fdec0c533301497acb0bc0f27f479a3a63dcdc3a099ae33a902857f07477 \ + --hash=sha256:e8533f5111704d75de3139bf0b8136d3a6c1642c55c067866fa0a51c2155ee33 \ + --hash=sha256:f2f908239b7098799b8845e5936c2ccb91d8c2323be02e82f8dcb4a80dcf4a25 \ + --hash=sha256:f8bfd36f368efe0ab2a6aa3db7f14598aac454b06849fb633b762ddbede1db90 \ + --hash=sha256:ffe73f9e7aea404722058405ff24041e59d31ca23d1da0895af48050a07b6932 # via -r requirements/dev.in -hypothesis==6.36.1 +hypothesis==6.54.6 \ + --hash=sha256:2d5e2d5ccd0efce4e0968a6164f4e4853f808e33f4d91490c975c98beec0c7c3 \ + --hash=sha256:e44833325f9a55f795596ceefd7ede7d626cfe45836025d2647cccaff7070e10 # via -r requirements/pytest.pip -idna==3.3 +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 # via requests -importlib-metadata==4.11.0 +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/kit.in -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/kit.in
Changed
@@ -11,3 +11,9 @@ cibuildwheel setuptools wheel + +# Build has a windows-only dependency on colorama: +# https://github.com/pypa/build/blob/main/setup.cfg#L32 +# colorama;os_name == "nt" +# We copy it here so it can get pinned. +colorama
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/kit.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/kit.pip
Changed
@@ -4,49 +4,95 @@ # # make upgrade # -auditwheel==5.1.2 +auditwheel==5.1.2 \ + --hash=sha256:3ee5830014931ea84af5cd065c637b6614efa03d9b88bd8fbfc924e7ed01d6ba \ + --hash=sha256:4d06aea3ab59a2b8aa733798ac221556a3f5c021fddc42e5de5bcef20201c031 # via -r requirements/kit.in -bashlex==0.16 +bashlex==0.16 \ + --hash=sha256:dc6f017e49ce2d0fe30ad9f5206da9cd13ded073d365688c9fda525354e8c373 \ + --hash=sha256:ff89fc743ccdef978792784d74d698a9236a862939bb4af471c0c3faf92c21bb # via cibuildwheel -bracex==2.2.1 +bracex==2.3.post1 \ + --hash=sha256:351b7f20d56fb9ea91f9b9e9e7664db466eb234188c175fd943f8f755c807e73 \ + --hash=sha256:e7b23fc8b2cd06d3dec0692baabecb249dda94e06a617901ff03a6c56fd71693 # via cibuildwheel -build==0.7.0 +build==0.8.0 \ + --hash=sha256:19b0ed489f92ace6947698c3ca8436cb0556a66e2aa2d34cd70e2a5d27cd0437 \ + --hash=sha256:887a6d471c901b1a6e6574ebaeeebb45e5269a79d095fe9a8f88d6614ed2e5f0 # via -r requirements/kit.in -certifi==2021.10.8 - # via cibuildwheel -cibuildwheel==2.3.1 +certifi==2022.5.18.1 \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a + # via + # -c requirements/pins.pip + # cibuildwheel +cibuildwheel==2.10.2 \ + --hash=sha256:63ff185b4bc1ec62a87309411cc4bc297e6cfab051a3953ab1c7f0d6394b8da3 \ + --hash=sha256:d333005672c58f86b54c944983b495a91138f30cdbcaee47699ad9a29abc345d # via -r requirements/kit.in -importlib-metadata==4.11.0 +colorama==0.4.5 \ + --hash=sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da \ + --hash=sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4 + # via -r requirements/kit.in +filelock==3.8.0 \ + --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ + --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 + # via cibuildwheel +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 # via # auditwheel # build # pep517 -packaging==21.3 +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 # via # build # cibuildwheel -pep517==0.12.0 +pep517==0.13.0 \ + --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ + --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 # via build -pyelftools==0.28 +platformdirs==2.5.2 \ + --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ + --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 + # via cibuildwheel +pyelftools==0.29 \ + --hash=sha256:519f38cf412f073b2d7393aa4682b0190fa901f7c3fa0bff2b82d537690c7fc1 \ + --hash=sha256:ec761596aafa16e282a31de188737e5485552469ac63b60cfcccf22263fd24ff # via auditwheel -pyparsing==3.0.7 +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc # via packaging -tomli==2.0.1 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via # build # cibuildwheel # pep517 -typing-extensions==4.0.1 +typing-extensions==4.3.0 \ + --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ + --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 # via # cibuildwheel # importlib-metadata -wheel==0.37.1 +wheel==0.37.1 \ + --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ + --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 # via -r requirements/kit.in -zipp==3.7.0 +zipp==3.8.1 \ + --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ + --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 # via # importlib-metadata # pep517 # The following packages are considered to be unsafe in a requirements file: -setuptools==60.8.2 +setuptools==65.4.0 \ + --hash=sha256:a8f6e213b4b0661f590ccf40de95d28a177cd747d098624ad3f69c40287297e9 \ + --hash=sha256:c2d2709550f15aab6c9110196ea312f468f41cd546bceb24127a1be6fdcaeeb1 # via -r requirements/kit.in
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/light-threads.in -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/light-threads.in
Changed
@@ -3,8 +3,11 @@ -c pins.pip -# The light-threads packages we test against +# The light-threads packages we test against. eventlet gevent greenlet + +# gevent needs cffi, but only on Windows, not sure why. +cffi>=1.12.2
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/light-threads.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/light-threads.pip
Changed
@@ -4,24 +4,242 @@ # # make upgrade # -dnspython==2.2.0 +cffi==1.15.1 \ + --hash=sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5 \ + --hash=sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef \ + --hash=sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104 \ + --hash=sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426 \ + --hash=sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405 \ + --hash=sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375 \ + --hash=sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a \ + --hash=sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e \ + --hash=sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc \ + --hash=sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf \ + --hash=sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185 \ + --hash=sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497 \ + --hash=sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3 \ + --hash=sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35 \ + --hash=sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c \ + --hash=sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83 \ + --hash=sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21 \ + --hash=sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca \ + --hash=sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984 \ + --hash=sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac \ + --hash=sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd \ + --hash=sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee \ + --hash=sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a \ + --hash=sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2 \ + --hash=sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192 \ + --hash=sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7 \ + --hash=sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585 \ + --hash=sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f \ + --hash=sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e \ + --hash=sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27 \ + --hash=sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b \ + --hash=sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e \ + --hash=sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e \ + --hash=sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d \ + --hash=sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c \ + --hash=sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415 \ + --hash=sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82 \ + --hash=sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02 \ + --hash=sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314 \ + --hash=sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325 \ + --hash=sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c \ + --hash=sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3 \ + --hash=sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914 \ + --hash=sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045 \ + --hash=sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d \ + --hash=sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9 \ + --hash=sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5 \ + --hash=sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2 \ + --hash=sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c \ + --hash=sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3 \ + --hash=sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2 \ + --hash=sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8 \ + --hash=sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d \ + --hash=sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d \ + --hash=sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9 \ + --hash=sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162 \ + --hash=sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76 \ + --hash=sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4 \ + --hash=sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e \ + --hash=sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9 \ + --hash=sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6 \ + --hash=sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b \ + --hash=sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01 \ + --hash=sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0 + # via -r requirements/light-threads.in +dnspython==2.2.1 \ + --hash=sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e \ + --hash=sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f # via eventlet -eventlet==0.33.0 +eventlet==0.33.1 \ + --hash=sha256:a085922698e5029f820cf311a648ac324d73cec0e4792877609d978a4b5bbf31 \ + --hash=sha256:afbe17f06a58491e9aebd7a4a03e70b0b63fd4cf76d8307bae07f280479b1515 # via -r requirements/light-threads.in -gevent==21.12.0 +gevent==21.12.0 \ + --hash=sha256:0082d8a5d23c35812ce0e716a91ede597f6dd2c5ff508a02a998f73598c59397 \ + --hash=sha256:01928770972181ad8866ee37ea3504f1824587b188fcab782ef1619ce7538766 \ + --hash=sha256:05c5e8a50cd6868dd36536c92fb4468d18090e801bd63611593c0717bab63692 \ + --hash=sha256:08b4c17064e28f4eb85604486abc89f442c7407d2aed249cf54544ce5c9baee6 \ + --hash=sha256:177f93a3a90f46a5009e0841fef561601e5c637ba4332ab8572edd96af650101 \ + --hash=sha256:22ce1f38fdfe2149ffe8ec2131ca45281791c1e464db34b3b4321ae9d8d2efbb \ + --hash=sha256:24d3550fbaeef5fddd794819c2853bca45a86c3d64a056a2c268d981518220d1 \ + --hash=sha256:2afa3f3ad528155433f6ac8bd64fa5cc303855b97004416ec719a6b1ca179481 \ + --hash=sha256:2bcec9f80196c751fdcf389ca9f7141e7b0db960d8465ed79be5e685bfcad682 \ + --hash=sha256:2cfff82f05f14b7f5d9ed53ccb7a609ae8604df522bb05c971bca78ec9d8b2b9 \ + --hash=sha256:3baeeccc4791ba3f8db27179dff11855a8f9210ddd754f6c9b48e0d2561c2aea \ + --hash=sha256:3c012c73e6c61f13c75e3a4869dbe6a2ffa025f103421a6de9c85e627e7477b1 \ + --hash=sha256:3dad62f55fad839d498c801e139481348991cee6e1c7706041b5fe096cb6a279 \ + --hash=sha256:542ae891e2aa217d2cf6d8446538fcd2f3263a40eec123b970b899bac391c47a \ + --hash=sha256:6a02a88723ed3f0fd92cbf1df3c4cd2fbd87d82b0a4bac3e36a8875923115214 \ + --hash=sha256:74fc1ef16b86616cfddcc74f7292642b0f72dde4dd95aebf4c45bb236744be54 \ + --hash=sha256:7909780f0cf18a1fc32aafd8c8e130cdd93c6e285b11263f7f2d1a0f3678bc50 \ + --hash=sha256:7ccffcf708094564e442ac6fde46f0ae9e40015cb69d995f4b39cc29a7643881 \ + --hash=sha256:8c21cb5c9f4e14d75b3fe0b143ec875d7dbd1495fad6d49704b00e57e781ee0f \ + --hash=sha256:973749bacb7bc4f4181a8fb2a7e0e2ff44038de56d08e856dd54a5ac1d7331b4 \ + --hash=sha256:9d86438ede1cbe0fde6ef4cc3f72bf2f1ecc9630d8b633ff344a3aeeca272cdd \ + --hash=sha256:9f9652d1e4062d4b5b5a0a49ff679fa890430b5f76969d35dccb2df114c55e0f \ + --hash=sha256:a5ad4ed8afa0a71e1927623589f06a9b5e8b5e77810be3125cb4d93050d3fd1f \ + --hash=sha256:b7709c64afa8bb3000c28bb91ec42c79594a7cb0f322e20427d57f9762366a5b \ + --hash=sha256:bb5cb8db753469c7a9a0b8a972d2660fe851aa06eee699a1ca42988afb0aaa02 \ + --hash=sha256:c43f081cbca41d27fd8fef9c6a32cf83cb979345b20abc07bf68df165cdadb24 \ + --hash=sha256:cc2fef0f98ee180704cf95ec84f2bc2d86c6c3711bb6b6740d74e0afe708b62c \ + --hash=sha256:da8d2d51a49b2a5beb02ad619ca9ddbef806ef4870ba04e5ac7b8b41a5b61db3 \ + --hash=sha256:e1899b921219fc8959ff9afb94dae36be82e0769ed13d330a393594d478a0b3a \ + --hash=sha256:eae3c46f9484eaacd67ffcdf4eaf6ca830f587edd543613b0f5c4eb3c11d052d \ + --hash=sha256:ec21f9eaaa6a7b1e62da786132d6788675b314f25f98d9541f1bf00584ed4749 \ + --hash=sha256:f289fae643a3f1c3b909d6b033e6921b05234a4907e9c9c8c3f1fe403e6ac452 \ + --hash=sha256:f48b64578c367b91fa793bf8eaaaf4995cb93c8bc45860e473bf868070ad094e # via -r requirements/light-threads.in -greenlet==1.1.2 +greenlet==1.1.3 \ + --hash=sha256:0118817c9341ef2b0f75f5af79ac377e4da6ff637e5ee4ac91802c0e379dadb4 \ + --hash=sha256:048d2bed76c2aa6de7af500ae0ea51dd2267aec0e0f2a436981159053d0bc7cc \ + --hash=sha256:07c58e169bbe1e87b8bbf15a5c1b779a7616df9fd3e61cadc9d691740015b4f8 \ + --hash=sha256:095a980288fe05adf3d002fbb180c99bdcf0f930e220aa66fcd56e7914a38202 \ + --hash=sha256:0b181e9aa6cb2f5ec0cacc8cee6e5a3093416c841ba32c185c30c160487f0380 \ + --hash=sha256:1626185d938d7381631e48e6f7713e8d4b964be246073e1a1d15c2f061ac9f08 \ + --hash=sha256:184416e481295832350a4bf731ba619a92f5689bf5d0fa4341e98b98b1265bd7 \ + --hash=sha256:1dd51d2650e70c6c4af37f454737bf4a11e568945b27f74b471e8e2a9fd21268 \ + --hash=sha256:1ec2779774d8e42ed0440cf8bc55540175187e8e934f2be25199bf4ed948cd9e \ + --hash=sha256:2cf45e339cabea16c07586306a31cfcc5a3b5e1626d365714d283732afed6809 \ + --hash=sha256:2fb0aa7f6996879551fd67461d5d3ab0c3c0245da98be90c89fcb7a18d437403 \ + --hash=sha256:44b4817c34c9272c65550b788913620f1fdc80362b209bc9d7dd2f40d8793080 \ + --hash=sha256:466ce0928e33421ee84ae04c4ac6f253a3a3e6b8d600a79bd43fd4403e0a7a76 \ + --hash=sha256:4f166b4aca8d7d489e82d74627a7069ab34211ef5ebb57c300ec4b9337b60fc0 \ + --hash=sha256:510c3b15587afce9800198b4b142202b323bf4b4b5f9d6c79cb9a35e5e3c30d2 \ + --hash=sha256:5b756e6730ea59b2745072e28ad27f4c837084688e6a6b3633c8b1e509e6ae0e \ + --hash=sha256:5fbe1ab72b998ca77ceabbae63a9b2e2dc2d963f4299b9b278252ddba142d3f1 \ + --hash=sha256:6200a11f003ec26815f7e3d2ded01b43a3810be3528dd760d2f1fa777490c3cd \ + --hash=sha256:65ad1a7a463a2a6f863661329a944a5802c7129f7ad33583dcc11069c17e622c \ + --hash=sha256:694ffa7144fa5cc526c8f4512665003a39fa09ef00d19bbca5c8d3406db72fbe \ + --hash=sha256:6f5d4b2280ceea76c55c893827961ed0a6eadd5a584a7c4e6e6dd7bc10dfdd96 \ + --hash=sha256:7532a46505470be30cbf1dbadb20379fb481244f1ca54207d7df3bf0bbab6a20 \ + --hash=sha256:76a53bfa10b367ee734b95988bd82a9a5f0038a25030f9f23bbbc005010ca600 \ + --hash=sha256:77e41db75f9958f2083e03e9dd39da12247b3430c92267df3af77c83d8ff9eed \ + --hash=sha256:7a43bbfa9b6cfdfaeefbd91038dde65ea2c421dc387ed171613df340650874f2 \ + --hash=sha256:7b41d19c0cfe5c259fe6c539fd75051cd39a5d33d05482f885faf43f7f5e7d26 \ + --hash=sha256:7c5227963409551ae4a6938beb70d56bf1918c554a287d3da6853526212fbe0a \ + --hash=sha256:870a48007872d12e95a996fca3c03a64290d3ea2e61076aa35d3b253cf34cd32 \ + --hash=sha256:88b04e12c9b041a1e0bcb886fec709c488192638a9a7a3677513ac6ba81d8e79 \ + --hash=sha256:8c287ae7ac921dfde88b1c125bd9590b7ec3c900c2d3db5197f1286e144e712b \ + --hash=sha256:903fa5716b8fbb21019268b44f73f3748c41d1a30d71b4a49c84b642c2fed5fa \ + --hash=sha256:9537e4baf0db67f382eb29255a03154fcd4984638303ff9baaa738b10371fa57 \ + --hash=sha256:9951dcbd37850da32b2cb6e391f621c1ee456191c6ae5528af4a34afe357c30e \ + --hash=sha256:9b2f7d0408ddeb8ea1fd43d3db79a8cefaccadd2a812f021333b338ed6b10aba \ + --hash=sha256:9c88e134d51d5e82315a7c32b914a58751b7353eb5268dbd02eabf020b4c4700 \ + --hash=sha256:9fae214f6c43cd47f7bef98c56919b9222481e833be2915f6857a1e9e8a15318 \ + --hash=sha256:a3a669f11289a8995d24fbfc0e63f8289dd03c9aaa0cc8f1eab31d18ca61a382 \ + --hash=sha256:aa741c1a8a8cc25eb3a3a01a62bdb5095a773d8c6a86470bde7f607a447e7905 \ + --hash=sha256:b0877a9a2129a2c56a2eae2da016743db7d9d6a05d5e1c198f1b7808c602a30e \ + --hash=sha256:bcb6c6dd1d6be6d38d6db283747d07fda089ff8c559a835236560a4410340455 \ + --hash=sha256:caff52cb5cd7626872d9696aee5b794abe172804beb7db52eed1fd5824b63910 \ + --hash=sha256:cbc1eb55342cbac8f7ec159088d54e2cfdd5ddf61c87b8bbe682d113789331b2 \ + --hash=sha256:cd16a89efe3a003029c87ff19e9fba635864e064da646bc749fc1908a4af18f3 \ + --hash=sha256:ce5b64dfe8d0cca407d88b0ee619d80d4215a2612c1af8c98a92180e7109f4b5 \ + --hash=sha256:d58a5a71c4c37354f9e0c24c9c8321f0185f6945ef027460b809f4bb474bfe41 \ + --hash=sha256:db41f3845eb579b544c962864cce2c2a0257fe30f0f1e18e51b1e8cbb4e0ac6d \ + --hash=sha256:db5b25265010a1b3dca6a174a443a0ed4c4ab12d5e2883a11c97d6e6d59b12f9 \ + --hash=sha256:dd0404d154084a371e6d2bafc787201612a1359c2dee688ae334f9118aa0bf47 \ + --hash=sha256:de431765bd5fe62119e0bc6bc6e7b17ac53017ae1782acf88fcf6b7eae475a49 \ + --hash=sha256:df02fdec0c533301497acb0bc0f27f479a3a63dcdc3a099ae33a902857f07477 \ + --hash=sha256:e8533f5111704d75de3139bf0b8136d3a6c1642c55c067866fa0a51c2155ee33 \ + --hash=sha256:f2f908239b7098799b8845e5936c2ccb91d8c2323be02e82f8dcb4a80dcf4a25 \ + --hash=sha256:f8bfd36f368efe0ab2a6aa3db7f14598aac454b06849fb633b762ddbede1db90 \ + --hash=sha256:ffe73f9e7aea404722058405ff24041e59d31ca23d1da0895af48050a07b6932 # via # -r requirements/light-threads.in # eventlet # gevent -six==1.16.0 +pycparser==2.21 \ + --hash=sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9 \ + --hash=sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206 + # via cffi +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via eventlet -zope-event==4.5.0 +zope-event==4.5.0 \ + --hash=sha256:2666401939cdaa5f4e0c08cf7f20c9b21423b95e88f4675b1443973bdb080c42 \ + --hash=sha256:5e76517f5b9b119acf37ca8819781db6c16ea433f7e2062c4afc2b6fbedb1330 # via gevent -zope-interface==5.4.0 +zope-interface==5.4.0 \ + --hash=sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192 \ + --hash=sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702 \ + --hash=sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09 \ + --hash=sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4 \ + --hash=sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a \ + --hash=sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3 \ + --hash=sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf \ + --hash=sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c \
View file
_service:tar_scm:coverage-6.5.0.tar.gz/requirements/lint.pip
Added
@@ -0,0 +1,719 @@ +# +# This file is autogenerated by pip-compile with python 3.7 +# To update, run: +# +# make upgrade +# +alabaster==0.7.12 \ + --hash=sha256:446438bdcca0e05bd45ea2de1668c1d9b032e1a9154c2c259092d77031ddd359 \ + --hash=sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02 + # via sphinx +astroid==2.12.10 \ + --hash=sha256:81f870105d892e73bf535da77a8261aa5bde838fa4ed12bb2f435291a098c581 \ + --hash=sha256:997e0c735df60d4a4caff27080a3afc51f9bdd693d3572a4a0b7090b645c36c5 + # via pylint +atomicwrites==1.4.1 \ + --hash=sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11 + # via -r requirements/pytest.pip +attrs==22.1.0 \ + --hash=sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6 \ + --hash=sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c + # via + # -r requirements/pytest.pip + # hypothesis + # pytest +babel==2.10.3 \ + --hash=sha256:7614553711ee97490f732126dc077f8d0ae084ebc6a96e23db1482afabdb2c51 \ + --hash=sha256:ff56f4892c1c4bf0d814575ea23471c230d544203c7748e8c68f0089478d48eb + # via sphinx +backports-functools-lru-cache==1.6.4 \ + --hash=sha256:d5ed2169378b67d3c545e5600d363a923b09c456dab1593914935a68ad478271 \ + --hash=sha256:dbead04b9daa817909ec64e8d2855fb78feafe0b901d4568758e3a60559d8978 + # via + # -r requirements/pytest.pip + # pycontracts +bleach==5.0.1 \ + --hash=sha256:085f7f33c15bd408dd9b17a4ad77c577db66d76203e5984b1bd59baeee948b2a \ + --hash=sha256:0d03255c47eb9bd2f26aa9bb7f2107732e7e8fe195ca2f64709fcf3b0a4a085c + # via readme-renderer +build==0.8.0 \ + --hash=sha256:19b0ed489f92ace6947698c3ca8436cb0556a66e2aa2d34cd70e2a5d27cd0437 \ + --hash=sha256:887a6d471c901b1a6e6574ebaeeebb45e5269a79d095fe9a8f88d6614ed2e5f0 + # via check-manifest +certifi==2022.5.18.1 \ + --hash=sha256:9c5705e395cd70084351dd8ad5c41e65655e08ce46f2ec9cf6c2c08390f71eb7 \ + --hash=sha256:f1d53542ee8cbedbe2118b5686372fb33c297fcd6379b050cca0ef13a597382a + # via + # -c doc/../requirements/pins.pip + # -c requirements/pins.pip + # requests +charset-normalizer==2.1.1 \ + --hash=sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845 \ + --hash=sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f + # via requests +check-manifest==0.48 \ + --hash=sha256:3b575f1dade7beb3078ef4bf33a94519834457c7281dbc726b15c5466b55c657 \ + --hash=sha256:b1923685f98c1c2468601a1a7bed655db549a25d43c583caded3860ad8308f8c + # via -r requirements/dev.in +cogapp==3.3.0 \ + --hash=sha256:1be95183f70282422d594fa42426be6923070a4bd8335621f6347f3aeee81db0 \ + --hash=sha256:8b5b5f6063d8ee231961c05da010cb27c30876b2279e23ad0eae5f8f09460d50 + # via + # -r doc/requirements.in + # -r requirements/dev.in +colorama==0.4.5 \ + --hash=sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da \ + --hash=sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4 + # via + # -r requirements/pytest.pip + # sphinx-autobuild +commonmark==0.9.1 \ + --hash=sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60 \ + --hash=sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 + # via rich +decorator==5.1.1 \ + --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \ + --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 + # via + # -r requirements/pytest.pip + # pycontracts +dill==0.3.5.1 \ + --hash=sha256:33501d03270bbe410c72639b350e941882a8b0fd55357580fbc873fba0c59302 \ + --hash=sha256:d75e41f3eff1eee599d738e76ba8f4ad98ea229db8b085318aa2b3333a208c86 + # via pylint +distlib==0.3.6 \ + --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ + --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e + # via + # -r requirements/pip.pip + # virtualenv +docutils==0.17.1 \ + --hash=sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125 \ + --hash=sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61 + # via + # readme-renderer + # sphinx + # sphinx-rtd-theme +exceptiongroup==1.0.0rc9 \ + --hash=sha256:2e3c3fc1538a094aab74fad52d6c33fc94de3dfee3ee01f187c0e0c72aec5337 \ + --hash=sha256:9086a4a21ef9b31c72181c77c040a074ba0889ee56a7b289ff0afb0d97655f96 + # via + # -r requirements/pytest.pip + # hypothesis +execnet==1.9.0 \ + --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ + --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 + # via + # -r requirements/pytest.pip + # pytest-xdist +filelock==3.8.0 \ + --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ + --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 + # via + # -r requirements/pip.pip + # tox + # virtualenv +flaky==3.7.0 \ + --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ + --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c + # via -r requirements/pytest.pip +future==0.18.2 \ + --hash=sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d + # via + # -r requirements/pytest.pip + # pycontracts +greenlet==1.1.3 \ + --hash=sha256:0118817c9341ef2b0f75f5af79ac377e4da6ff637e5ee4ac91802c0e379dadb4 \ + --hash=sha256:048d2bed76c2aa6de7af500ae0ea51dd2267aec0e0f2a436981159053d0bc7cc \ + --hash=sha256:07c58e169bbe1e87b8bbf15a5c1b779a7616df9fd3e61cadc9d691740015b4f8 \ + --hash=sha256:095a980288fe05adf3d002fbb180c99bdcf0f930e220aa66fcd56e7914a38202 \ + --hash=sha256:0b181e9aa6cb2f5ec0cacc8cee6e5a3093416c841ba32c185c30c160487f0380 \ + --hash=sha256:1626185d938d7381631e48e6f7713e8d4b964be246073e1a1d15c2f061ac9f08 \ + --hash=sha256:184416e481295832350a4bf731ba619a92f5689bf5d0fa4341e98b98b1265bd7 \ + --hash=sha256:1dd51d2650e70c6c4af37f454737bf4a11e568945b27f74b471e8e2a9fd21268 \ + --hash=sha256:1ec2779774d8e42ed0440cf8bc55540175187e8e934f2be25199bf4ed948cd9e \ + --hash=sha256:2cf45e339cabea16c07586306a31cfcc5a3b5e1626d365714d283732afed6809 \ + --hash=sha256:2fb0aa7f6996879551fd67461d5d3ab0c3c0245da98be90c89fcb7a18d437403 \ + --hash=sha256:44b4817c34c9272c65550b788913620f1fdc80362b209bc9d7dd2f40d8793080 \ + --hash=sha256:466ce0928e33421ee84ae04c4ac6f253a3a3e6b8d600a79bd43fd4403e0a7a76 \ + --hash=sha256:4f166b4aca8d7d489e82d74627a7069ab34211ef5ebb57c300ec4b9337b60fc0 \ + --hash=sha256:510c3b15587afce9800198b4b142202b323bf4b4b5f9d6c79cb9a35e5e3c30d2 \ + --hash=sha256:5b756e6730ea59b2745072e28ad27f4c837084688e6a6b3633c8b1e509e6ae0e \ + --hash=sha256:5fbe1ab72b998ca77ceabbae63a9b2e2dc2d963f4299b9b278252ddba142d3f1 \ + --hash=sha256:6200a11f003ec26815f7e3d2ded01b43a3810be3528dd760d2f1fa777490c3cd \ + --hash=sha256:65ad1a7a463a2a6f863661329a944a5802c7129f7ad33583dcc11069c17e622c \ + --hash=sha256:694ffa7144fa5cc526c8f4512665003a39fa09ef00d19bbca5c8d3406db72fbe \ + --hash=sha256:6f5d4b2280ceea76c55c893827961ed0a6eadd5a584a7c4e6e6dd7bc10dfdd96 \ + --hash=sha256:7532a46505470be30cbf1dbadb20379fb481244f1ca54207d7df3bf0bbab6a20 \ + --hash=sha256:76a53bfa10b367ee734b95988bd82a9a5f0038a25030f9f23bbbc005010ca600 \ + --hash=sha256:77e41db75f9958f2083e03e9dd39da12247b3430c92267df3af77c83d8ff9eed \ + --hash=sha256:7a43bbfa9b6cfdfaeefbd91038dde65ea2c421dc387ed171613df340650874f2 \ + --hash=sha256:7b41d19c0cfe5c259fe6c539fd75051cd39a5d33d05482f885faf43f7f5e7d26 \ + --hash=sha256:7c5227963409551ae4a6938beb70d56bf1918c554a287d3da6853526212fbe0a \ + --hash=sha256:870a48007872d12e95a996fca3c03a64290d3ea2e61076aa35d3b253cf34cd32 \ + --hash=sha256:88b04e12c9b041a1e0bcb886fec709c488192638a9a7a3677513ac6ba81d8e79 \ + --hash=sha256:8c287ae7ac921dfde88b1c125bd9590b7ec3c900c2d3db5197f1286e144e712b \ + --hash=sha256:903fa5716b8fbb21019268b44f73f3748c41d1a30d71b4a49c84b642c2fed5fa \ + --hash=sha256:9537e4baf0db67f382eb29255a03154fcd4984638303ff9baaa738b10371fa57 \ + --hash=sha256:9951dcbd37850da32b2cb6e391f621c1ee456191c6ae5528af4a34afe357c30e \ + --hash=sha256:9b2f7d0408ddeb8ea1fd43d3db79a8cefaccadd2a812f021333b338ed6b10aba \ + --hash=sha256:9c88e134d51d5e82315a7c32b914a58751b7353eb5268dbd02eabf020b4c4700 \ + --hash=sha256:9fae214f6c43cd47f7bef98c56919b9222481e833be2915f6857a1e9e8a15318 \ + --hash=sha256:a3a669f11289a8995d24fbfc0e63f8289dd03c9aaa0cc8f1eab31d18ca61a382 \ + --hash=sha256:aa741c1a8a8cc25eb3a3a01a62bdb5095a773d8c6a86470bde7f607a447e7905 \ + --hash=sha256:b0877a9a2129a2c56a2eae2da016743db7d9d6a05d5e1c198f1b7808c602a30e \ + --hash=sha256:bcb6c6dd1d6be6d38d6db283747d07fda089ff8c559a835236560a4410340455 \ + --hash=sha256:caff52cb5cd7626872d9696aee5b794abe172804beb7db52eed1fd5824b63910 \ + --hash=sha256:cbc1eb55342cbac8f7ec159088d54e2cfdd5ddf61c87b8bbe682d113789331b2 \ + --hash=sha256:cd16a89efe3a003029c87ff19e9fba635864e064da646bc749fc1908a4af18f3 \ + --hash=sha256:ce5b64dfe8d0cca407d88b0ee619d80d4215a2612c1af8c98a92180e7109f4b5 \ + --hash=sha256:d58a5a71c4c37354f9e0c24c9c8321f0185f6945ef027460b809f4bb474bfe41 \ + --hash=sha256:db41f3845eb579b544c962864cce2c2a0257fe30f0f1e18e51b1e8cbb4e0ac6d \ + --hash=sha256:db5b25265010a1b3dca6a174a443a0ed4c4ab12d5e2883a11c97d6e6d59b12f9 \ + --hash=sha256:dd0404d154084a371e6d2bafc787201612a1359c2dee688ae334f9118aa0bf47 \ + --hash=sha256:de431765bd5fe62119e0bc6bc6e7b17ac53017ae1782acf88fcf6b7eae475a49 \ + --hash=sha256:df02fdec0c533301497acb0bc0f27f479a3a63dcdc3a099ae33a902857f07477 \ + --hash=sha256:e8533f5111704d75de3139bf0b8136d3a6c1642c55c067866fa0a51c2155ee33 \ + --hash=sha256:f2f908239b7098799b8845e5936c2ccb91d8c2323be02e82f8dcb4a80dcf4a25 \ + --hash=sha256:f8bfd36f368efe0ab2a6aa3db7f14598aac454b06849fb633b762ddbede1db90 \ + --hash=sha256:ffe73f9e7aea404722058405ff24041e59d31ca23d1da0895af48050a07b6932 + # via -r requirements/dev.in +hypothesis==6.54.6 \ + --hash=sha256:2d5e2d5ccd0efce4e0968a6164f4e4853f808e33f4d91490c975c98beec0c7c3 \ + --hash=sha256:e44833325f9a55f795596ceefd7ede7d626cfe45836025d2647cccaff7070e10 + # via -r requirements/pytest.pip +idna==3.4 \ + --hash=sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4 \ + --hash=sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2 + # via requests +imagesize==1.4.1 \ + --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ + --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a + # via sphinx +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 + # via + # -r requirements/pip.pip + # -r requirements/pytest.pip + # build
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/pins.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/pins.pip
Changed
@@ -3,7 +3,14 @@ # Version pins, for use as a constraints file. -# Sphinx pinned to 0.16, then readme-renderer pulled in a newer version, so pin -# this globally. -# Sphinx pin: https://github.com/sphinx-doc/sphinx/blob/master/setup.py#L25 -docutils==0.16 +# docutils has been going through some turmoil. Different packages require it, +# but have different pins. This seems to satisfy them all: +#docutils>=0.17,<0.18 + +# https://github.com/jazzband/pip-tools/issues/1617 +pip<22.1 + +# requests gets different versions in dev.pip and doc/requirements.pip, not +# sure why, and they then ask for different versions of certifi, and we can't +# install, so pin certifi. +certifi==2022.5.18.1
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/pip-tools.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/pip-tools.pip
Changed
@@ -4,29 +4,66 @@ # # make upgrade # -click==8.0.3 +build==0.8.0 \ + --hash=sha256:19b0ed489f92ace6947698c3ca8436cb0556a66e2aa2d34cd70e2a5d27cd0437 \ + --hash=sha256:887a6d471c901b1a6e6574ebaeeebb45e5269a79d095fe9a8f88d6614ed2e5f0 # via pip-tools -importlib-metadata==4.11.0 +click==8.1.3 \ + --hash=sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e \ + --hash=sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48 + # via pip-tools +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 # via + # build # click # pep517 -pep517==0.12.0 - # via pip-tools -pip-tools==6.5.1 +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 + # via build +pep517==0.13.0 \ + --hash=sha256:4ba4446d80aed5b5eac6509ade100bff3e7943a8489de249654a5ae9b33ee35b \ + --hash=sha256:ae69927c5c172be1add9203726d4b84cf3ebad1edcd5f71fcdc746e66e829f59 + # via build +pip-tools==6.8.0 \ + --hash=sha256:39e8aee465446e02278d80dbebd4325d1dd8633248f43213c73a25f58e7d8a55 \ + --hash=sha256:3e5cd4acbf383d19bdfdeab04738b6313ebf4ad22ce49bf529c729061eabfab8 # via -r requirements/pip-tools.in -tomli==2.0.1 - # via pep517 -typing-extensions==4.0.1 +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc + # via packaging +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f + # via + # build + # pep517 +typing-extensions==4.3.0 \ + --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ + --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 # via importlib-metadata -wheel==0.37.1 +wheel==0.37.1 \ + --hash=sha256:4bdcd7d840138086126cd09254dc6195fb4fc6f01c050a1d7236f2630db1d22a \ + --hash=sha256:e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4 # via pip-tools -zipp==3.7.0 +zipp==3.8.1 \ + --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ + --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 # via # importlib-metadata # pep517 # The following packages are considered to be unsafe in a requirements file: -pip==22.0.3 - # via pip-tools -setuptools==60.8.2 +pip==22.0.4 \ + --hash=sha256:b3a9de2c6ef801e9247d1527a4b16f92f2cc141cd1489f3fffaf6a9e96729764 \ + --hash=sha256:c6aca0f2f081363f689f041d90dab2a07a9a07fb840284db2218117a52da800b + # via + # -c requirements/pins.pip + # pip-tools +setuptools==65.4.0 \ + --hash=sha256:a8f6e213b4b0661f590ccf40de95d28a177cd747d098624ad3f69c40287297e9 \ + --hash=sha256:c2d2709550f15aab6c9110196ea312f468f41cd546bceb24127a1be6fdcaeeb1 # via pip-tools
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/pip.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/pip.pip
Changed
@@ -4,23 +4,39 @@ # # make upgrade # -distlib==0.3.4 +distlib==0.3.6 \ + --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ + --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv -filelock==3.4.2 +filelock==3.8.0 \ + --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ + --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 # via virtualenv -importlib-metadata==4.11.0 +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 # via virtualenv -platformdirs==2.5.0 +platformdirs==2.5.2 \ + --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ + --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 # via virtualenv -six==1.16.0 - # via virtualenv -typing-extensions==4.0.1 +typing-extensions==4.3.0 \ + --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ + --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 # via importlib-metadata -virtualenv==20.13.1 +virtualenv==20.16.5 \ + --hash=sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da \ + --hash=sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27 # via -r requirements/pip.in -zipp==3.7.0 +zipp==3.8.1 \ + --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ + --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 # via importlib-metadata # The following packages are considered to be unsafe in a requirements file: -pip==22.0.3 - # via -r requirements/pip.in +pip==22.0.4 \ + --hash=sha256:b3a9de2c6ef801e9247d1527a4b16f92f2cc141cd1489f3fffaf6a9e96729764 \ + --hash=sha256:c6aca0f2f081363f689f041d90dab2a07a9a07fb840284db2218117a52da800b + # via + # -c requirements/pins.pip + # -r requirements/pip.in
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/pytest.in -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/pytest.in
Changed
@@ -12,4 +12,17 @@ pytest-xdist # Use a fork of PyContracts that supports Python 3.9 #PyContracts==1.8.12 -git+https://github.com/slorg1/contracts@collections_and_validator +# git+https://github.com/slorg1/contracts@collections_and_validator +https://github.com/slorg1/contracts/archive/c5a6da27d4dc9985f68e574d20d86000880919c3.zip + +# Pytest has a windows-only dependency on colorama: +# https://github.com/pytest-dev/pytest/blob/main/setup.cfg#L49 +# colorama;sys_platform=="win32" +# We copy it here so it can get pinned. +colorama + +# Pytest has a windows-only dependency on atomicwrites: +# https://github.com/pytest-dev/pytest/blob/7.1.2/setup.cfg#L50 +# atomicwrites>=1.0;sys_platform=="win32" +# though it's been removed on main. +atomicwrites>=1.0
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/pytest.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/pytest.pip
Changed
@@ -4,60 +4,114 @@ # # make upgrade # -attrs==21.4.0 +atomicwrites==1.4.1 \ + --hash=sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11 + # via -r requirements/pytest.in +attrs==22.1.0 \ + --hash=sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6 \ + --hash=sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c # via # hypothesis # pytest -backports-functools-lru-cache==1.6.4 +backports-functools-lru-cache==1.6.4 \ + --hash=sha256:d5ed2169378b67d3c545e5600d363a923b09c456dab1593914935a68ad478271 \ + --hash=sha256:dbead04b9daa817909ec64e8d2855fb78feafe0b901d4568758e3a60559d8978 # via pycontracts -decorator==5.1.1 +colorama==0.4.5 \ + --hash=sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da \ + --hash=sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4 + # via -r requirements/pytest.in +decorator==5.1.1 \ + --hash=sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330 \ + --hash=sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186 # via pycontracts -execnet==1.9.0 +exceptiongroup==1.0.0rc9 \ + --hash=sha256:2e3c3fc1538a094aab74fad52d6c33fc94de3dfee3ee01f187c0e0c72aec5337 \ + --hash=sha256:9086a4a21ef9b31c72181c77c040a074ba0889ee56a7b289ff0afb0d97655f96 + # via hypothesis +execnet==1.9.0 \ + --hash=sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5 \ + --hash=sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142 # via pytest-xdist -flaky==3.7.0 +flaky==3.7.0 \ + --hash=sha256:3ad100780721a1911f57a165809b7ea265a7863305acb66708220820caf8aa0d \ + --hash=sha256:d6eda73cab5ae7364504b7c44670f70abed9e75f77dd116352f662817592ec9c # via -r requirements/pytest.in -future==0.18.2 +future==0.18.2 \ + --hash=sha256:b1bead90b70cf6ec3f0710ae53a525360fa360d306a86583adc6bf83a4db537d # via pycontracts -hypothesis==6.36.1 +hypothesis==6.54.6 \ + --hash=sha256:2d5e2d5ccd0efce4e0968a6164f4e4853f808e33f4d91490c975c98beec0c7c3 \ + --hash=sha256:e44833325f9a55f795596ceefd7ede7d626cfe45836025d2647cccaff7070e10 # via -r requirements/pytest.in -importlib-metadata==4.11.0 +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 # via # pluggy # pytest -iniconfig==1.1.1 +iniconfig==1.1.1 \ + --hash=sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3 \ + --hash=sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32 # via pytest -packaging==21.3 +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 # via pytest -pluggy==1.0.0 +pluggy==1.0.0 \ + --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ + --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via pytest -py==1.11.0 +py==1.11.0 \ + --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ + --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 # via # pytest # pytest-forked -pycontracts @ git+https://github.com/slorg1/contracts@collections_and_validator +pycontracts @ https://github.com/slorg1/contracts/archive/c5a6da27d4dc9985f68e574d20d86000880919c3.zip \ + --hash=sha256:2b889cbfb03b43dc811b5879248ac5c7e209ece78f03be9633de76a6b21a5a89 # via -r requirements/pytest.in -pyparsing==3.0.7 +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc # via # packaging # pycontracts -pytest==7.0.1 +pytest==7.1.3 \ + --hash=sha256:1377bda3466d70b55e3f5cecfa55bb7cfcf219c7964629b967c37cf0bda818b7 \ + --hash=sha256:4f365fec2dff9c1162f834d9f18af1ba13062db0c708bf7b946f8a5c76180c39 # via # -r requirements/pytest.in # pytest-forked # pytest-xdist -pytest-forked==1.4.0 +pytest-forked==1.4.0 \ + --hash=sha256:8b67587c8f98cbbadfdd804539ed5455b6ed03802203485dd2f53c1422d7440e \ + --hash=sha256:bbbb6717efc886b9d64537b41fb1497cfaf3c9601276be8da2cccfea5a3c8ad8 # via pytest-xdist -pytest-xdist==2.5.0 +pytest-xdist==2.5.0 \ + --hash=sha256:4580deca3ff04ddb2ac53eba39d76cb5dd5edeac050cb6fbc768b0dd712b4edf \ + --hash=sha256:6fe5c74fec98906deb8f2d2b616b5c782022744978e7bd4695d39c8f42d0ce65 # via -r requirements/pytest.in -qualname==0.1.0 +qualname==0.1.0 \ + --hash=sha256:277cf6aa4b2ad36beed1153cfa7bf521b210d54fbecb3d8eea0c5679cecc9ed8 # via pycontracts -six==1.16.0 +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 # via pycontracts -sortedcontainers==2.4.0 +sortedcontainers==2.4.0 \ + --hash=sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88 \ + --hash=sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 # via hypothesis -tomli==2.0.1 +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via pytest -typing-extensions==4.0.1 +typing-extensions==4.3.0 \ + --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ + --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 # via importlib-metadata -zipp==3.7.0 +zipp==3.8.1 \ + --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ + --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 # via importlib-metadata
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/tox.in -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/tox.in
Changed
@@ -8,3 +8,9 @@ tox tox-gh-actions + +# Tox has a windows-only dependency on colorama: +# https://github.com/tox-dev/tox/blob/master/setup.cfg#L44 +# colorama>=0.4.1 ;platform_system=="Windows" +# We copy it here so it can get pinned. +colorama>=0.4.1
View file
_service:tar_scm:coverage-6.3.2.tar.gz/requirements/tox.pip -> _service:tar_scm:coverage-6.5.0.tar.gz/requirements/tox.pip
Changed
@@ -4,46 +4,80 @@ # # make upgrade # -distlib==0.3.4 +colorama==0.4.5 \ + --hash=sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da \ + --hash=sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4 + # via -r requirements/tox.in +distlib==0.3.6 \ + --hash=sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46 \ + --hash=sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e # via virtualenv -filelock==3.4.2 +filelock==3.8.0 \ + --hash=sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc \ + --hash=sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4 # via # tox # virtualenv -importlib-metadata==4.11.0 +importlib-metadata==4.12.0 \ + --hash=sha256:637245b8bab2b6502fcbc752cc4b7a6f6243bb02b31c5c26156ad103d3d45670 \ + --hash=sha256:7401a975809ea1fdc658c3aa4f78cc2195a0e019c5cbc4c06122884e9ae80c23 # via # pluggy # tox # virtualenv -importlib-resources==5.4.0 +importlib-resources==5.9.0 \ + --hash=sha256:5481e97fb45af8dcf2f798952625591c58fe599d0735d86b10f54de086a61681 \ + --hash=sha256:f78a8df21a79bcc30cfd400bdc38f314333de7c0fb619763f6b9dabab8268bb7 # via tox-gh-actions -packaging==21.3 +packaging==21.3 \ + --hash=sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb \ + --hash=sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522 # via tox -platformdirs==2.5.0 +platformdirs==2.5.2 \ + --hash=sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788 \ + --hash=sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19 # via virtualenv -pluggy==1.0.0 +pluggy==1.0.0 \ + --hash=sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159 \ + --hash=sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3 # via tox -py==1.11.0 +py==1.11.0 \ + --hash=sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719 \ + --hash=sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 # via tox -pyparsing==3.0.7 +pyparsing==3.0.9 \ + --hash=sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb \ + --hash=sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc # via packaging -six==1.16.0 - # via - # tox - # virtualenv -toml==0.10.2 +six==1.16.0 \ + --hash=sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926 \ + --hash=sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254 + # via tox +tomli==2.0.1 \ + --hash=sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc \ + --hash=sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f # via tox -tox==3.24.5 +tox==3.26.0 \ + --hash=sha256:44f3c347c68c2c68799d7d44f1808f9d396fc8a1a500cbc624253375c7ae107e \ + --hash=sha256:bf037662d7c740d15c9924ba23bb3e587df20598697bb985ac2b49bdc2d847f6 # via # -r requirements/tox.in # tox-gh-actions -tox-gh-actions==2.9.1 +tox-gh-actions==2.10.0 \ + --hash=sha256:4a21e70d799736016cf75c3415f5991008cf81fa6ee1c047d1be24900cec31bb \ + --hash=sha256:acb64641f09022581040d92c28d6c06d261a829c008575892fd458e23e638971 # via -r requirements/tox.in -typing-extensions==4.0.1 +typing-extensions==4.3.0 \ + --hash=sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02 \ + --hash=sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6 # via importlib-metadata -virtualenv==20.13.1 +virtualenv==20.16.5 \ + --hash=sha256:227ea1b9994fdc5ea31977ba3383ef296d7472ea85be9d6732e42a91c04e80da \ + --hash=sha256:d07dfc5df5e4e0dbc92862350ad87a36ed505b978f6c39609dc489eadd5b0d27 # via tox -zipp==3.7.0 +zipp==3.8.1 \ + --hash=sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2 \ + --hash=sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009 # via # importlib-metadata # importlib-resources
View file
_service:tar_scm:coverage-6.3.2.tar.gz/setup.py -> _service:tar_scm:coverage-6.5.0.tar.gz/setup.py
Changed
@@ -12,7 +12,7 @@ # Setuptools has to be imported before distutils, or things break. from setuptools import setup from distutils.core import Extension # pylint: disable=wrong-import-order -from distutils.command.build_ext import build_ext # pylint: disable=wrong-import-order +from setuptools.command.build_ext import build_ext # pylint: disable=wrong-import-order from distutils import errors # pylint: disable=wrong-import-order import distutils.log # pylint: disable=wrong-import-order @@ -108,7 +108,7 @@ extras_require={ # Enable pyproject.toml support. - 'toml': 'tomli', + 'toml': 'tomli; python_full_version<="3.11.0a6"', }, # We need to get HTML assets from our htmlfiles directory.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/conftest.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/conftest.py
Changed
@@ -43,12 +43,18 @@ "ignore", category=DeprecationWarning, message=r".*imp module is deprecated in favour of importlib", - ) + ) + + warnings.filterwarnings( + "ignore", + category=DeprecationWarning, + message=r"module 'sre_constants' is deprecated", + ) warnings.filterwarnings( "ignore", category=pytest.PytestRemovedIn8Warning, - ) + ) if env.PYPY: # pypy3 warns about unclosed files a lot.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/coveragetest.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/coveragetest.py
Changed
@@ -33,6 +33,11 @@ # The coverage/tests directory, for all sorts of finding test helping things. TESTS_DIR = os.path.dirname(__file__) +# Install arguments to pass to pip when reinstalling ourselves. +# Defaults to the top of the source tree, but can be overridden if we need +# some help on certain platforms. +COVERAGE_INSTALL_ARGS = os.getenv("COVERAGE_INSTALL_ARGS", nice_file(TESTS_DIR, "..")) + class CoverageTest( StdStreamCapturingMixin, @@ -415,7 +420,7 @@ def working_root(self): """Where is the root of the coverage.py working tree?""" - return os.path.dirname(nice_file(coverage.__file__, "..")) + return os.path.dirname(nice_file(__file__, "..")) def report_from_command(self, cmd): """Return the report from the `cmd`, with some convenience added."""
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/a/a_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/a/a_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for a.py: 67%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>a.py</b>: <span class="pc_cov">67%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">3 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -66,8 +89,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/a/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/a/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">67%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -73,10 +86,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="a_py.html"/> + <a id="nextFileLink" class="nav" href="a_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/b_branch/b_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/b_branch/b_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for b.py: 70%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,34 +14,46 @@ <span class="text">Coverage for </span><b>b.py</b>: <span class="pc_cov">70%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> <kbd>p</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">17 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">14<span class="text"> run</span></button> @@ -50,12 +61,24 @@ <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">4<span class="text"> partial</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -90,8 +113,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/b_branch/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/b_branch/index.html
Changed
@@ -13,29 +13,42 @@ <h1>Coverage report: <span class="pc_cov">70%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> <kbd>b</kbd> <kbd>p</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -81,10 +94,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="b_py.html"/> + <a id="nextFileLink" class="nav" href="b_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/bom/bom_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/bom/bom_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for bom.py: 71%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>bom.py</b>: <span class="pc_cov">71%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">7 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">5<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">2<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -72,8 +95,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/bom/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/bom/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">71%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -73,10 +86,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="bom_py.html"/> + <a id="nextFileLink" class="nav" href="bom_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/isolatin1/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/isolatin1/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -73,10 +86,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="isolatin1_py.html"/> + <a id="nextFileLink" class="nav" href="isolatin1_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/isolatin1/isolatin1_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/isolatin1/isolatin1_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for isolatin1.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>isolatin1.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -66,8 +89,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_1/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_1/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -94,10 +107,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="main_py.html"/> + <a id="nextFileLink" class="nav" href="m1_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_1/m1_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_1/m1_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m1.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m1.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m2_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m2_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_1/m2_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_1/m2_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m2.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m2.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m1_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m3_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m1_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m3_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_1/m3_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_1/m3_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m3.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m3.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m2_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m2_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_1/main_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_1/main_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for main.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>main.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">8 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -71,8 +94,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_2/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_2/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -87,10 +100,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="main_py.html"/> + <a id="nextFileLink" class="nav" href="m2_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_2/m2_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_2/m2_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m2.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m2.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m3_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m3_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_2/m3_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_2/m3_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m3.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m3.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m2_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m2_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_2/main_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_2/main_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for main.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>main.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">8 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -71,8 +94,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_3/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_3/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 + </p> </div> </header> <main id="index"> @@ -80,10 +93,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="main_py.html"/> + <a id="nextFileLink" class="nav" href="m3_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_3/m3_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_3/m3_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m3.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m3.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_3/main_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_3/main_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for main.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>main.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">8 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -71,8 +94,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_4/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_4/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -87,10 +100,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="main_py.html"/> + <a id="nextFileLink" class="nav" href="m1_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_4/m1_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_4/m1_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m1.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m1.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m3_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="m3_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_4/m3_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_4/m3_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m3.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m3.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m1_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m1_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_4/main_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_4/main_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for main.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>main.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">8 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -71,8 +94,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m3_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_5/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_5/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -80,10 +93,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="main_py.html"/> + <a id="nextFileLink" class="nav" href="m1_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_5/m1_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_5/m1_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for m1.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>m1.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -63,8 +86,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="main_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/omit_5/main_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/omit_5/main_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for main.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>main.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">8 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="m1_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -71,8 +94,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="m1_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/other/blah_blah_other_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/other/blah_blah_other_py.html
Changed
@@ -2,8 +2,7 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> - <title>Coverage for /private/var/folders/10/4sn2sk3j2mg5m116f08_367m0000gq/T/pytest-of-nedbatchelder/pytest-1363/popen-gw2/t48/othersrc/other.py: 100%</title> + <title>Coverage for /private/var/folders/10/4sn2sk3j2mg5m116f08_367m0000gq/T/pytest-of-nedbatchelder/pytest-49/popen-gw0/t75/othersrc/other.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> <script type="text/javascript" src="coverage_html.js" defer></script> @@ -12,48 +11,72 @@ <header> <div class="content"> <h1> - <span class="text">Coverage for </span><b>/private/var/folders/10/4sn2sk3j2mg5m116f08_367m0000gq/T/pytest-of-nedbatchelder/pytest-1363/popen-gw2/t48/othersrc/other.py</b>: + <span class="text">Coverage for </span><b>/private/var/folders/10/4sn2sk3j2mg5m116f08_367m0000gq/T/pytest-of-nedbatchelder/pytest-49/popen-gw0/t75/othersrc/other.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">1 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">1<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="here_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -65,8 +88,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="here_py.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/other/here_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/other/here_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for here.py: 75%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>here.py</b>: <span class="pc_cov">75%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">4 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">3<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="d_5aab476500cf61cb_other_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -67,8 +90,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="d_5aab476500cf61cb_other_py.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/other/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/other/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">80%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -49,7 +62,7 @@ </thead> <tbody> <tr class="file"> - <td class="name left"><a href="d_782ca3c126f2375a_other_py.html">/private/var/folders/10/4sn2sk3j2mg5m116f08_367m0000gq/T/pytest-of-nedbatchelder/pytest-964/popen-gw6/t104/othersrc/other.py</a></td> + <td class="name left"><a href="d_5aab476500cf61cb_other_py.html">/private/var/folders/10/4sn2sk3j2mg5m116f08_367m0000gq/T/pytest-of-nedbatchelder/pytest-49/popen-gw0/t75/othersrc/other.py</a></td> <td>1</td> <td>0</td> <td>0</td> @@ -80,10 +93,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="here_py.html"/> + <a id="nextFileLink" class="nav" href="d_5aab476500cf61cb_other_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/partial/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/partial/index.html
Changed
@@ -13,29 +13,42 @@ <h1>Coverage report: <span class="pc_cov">91%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> <kbd>b</kbd> <kbd>p</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 17:08 -0400 + </p> </div> </header> <main id="index"> @@ -81,10 +94,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 17:08 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="partial_py.html"/> + <a id="nextFileLink" class="nav" href="partial_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/partial/partial_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/partial/partial_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for partial.py: 91%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,34 +14,46 @@ <span class="text">Coverage for </span><b>partial.py</b>: <span class="pc_cov">91%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> <kbd>p</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">7 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">7<span class="text"> run</span></button> @@ -50,12 +61,24 @@ <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">1<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">1<span class="text"> partial</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:32 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -80,8 +103,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:32 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/partial_626/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/partial_626/index.html
Changed
@@ -13,29 +13,42 @@ <h1>Coverage report: <span class="pc_cov">87%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> <kbd>b</kbd> <kbd>p</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -81,10 +94,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 17:18 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="partial_py.html"/> + <a id="nextFileLink" class="nav" href="partial_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/partial_626/partial_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/partial_626/partial_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for partial.py: 87%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,34 +14,46 @@ <span class="text">Coverage for </span><b>partial.py</b>: <span class="pc_cov">87%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> <kbd>p</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">9 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">9<span class="text"> run</span></button> @@ -50,12 +61,24 @@ <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">1<span class="text"> excluded</span></button> <button type="button" class="par run show_par button_toggle_par" value="par" data-shortcut="p" title="Toggle lines partially run">2<span class="text"> partial</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -80,8 +103,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:37 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/styled/a_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/styled/a_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for a.py: 67%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -16,45 +15,69 @@ <span class="text">Coverage for </span><b>a.py</b>: <span class="pc_cov">67%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">3 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -67,8 +90,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/styled/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/styled/index.html
Changed
@@ -14,27 +14,40 @@ <h1>Coverage report: <span class="pc_cov">67%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 + </p> </div> </header> <main id="index"> @@ -74,10 +87,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:29 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="a_py.html"/> + <a id="nextFileLink" class="nav" href="a_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/styled/style.css -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/styled/style.css
Changed
@@ -28,6 +28,8 @@ a.nav:hover { text-decoration: underline; color: inherit; } +.hidden { display: none; } + header { background: #f8f8f8; width: 100%; z-index: 2; border-bottom: 1px solid #ccc; } @media (prefers-color-scheme: dark) { header { background: black; } } @@ -38,6 +40,10 @@ header h2 { margin-top: .5em; font-size: 1em; } +header p.text { margin: .5em 0 -.5em; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { header p.text { color: #aaa; } } + header.sticky { position: fixed; left: 0; right: 0; height: 2.5em; } header.sticky .text { display: none; } @@ -52,9 +58,7 @@ main { position: relative; z-index: 1; } -.indexfile footer { margin: 1rem 3.5rem; } - -.pyfile footer { margin: 1rem 1rem; } +footer { margin: 1rem 3.5rem; } footer .content { padding: 0; color: #666; font-style: italic; } @@ -124,7 +128,9 @@ #help_panel_state { display: none; } -#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; } +#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; color: #333; } + +#help_panel .keyhelp p { margin-top: .75em; } #help_panel .legend { font-style: italic; margin-bottom: 1em; } @@ -134,8 +140,6 @@ #help_panel_state:checked ~ #help_panel { display: block; } -.keyhelp { margin-top: .75em; } - kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; border-radius: 3px; } #source { padding: 1em 0 1em 3.5rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/support/coverage_html.js -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/support/coverage_html.js
Changed
@@ -25,6 +25,13 @@ return !(rect.bottom < viewTop || rect.top >= viewBottom); } +function on_click(sel, fn) { + const elt = document.querySelector(sel); + if (elt) { + elt.addEventListener("click", fn); + } +} + // Helpers for table sorting function getCellValue(row, column = 0) { const cell = row.cellscolumn @@ -193,6 +200,11 @@ direction: th.getAttribute("aria-sort"), })); }); + + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + + on_click(".button_show_hide_help", coverage.show_hide_help); }; // -- pyfile stuff -- @@ -209,12 +221,6 @@ coverage.set_sel(0); } - const on_click = function(sel, fn) { - const elt = document.querySelector(sel); - if (elt) { - elt.addEventListener("click", fn); - } - } on_click(".button_toggle_run", coverage.toggle_lines); on_click(".button_toggle_mis", coverage.toggle_lines); on_click(".button_toggle_exc", coverage.toggle_lines); @@ -225,6 +231,12 @@ on_click(".button_top_of_page", coverage.to_top); on_click(".button_first_chunk", coverage.to_first_chunk); + on_click(".button_prev_file", coverage.to_prev_file); + on_click(".button_next_file", coverage.to_next_file); + on_click(".button_to_index", coverage.to_index); + + on_click(".button_show_hide_help", coverage.show_hide_help); + coverage.filters = undefined; try { coverage.filters = localStorage.getItem(coverage.LINE_FILTERS_STORAGE); @@ -299,6 +311,23 @@ coverage.to_next_chunk(); }; +coverage.to_prev_file = function () { + window.location = document.getElementById("prevFileLink").href; +} + +coverage.to_next_file = function () { + window.location = document.getElementById("nextFileLink").href; +} + +coverage.to_index = function () { + location.href = document.getElementById("indexLink").href; +} + +coverage.show_hide_help = function () { + const helpCheck = document.getElementById("help_panel_state") + helpCheck.checked = !helpCheck.checked; +} + // Return a string indicating what kind of chunk this line belongs to, // or null if not a chunk. coverage.chunk_indicator = function (line_elt) {
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/support/style.css -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/support/style.css
Changed
@@ -28,6 +28,8 @@ a.nav:hover { text-decoration: underline; color: inherit; } +.hidden { display: none; } + header { background: #f8f8f8; width: 100%; z-index: 2; border-bottom: 1px solid #ccc; } @media (prefers-color-scheme: dark) { header { background: black; } } @@ -38,6 +40,10 @@ header h2 { margin-top: .5em; font-size: 1em; } +header p.text { margin: .5em 0 -.5em; color: #666; font-style: italic; } + +@media (prefers-color-scheme: dark) { header p.text { color: #aaa; } } + header.sticky { position: fixed; left: 0; right: 0; height: 2.5em; } header.sticky .text { display: none; } @@ -52,9 +58,7 @@ main { position: relative; z-index: 1; } -.indexfile footer { margin: 1rem 3.5rem; } - -.pyfile footer { margin: 1rem 1rem; } +footer { margin: 1rem 3.5rem; } footer .content { padding: 0; color: #666; font-style: italic; } @@ -124,7 +128,9 @@ #help_panel_state { display: none; } -#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; } +#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; color: #333; } + +#help_panel .keyhelp p { margin-top: .75em; } #help_panel .legend { font-style: italic; margin-bottom: 1em; } @@ -134,8 +140,6 @@ #help_panel_state:checked ~ #help_panel { display: block; } -.keyhelp { margin-top: .75em; } - kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; border-radius: 3px; } #source { padding: 1em 0 1em 3.5rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/unicode/index.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/unicode/index.html
Changed
@@ -13,27 +13,40 @@ <h1>Coverage report: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>n</kbd> <kbd>s</kbd> <kbd>m</kbd> <kbd>x</kbd> - <kbd>c</kbd> change column sorting + <kbd>c</kbd> + change column sorting + </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>?</kbd> show/hide this help </p> </div> </div> - </div> + </aside> <form id="filter_container"> <input id="filter" type="text" value="" placeholder="filter..." /> </form> + <p class="text"> + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 + </p> </div> </header> <main id="index"> @@ -73,10 +86,17 @@ <footer> <div class="content"> <p> - <a class="nav" href="https://coverage.readthedocs.io/en/6.1a0">coverage.py v6.1a0</a>, - created at 2021-10-23 08:16 -0400 + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 </p> </div> + <aside class="hidden"> + <a id="prevFileLink" class="nav" href="unicode_py.html"/> + <a id="nextFileLink" class="nav" href="unicode_py.html"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </footer> </body> </html>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/gold/html/unicode/unicode_py.html -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/gold/html/unicode/unicode_py.html
Changed
@@ -2,7 +2,6 @@ <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> - <meta http-equiv="X-UA-Compatible" content="IE=emulateIE7" /> <title>Coverage for unicode.py: 100%</title> <link rel="icon" sizes="32x32" href="favicon_32.png"> <link rel="stylesheet" href="style.css" type="text/css"> @@ -15,45 +14,69 @@ <span class="text">Coverage for </span><b>unicode.py</b>: <span class="pc_cov">100%</span> </h1> - <div id="help_panel_wrapper"> + <aside id="help_panel_wrapper"> <input id="help_panel_state" type="checkbox"> <label for="help_panel_state"> <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" /> </label> <div id="help_panel"> <p class="legend">Shortcuts on this page</p> - <div> - <p class="keyhelp"> + <div class="keyhelp"> + <p> <kbd>r</kbd> <kbd>m</kbd> <kbd>x</kbd> toggle line displays </p> - <p class="keyhelp"> + <p> <kbd>j</kbd> - <kbd>k</kbd> next/prev highlighted chunk + <kbd>k</kbd> + next/prev highlighted chunk </p> - <p class="keyhelp"> + <p> <kbd>0</kbd> (zero) top of page </p> - <p class="keyhelp"> + <p> <kbd>1</kbd> (one) first highlighted chunk </p> + <p> + <kbd></kbd> + <kbd></kbd> + prev/next file + </p> + <p> + <kbd>u</kbd> up to the index + </p> + <p> + <kbd>?</kbd> show/hide this help + </p> </div> </div> - </div> + </aside> <h2> <span class="text">2 statements </span> <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">2<span class="text"> run</span></button> <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button> <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button> </h2> - <div style="display: none;"> - <button type="button" class="button_next_chunk" data-shortcut="j">Next highlighted chunk</button> - <button type="button" class="button_prev_chunk" data-shortcut="k">Previous highlighted chunk</button> - <button type="button" class="button_top_of_page" data-shortcut="0">Goto top of page</button> - <button type="button" class="button_first_chunk" data-shortcut="1">Goto first highlighted chunk</button> - </div> + <p class="text"> + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 + </p> + <aside class="hidden"> + <button type="button" class="button_next_chunk" data-shortcut="j"/> + <button type="button" class="button_prev_chunk" data-shortcut="k"/> + <button type="button" class="button_top_of_page" data-shortcut="0"/> + <button type="button" class="button_first_chunk" data-shortcut="1"/> + <button type="button" class="button_prev_file" data-shortcut=""/> + <button type="button" class="button_next_file" data-shortcut=""/> + <button type="button" class="button_to_index" data-shortcut="u"/> + <button type="button" class="button_show_hide_help" data-shortcut="?"/> + </aside> </div> </header> <main id="source"> @@ -66,8 +89,12 @@ <footer> <div class="content"> <p> - <a class="nav" href="index.html">« index</a> <a class="nav" href="https://coverage.readthedocs.io/en/6.1.1a0">coverage.py v6.1.1a0</a>, - created at 2021-10-30 16:07 -0400 + <a id="prevFileLink" class="nav" href="index.html">« prev</a> + <a id="indexLink" class="nav" href="index.html">^ index</a> + <a id="nextFileLink" class="nav" href="index.html">» next</a> + + <a class="nav" href="https://coverage.readthedocs.io/en/6.4a0">coverage.py v6.4a0</a>, + created at 2022-05-20 16:28 -0400 </p> </div> </footer>
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/helpers.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/helpers.py
Changed
@@ -5,7 +5,6 @@ import collections import contextlib -import glob import os import os.path import re @@ -16,6 +15,9 @@ from unittest import mock +import pytest + +from coverage import env from coverage.exceptions import CoverageWarning from coverage.misc import output_encoding @@ -45,7 +47,7 @@ stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT - ) + ) output, _ = proc.communicate() status = proc.returncode @@ -135,7 +137,7 @@ """The replacement method. Check that we don't have dupes.""" assert filename not in self.filenames, ( f"File name {filename!r} passed to {self.wrapped!r} twice" - ) + ) self.filenames.add(filename) ret = self.wrapped(filename, *args, **kwargs) return ret @@ -170,12 +172,6 @@ return lines0 -def remove_files(*patterns): - """Remove all files that match any of the patterns.""" - for pattern in patterns: - for fname in glob.glob(pattern): - os.remove(fname) - def remove_tree(dirname): """Remove a directory tree. @@ -320,3 +316,9 @@ with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=category, message=message) yield + + +xfail_pypy_3749 = pytest.mark.xfail( + env.PYVERSION:2 == (3, 8) and env.PYPY and env.PYPYVERSION >= (7, 3, 10), + reason="Avoid a PyPy bug: https://foss.heptapod.net/pypy/pypy/-/issues/3749", +)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/mixins.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/mixins.py
Changed
@@ -15,7 +15,7 @@ import pytest from coverage.misc import SysModuleSaver -from tests.helpers import change_dir, make_file, remove_files, remove_tree +from tests.helpers import change_dir, make_file, remove_tree class PytestBase: @@ -99,10 +99,9 @@ # So that we can re-import files, clean them out first. self._sys_module_saver.restore() - # Also have to clean out the .pyc file, since the timestamp + # Also have to clean out the .pyc files, since the timestamp # resolution is only one second, a changed file might not be # picked up. - remove_files("*.pyc", "*$py.class") remove_tree("__pycache__") importlib.invalidate_caches()
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_annotate.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_annotate.py
Changed
@@ -128,5 +128,5 @@ "2\n" + "The annotate command will be removed in a future version.\n" + "Get in touch if you still use it: ned@nedbatchelder.com\n" - ) + ) compare(gold_path("annotate/mae"), ".", "*,cover")
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_api.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_api.py
Changed
@@ -540,7 +540,7 @@ "Module xyzzy was never imported. (module-not-imported)", "Module quux was never imported. (module-not-imported)", "No data was collected. (no-data-collected)", - ) + ) def test_warnings_suppressed(self): self.make_file("hello.py", """\ @@ -866,7 +866,11 @@ # Since we need to import from there, we also add it to the beginning # of sys.path. - shutil.copytree(nice_file(TESTS_DIR, "modules"), "tests_dir_modules") + shutil.copytree( + nice_file(TESTS_DIR, "modules"), + "tests_dir_modules", + ignore=shutil.ignore_patterns("__pycache__"), + ) sys.path.insert(0, abs_file("tests_dir_modules")) def coverage_usepkgs(self, **kwargs): @@ -1225,7 +1229,7 @@ config_file=".coveragerc", concurrency="multiprocessing", data_suffix=False, - ) + ) cov.start() cov.stop() # The warning isn't the point of this test, but suppress it.
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_arcs.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_arcs.py
Changed
@@ -6,13 +6,20 @@ import pytest from tests.coveragetest import CoverageTest -from tests.helpers import assert_count_equal +from tests.helpers import assert_count_equal, xfail_pypy_3749 import coverage from coverage import env from coverage.files import abs_file +skip_cpython_92236 = pytest.mark.skipif( + env.PYVERSION == (3, 11, 0, "beta", 1, 0), + reason="Avoid a CPython bug: https://github.com/python/cpython/issues/92236", + # #92236 is fixed in https://github.com/python/cpython/pull/92722 + # and in https://github.com/python/cpython/pull/92772 +) + class SimpleArcTest(CoverageTest): """Tests for coverage.py's arc measurement.""" @@ -135,7 +142,7 @@ assert foo() == 3 # 7 """, arcz=".1 17 7. .2 23 36 25 56 6.", arcz_missing="25 56" - ) + ) self.check_coverage("""\ def foo(): if foo: @@ -145,12 +152,14 @@ foo() # 6 """, arcz=".1 16 6. .2 23 3. 25 5.", arcz_missing="25 5." - ) + ) def test_what_is_the_sound_of_no_lines_clapping(self): if env.JYTHON: # Jython reports no lines for an empty file. arcz_missing=".1 1." # pragma: only jython + elif env.PYBEHAVIOR.empty_is_empty: + arcz_missing=".1 1." else: # Other Pythons report one line. arcz_missing="" @@ -176,7 +185,7 @@ """, arcz=".1 19 9-1 .2 23 27 34 47 56 67 7-1 9A A9", arcz_unpredicted="45", - ) + ) class WithTest(CoverageTest): @@ -195,7 +204,7 @@ example() """, arcz=arcz, - ) + ) def test_with_return(self): arcz = ".1 .2 23 34 4. 16 6." @@ -210,7 +219,7 @@ example() """, arcz=arcz, - ) + ) def test_bug_146(self): # https://github.com/nedbat/coveragepy/issues/146 @@ -225,7 +234,7 @@ print(5) """, arcz=arcz, - ) + ) def test_nested_with_return(self): arcz = ".1 .2 23 34 45 56 6. 18 8." @@ -242,7 +251,7 @@ example(8) """, arcz=arcz, - ) + ) def test_break_through_with(self): arcz = ".1 12 23 34 45 15 5." @@ -257,7 +266,7 @@ """, arcz=arcz, arcz_missing="15", - ) + ) def test_continue_through_with(self): arcz = ".1 12 23 34 41 15 5." @@ -271,12 +280,8 @@ print(5) """, arcz=arcz, - ) + ) - @pytest.mark.xfail( - (3, 11) <= env.PYVERSION <= (3, 11, 0, 'alpha', 2, 0), - reason="avoid a 3.11 bug: 45709" - ) # https://github.com/nedbat/coveragepy/issues/1270 def test_raise_through_with(self): if env.PYBEHAVIOR.exit_through_with: @@ -302,7 +307,7 @@ arcz=arcz, arcz_missing=arcz_missing, arcz_unpredicted=arcz_unpredicted, - ) + ) expected = "line 3 didn't jump to the function exit" assert self.get_missing_arc_description(cov, 3, -2) == expected @@ -328,7 +333,7 @@ """, arcz=arcz, arcz_missing=arcz_missing, - ) + ) expected = "line 3 didn't jump to the function exit" assert self.get_missing_arc_description(cov, 3, -2) == expected @@ -428,7 +433,7 @@ assert a == 4 and i == 3 """, arcz=arcz, - ) + ) def test_while_true(self): # With "while True", 2.x thinks it's computation, @@ -492,7 +497,7 @@ break """, arcz=arcz - ) + ) def test_for_if_else_for(self): self.check_coverage("""\ @@ -519,7 +524,7 @@ ".2 23 34 43 26 3. 6. " + "-89 9A 9-8 AB BC CB B9 AE E9", arcz_missing="26 6." - ) + ) def test_for_else(self): self.check_coverage("""\ @@ -534,7 +539,7 @@ forelse(1,6) """, arcz=".1 .2 23 32 34 47 26 67 7. 18 89 9." - ) + ) def test_while_else(self): self.check_coverage("""\ @@ -605,6 +610,7 @@ arcz_missing="26 3. 6.", ) + @skip_cpython_92236 def test_generator_expression(self): # Generator expression: self.check_coverage("""\ @@ -617,6 +623,7 @@ arcz=".1 -22 2-2 12 23 34 45 53 3.", ) + @skip_cpython_92236 def test_generator_expression_another_way(self): # https://bugs.python.org/issue44450 # Generator expression: @@ -1169,6 +1176,7 @@ class YieldTest(CoverageTest): """Arc tests for generators.""" + @skip_cpython_92236 def test_yield_in_loop(self): self.check_coverage("""\ def gen(inp): @@ -1180,6 +1188,7 @@ arcz=".1 .2 23 2. 32 15 5.", ) + @skip_cpython_92236 def test_padded_yield_in_loop(self): self.check_coverage("""\
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_cmdline.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_cmdline.py
Changed
@@ -107,7 +107,7 @@ patchers = mock.patch("coverage.cmdline."+name, getattr(mk, name)) for name in self.MOCK_GLOBALS - + for patcher in patchers: patcher.start() try: @@ -797,7 +797,7 @@ cov.save() """, options=options, - ) + ) def test_run_module_from_config(self): self.cmd_executes("run", """\ @@ -810,7 +810,7 @@ cov.save() """, options={"run:command_line": "-m mymodule thing1 thing2"}, - ) + ) def test_run_from_config_but_empty(self): self.cmd_executes("run", """\ @@ -819,7 +819,7 @@ """, ret=ERR, options={"run:command_line": ""}, - ) + ) def test_run_dashm_only(self): self.cmd_executes("run -m", """\ @@ -827,14 +827,14 @@ show_help('No module specified for -m') """, ret=ERR, - ) + ) self.cmd_executes("run -m", """\ cov = Coverage() show_help('No module specified for -m') """, ret=ERR, options={"run:command_line": "myprog.py"} - ) + ) def test_cant_append_parallel(self): self.command_line("run --append --parallel-mode foo.py", ret=ERR) @@ -1027,6 +1027,12 @@ assert "fooey" in err assert "help" in err + def test_option_error(self): + self.command_line("run --fooey", ret=ERR) + err = self.stderr() + assert "fooey" in err + assert "help" in err + def test_doc_url(self): assert __url__.startswith("https://coverage.readthedocs.io")
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_concurrency.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_concurrency.py
Changed
@@ -492,11 +492,6 @@ last_line = self.squeezed_lines(out)-1 assert re.search(r"TOTAL \d+ 0 100%", last_line) - @pytest.mark.skipif( - ((3, 11, 0, "alpha", 4, 0) == env.PYVERSION), - #((3, 11, 0, "alpha", 4, 0) == env.PYVERSION) and not env.C_TRACER and env.METACOV, - reason="avoid a 3.11 bug: https://bugs.python.org/issue46389", - ) def test_multiprocessing_simple(self, start_method): nprocs = 3 upto = 30 @@ -511,11 +506,6 @@ start_method=start_method, ) - @pytest.mark.skipif( - ((3, 11, 0, "alpha", 4, 0) == env.PYVERSION), - #((3, 11, 0, "alpha", 4, 0) == env.PYVERSION) and not env.C_TRACER and env.METACOV, - reason="avoid a 3.11 bug: https://bugs.python.org/issue46389", - ) def test_multiprocessing_append(self, start_method): nprocs = 3 upto = 30 @@ -706,7 +696,8 @@ class SigtermTest(CoverageTest): """Tests of our handling of SIGTERM.""" - def test_sigterm_saves_data(self): + @pytest.mark.parametrize("sigterm", False, True) + def test_sigterm_saves_data(self, sigterm): # A terminated process should save its coverage data. self.make_file("clobbered.py", """\ import multiprocessing @@ -734,7 +725,8 @@ run parallel = True concurrency = multiprocessing - """) + """ + ("sigterm = true" if sigterm else "") + ) out = self.run_command("coverage run clobbered.py") # Under the Python tracer on Linux, we get the "Trace function changed" # message. Does that matter? @@ -745,7 +737,11 @@ assert out == "START\nNOT THREE\nEND\n" self.run_command("coverage combine") out = self.run_command("coverage report -m") - assert self.squeezed_lines(out)2 == "clobbered.py 17 1 94% 6" + if sigterm: + expected = "clobbered.py 17 1 94% 6" + else: + expected = "clobbered.py 17 5 71% 5-10" + assert self.squeezed_lines(out)2 == expected def test_sigterm_still_runs(self): # A terminated process still runs its own SIGTERM handler. @@ -776,6 +772,7 @@ run parallel = True concurrency = multiprocessing + sigterm = True """) out = self.run_command("coverage run handler.py") assert out == "START\nSIGTERM\nEND\n"
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_config.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_config.py
Changed
@@ -4,6 +4,7 @@ """Test the config file handling for coverage.py""" import math +import sys from collections import OrderedDict from unittest import mock @@ -706,19 +707,21 @@ def test_no_toml_installed_no_toml(self): # Can't read a toml file that doesn't exist. - with without_module(coverage.tomlconfig, 'tomli'): + with without_module(coverage.tomlconfig, 'tomllib'): msg = "Couldn't read 'cov.toml' as a config file" with pytest.raises(ConfigError, match=msg): coverage.Coverage(config_file="cov.toml") + @pytest.mark.skipif(sys.version_info >= (3, 11), reason="Python 3.11 has toml in stdlib") def test_no_toml_installed_explicit_toml(self): # Can't specify a toml config file if toml isn't installed. self.make_file("cov.toml", "# A toml file!") - with without_module(coverage.tomlconfig, 'tomli'): + with without_module(coverage.tomlconfig, 'tomllib'): msg = "Can't read 'cov.toml' without TOML support" with pytest.raises(ConfigError, match=msg): coverage.Coverage(config_file="cov.toml") + @pytest.mark.skipif(sys.version_info >= (3, 11), reason="Python 3.11 has toml in stdlib") def test_no_toml_installed_pyproject_toml(self): # Can't have coverage config in pyproject.toml without toml installed. self.make_file("pyproject.toml", """\ @@ -726,7 +729,7 @@ tool.coverage.run xyzzy = 17 """) - with without_module(coverage.tomlconfig, 'tomli'): + with without_module(coverage.tomlconfig, 'tomllib'): msg = "Can't read 'pyproject.toml' without TOML support" with pytest.raises(ConfigError, match=msg): coverage.Coverage() @@ -738,7 +741,7 @@ tool.something xyzzy = 17 """) - with without_module(coverage.tomlconfig, 'tomli'): + with without_module(coverage.tomlconfig, 'tomllib'): cov = coverage.Coverage() # We get default settings: assert not cov.config.timid
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_coverage.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_coverage.py
Changed
@@ -10,6 +10,7 @@ from coverage.exceptions import NoDataError from tests.coveragetest import CoverageTest +from tests.helpers import xfail_pypy_3749 class TestCoverageTest(CoverageTest): @@ -22,14 +23,14 @@ b = 2 """, 1,2 - ) + ) # You can provide a list of possible statement matches. self.check_coverage("""\ a = 1 b = 2 """, (100, 1,2, 1723,47), - ) + ) # You can specify missing lines. self.check_coverage("""\ a = 1 @@ -38,7 +39,7 @@ """, 1,2,3, missing="3", - ) + ) # You can specify a list of possible missing lines. self.check_coverage("""\ a = 1 @@ -47,7 +48,7 @@ """, 1,2,3, missing=("47-49", "3", "100,102") - ) + ) def test_failed_coverage(self): # If the lines are wrong, the message shows right and wrong. @@ -96,7 +97,7 @@ a = 1 assert a == 99, "This is bad" """ - ) + ) # Other exceptions too. with pytest.raises(ZeroDivisionError, match="division"): self.check_coverage("""\ @@ -104,7 +105,7 @@ assert a == 1, "This is good" a/0 """ - ) + ) class BasicCoverageTest(CoverageTest): @@ -1213,11 +1214,6 @@ """, 1,10,12,13, "") - @pytest.mark.xfail( - (3, 11, 0, "alpha", 3, 0) <= env.PYVERSION < (3, 11, 0, "alpha", 4, 0), - reason="avoid class docstring bug: bpo 46331", - # https://bugs.python.org/issue46331 - ) def test_class_def(self): arcz="-22 2D DE E-2 23 36 6A A-2 -68 8-6 -AB B-A" self.check_coverage("""\ @@ -1256,7 +1252,7 @@ g = 7 """, 1,3,5,7 - ) + ) def test_simple(self): self.check_coverage("""\ @@ -1622,6 +1618,7 @@ class Py24Test(CoverageTest): """Tests of new syntax in Python 2.4.""" + @xfail_pypy_3749 def test_function_decorators(self): lines = 1, 2, 3, 4, 6, 8, 10, 12 if env.PYBEHAVIOR.trace_decorated_def: @@ -1642,6 +1639,7 @@ """, lines, "") + @xfail_pypy_3749 def test_function_decorators_with_args(self): lines = 1, 2, 3, 4, 5, 6, 8, 10, 12 if env.PYBEHAVIOR.trace_decorated_def: @@ -1662,6 +1660,7 @@ """, lines, "") + @xfail_pypy_3749 def test_double_function_decorators(self): lines = 1, 2, 3, 4, 5, 7, 8, 9, 10, 11, 12, 14, 15, 17, 19, 21, 22, 24, 26 if env.PYBEHAVIOR.trace_decorated_def:
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_data.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_data.py
Changed
@@ -67,7 +67,12 @@ lines in our coverage reports. """ assert "debug" not in kwargs - debug = DebugControlString(options="dataio", "dataop", "sql") + options = "dataio", "dataop", "sql" + if kwargs: + # There's no reason kwargs should imply sqldata debugging. + # This is a way to get a mix of debug options across the tests. + options.extend("sqldata") + debug = DebugControlString(options=options) return CoverageData(*args, debug=debug, **kwargs) @@ -113,6 +118,13 @@ def test_empty_data_is_false(self): covdata = DebugCoverageData() assert not covdata + self.assert_doesnt_exist(".coverage") + + def test_empty_data_is_false_when_read(self): + covdata = DebugCoverageData() + covdata.read() + assert not covdata + self.assert_doesnt_exist(".coverage") def test_line_data_is_true(self): covdata = DebugCoverageData() @@ -160,15 +172,17 @@ assert_line_counts(covdata, SUMMARY_3_4) assert_measured_files(covdata, MEASURED_FILES_3_4) - def test_cant_add_arcs_with_lines(self): - covdata = DebugCoverageData() + @pytest.mark.parametrize("klass", CoverageData, DebugCoverageData) + def test_cant_add_arcs_with_lines(self, klass): + covdata = klass() covdata.add_lines(LINES_1) msg = "Can't add branch measurements to existing line data" with pytest.raises(DataError, match=msg): covdata.add_arcs(ARCS_3) - def test_cant_add_lines_with_arcs(self): - covdata = DebugCoverageData() + @pytest.mark.parametrize("klass", CoverageData, DebugCoverageData) + def test_cant_add_lines_with_arcs(self, klass): + covdata = klass() covdata.add_arcs(ARCS_3) msg = "Can't add line measurements to existing branch data" with pytest.raises(DataError, match=msg): @@ -864,6 +878,33 @@ # "no such table: meta" covdata2.add_lines(LINES_1) + @pytest.mark.parametrize( + "dpart, fpart", + + ("", "b-a"), + ("3-1", ""), + ("3-1", "b-a"), + , + ) + def test_combining_with_crazy_filename(self, dpart, fpart): + dirname = f"py{dpart}" + basename = f"{dirname}/.coverage{fpart}" + os.makedirs(dirname) + + covdata1 = CoverageData(basename=basename, suffix="1") + covdata1.add_lines(LINES_1) + covdata1.write() + + covdata2 = CoverageData(basename=basename, suffix="2") + covdata2.add_lines(LINES_2) + covdata2.write() + + covdata3 = CoverageData(basename=basename) + combine_parallel_data(covdata3) + assert_line_counts(covdata3, SUMMARY_1_2) + assert_measured_files(covdata3, MEASURED_FILES_1_2) + self.assert_file_count(glob.escape(basename) + ".*", 0) + class DumpsLoadsTest(CoverageTest): """Tests of CoverageData.dumps and loads.""" @@ -888,6 +929,22 @@ msg = r"Unrecognized serialization: {} \(head of {} bytes\)".format( re.escape(repr(bad_data:40)), len(bad_data), - ) + ) with pytest.raises(DataError, match=msg): covdata.loads(bad_data) + + +class NoDiskTest(CoverageTest): + """Tests of in-memory CoverageData.""" + + run_in_temp_dir = False + + def test_updating(self): + # https://github.com/nedbat/coveragepy/issues/1323 + a = CoverageData(no_disk=True) + a.add_lines({'foo.py': 10, 20, 30}) + assert a.measured_files() == {'foo.py'} + + b = CoverageData(no_disk=True) + b.update(a) + assert b.measured_files() == {'foo.py'}
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_files.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_files.py
Changed
@@ -5,17 +5,16 @@ import os import os.path +from unittest import mock import pytest -from coverage import env -from coverage import files +from coverage import env, files from coverage.exceptions import ConfigError from coverage.files import ( - TreeMatcher, FnmatchMatcher, ModuleMatcher, PathAliases, - find_python_files, abs_file, actual_path, flat_rootname, fnmatches_to_regex, + FnmatchMatcher, ModuleMatcher, PathAliases, TreeMatcher, abs_file, + actual_path, find_python_files, flat_rootname, fnmatches_to_regex, ) - from tests.coveragetest import CoverageTest @@ -67,6 +66,19 @@ assert 'sub/proj1/file1.py' in files.CANONICAL_FILENAME_CACHE assert files.canonical_filename('sub/proj1/file1.py') == self.abs_path('file1.py') + @pytest.mark.parametrize( + "curdir", "sep", + ("/", "/"), + ("X:\\", "\\"), + + ) + def test_relative_dir_for_root(self, curdir, sep): + with mock.patch.object(files.os, 'curdir', new=curdir): + with mock.patch.object(files.os, 'sep', new=sep): + with mock.patch('coverage.files.os.path.normcase', return_value=curdir): + files.set_relative_directory() + assert files.relative_directory() == curdir + @pytest.mark.parametrize("original, flat", ("abc.py", "abc_py"), @@ -170,7 +182,7 @@ files.canonical_filename("sub3/file4.py"), files.canonical_filename("sub4/file5.py"), files.canonical_filename("SUB5/file6.py"), - + tm = TreeMatcher(trees) assert tm.info() == sorted(trees) for filepath, matches in matches_to_try: @@ -277,11 +289,37 @@ self.assert_unchanged(aliases, '/home/foo/srcetc') def test_multiple_patterns(self, rel_yn): - aliases = PathAliases(relative=rel_yn) + # also test the debugfn... + msgs = + aliases = PathAliases(debugfn=msgs.append, relative=rel_yn) aliases.add('/home/*/src', './mysrc') aliases.add('/lib/*/libsrc', './mylib') self.assert_mapped(aliases, '/home/foo/src/a.py', './mysrc/a.py', relative=rel_yn) self.assert_mapped(aliases, '/lib/foo/libsrc/a.py', './mylib/a.py', relative=rel_yn) + if rel_yn: + assert msgs == + "Aliases (relative=True):", + " Rule: '/home/*/src' -> './mysrc/' using regex " + + "'(?:(?s:\\\\\\\\/home\\\\\\\\/.*\\\\\\\\/src\\\\\\\\/))'", + " Rule: '/lib/*/libsrc' -> './mylib/' using regex " + + "'(?:(?s:\\\\\\\\/lib\\\\\\\\/.*\\\\\\\\/libsrc\\\\\\\\/))'", + "Matched path '/home/foo/src/a.py' to rule '/home/*/src' -> './mysrc/', " + + "producing './mysrc/a.py'", + "Matched path '/lib/foo/libsrc/a.py' to rule '/lib/*/libsrc' -> './mylib/', " + + "producing './mylib/a.py'", + + else: + assert msgs == + "Aliases (relative=False):", + " Rule: '/home/*/src' -> './mysrc/' using regex " + + "'(?:(?s:\\\\\\\\/home\\\\\\\\/.*\\\\\\\\/src\\\\\\\\/))'", + " Rule: '/lib/*/libsrc' -> './mylib/' using regex " + + "'(?:(?s:\\\\\\\\/lib\\\\\\\\/.*\\\\\\\\/libsrc\\\\\\\\/))'", + "Matched path '/home/foo/src/a.py' to rule '/home/*/src' -> './mysrc/', " + + f"producing {files.canonical_filename('./mysrc/a.py')!r}", + "Matched path '/lib/foo/libsrc/a.py' to rule '/lib/*/libsrc' -> './mylib/', " + + f"producing {files.canonical_filename('./mylib/a.py')!r}", + @pytest.mark.parametrize("badpat", "/ned/home/*", @@ -418,7 +456,7 @@ "sub/a.py", "sub/b.py", "sub/ssub/__init__.py", "sub/ssub/s.py", "sub/windows.pyw", - ) + ) @pytest.mark.skipif(not env.WINDOWS, reason="Only need to run Windows tests on Windows.")
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_html.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_html.py
Changed
@@ -3,6 +3,7 @@ """Tests that HTML generation is awesome.""" +import collections import datetime import glob import json @@ -52,7 +53,9 @@ self.clean_local_file_imports() cov = coverage.Coverage(**(covargs or {})) self.start_import_stop(cov, "main_file") - return cov.html_report(**(htmlargs or {})) + ret = cov.html_report(**(htmlargs or {})) + self.assert_valid_hrefs() + return ret def get_html_report_content(self, module): """Return the content of the HTML report for `module`.""" @@ -95,6 +98,29 @@ msg=f"Timestamp is wrong: {timestamp}", ) + def assert_valid_hrefs(self): + """Assert that the hrefs in htmlcov/*.html to see the references are valid. + + Doesn't check external links (those with a protocol). + """ + hrefs = collections.defaultdict(set) + for fname in glob.glob("htmlcov/*.html"): + with open(fname) as fhtml: + html = fhtml.read() + for href in re.findall(r""" href='"(^'"*)'"""", html): + if href.startswith("#"): + assert re.search(rf""" id='"{href1:}'"""", html), ( + f"Fragment {href!r} in {fname} has no anchor" + ) + continue + if "://" in href: + continue + hrefshref.add(fname) + for href, sources in hrefs.items(): + assert os.path.exists(f"htmlcov/{href}"), ( + f"These files link to {href!r}, which doesn't exist: {', '.join(sources)}" + ) + class FileWriteTracker: """A fake object to track how `open` is used to write files.""" @@ -363,7 +389,7 @@ assert_coverage_warnings( warns, re.compile(r"Couldn't parse Python file '.*innocuous.py' \(couldnt-parse\)"), - ) + ) self.assert_exists("htmlcov/index.html") # This would be better as a glob, if the HTML layout changes: self.assert_doesnt_exist("htmlcov/innocuous.html") @@ -868,8 +894,8 @@ gold_path("html/other"), "out/other", extra_scrubs= (r'href="d_0-9a-z{16}_', 'href="_TEST_TMPDIR_othersrc_'), - , - ) + , + ) contains( 'out/other/index.html', '<a href="here_py.html">here.py</a>', @@ -1096,7 +1122,7 @@ assert b == (14-4) helper( 16 - ) + ) test_one() x = 20 @@ -1164,3 +1190,21 @@ if label == ld.contexts_label or label in (ld.contexts or ()) assert sorted(expected) == sorted(actual) + + +class HtmlHelpersTest(HtmlTestHelpers, CoverageTest): + """Tests of the helpers in HtmlTestHelpers.""" + + def test_bad_link(self): + # Does assert_valid_hrefs detect links to non-existent files? + self.make_file("htmlcov/index.html", "<a href='nothing.html'>Nothing</a>") + msg = "These files link to 'nothing.html', which doesn't exist: htmlcov.index.html" + with pytest.raises(AssertionError, match=msg): + self.assert_valid_hrefs() + + def test_bad_anchor(self): + # Does assert_valid_hrefs detect fragments that go nowhere? + self.make_file("htmlcov/index.html", "<a href='#nothing'>Nothing</a>") + msg = "Fragment '#nothing' in htmlcov.index.html has no anchor" + with pytest.raises(AssertionError, match=msg): + self.assert_valid_hrefs()
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_json.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_json.py
Changed
@@ -21,6 +21,12 @@ a = {'b': 1} if a.get('a'): b = 1 + elif a.get('b'): + b = 2 + else: + b = 3 + if not a: + b = 4 """) a = self.start_import_stop(cov, "a") output_path = os.path.join(self.temp_dir, "a.json") @@ -43,35 +49,45 @@ }, 'files': { 'a.py': { - 'executed_lines': 1, 2, - 'missing_lines': 3, + 'executed_lines': 1, 2, 4, 5, 8, + 'missing_lines': 3, 7, 9, 'excluded_lines': , + 'executed_branches': + 2, 4, + 4, 5, + 8, -1, + , + 'missing_branches': + 2, 3, + 4, 7, + 8, 9, + , 'summary': { - 'missing_lines': 1, - 'covered_lines': 2, - 'num_statements': 3, - 'num_branches': 2, + 'missing_lines': 3, + 'covered_lines': 5, + 'num_statements': 8, + 'num_branches': 6, 'excluded_lines': 0, - 'num_partial_branches': 1, - 'covered_branches': 1, - 'missing_branches': 1, - 'percent_covered': 60.0, - 'percent_covered_display': '60', - } - } + 'num_partial_branches': 3, + 'covered_branches': 3, + 'missing_branches': 3, + 'percent_covered': 57.142857142857146, + 'percent_covered_display': '57', + }, + }, }, 'totals': { - 'missing_lines': 1, - 'covered_lines': 2, - 'num_statements': 3, - 'num_branches': 2, + 'missing_lines': 3, + 'covered_lines': 5, + 'num_statements': 8, + 'num_branches': 6, 'excluded_lines': 0, - 'num_partial_branches': 1, - 'percent_covered': 60.0, - 'percent_covered_display': '60', - 'covered_branches': 1, - 'missing_branches': 1, - } + 'num_partial_branches': 3, + 'percent_covered': 57.142857142857146, + 'percent_covered_display': '57', + 'covered_branches': 3, + 'missing_branches': 3, + }, } self._assert_expected_json_report(cov, expected_result) @@ -85,27 +101,27 @@ }, 'files': { 'a.py': { - 'executed_lines': 1, 2, - 'missing_lines': 3, + 'executed_lines': 1, 2, 4, 5, 8, + 'missing_lines': 3, 7, 9, 'excluded_lines': , 'summary': { 'excluded_lines': 0, - 'missing_lines': 1, - 'covered_lines': 2, - 'num_statements': 3, - 'percent_covered': 66.66666666666667, - 'percent_covered_display': '67', - } - } + 'missing_lines': 3, + 'covered_lines': 5, + 'num_statements': 8, + 'percent_covered': 62.5, + 'percent_covered_display': '62', + }, + }, }, 'totals': { 'excluded_lines': 0, - 'missing_lines': 1, - 'covered_lines': 2, - 'num_statements': 3, - 'percent_covered': 66.66666666666667, - 'percent_covered_display': '67', - } + 'missing_lines': 3, + 'covered_lines': 5, + 'num_statements': 8, + 'percent_covered': 62.5, + 'percent_covered_display': '62', + }, } self._assert_expected_json_report(cov, expected_result) @@ -130,8 +146,8 @@ }, 'files': { 'a.py': { - 'executed_lines': 1, 2, - 'missing_lines': 3, + 'executed_lines': 1, 2, 4, 5, 8, + 'missing_lines': 3, 7, 9, 'excluded_lines': , "contexts": { "1": @@ -139,26 +155,35 @@ , "2": "cool_test" - + , + "4": + "cool_test" + , + "5": + "cool_test" + , + "8": + "cool_test" + , }, 'summary': { 'excluded_lines': 0, - 'missing_lines': 1, - 'covered_lines': 2, - 'num_statements': 3, - 'percent_covered': 66.66666666666667, - 'percent_covered_display': '66.67', - } - } + 'missing_lines': 3, + 'covered_lines': 5, + 'num_statements': 8, + 'percent_covered': 62.5, + 'percent_covered_display': '62.50', + }, + }, }, 'totals': { 'excluded_lines': 0, - 'missing_lines': 1, - 'covered_lines': 2, - 'num_statements': 3, - 'percent_covered': 66.66666666666667, - 'percent_covered_display': '66.67', - } + 'missing_lines': 3, + 'covered_lines': 5, + 'num_statements': 8, + 'percent_covered': 62.5, + 'percent_covered_display': '62.50', + }, } self._assert_expected_json_report(cov, expected_result)
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_lcov.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_lcov.py
Changed
@@ -8,6 +8,7 @@ from tests.coveragetest import CoverageTest import coverage +from coverage import env class LcovTest(CoverageTest): @@ -202,10 +203,8 @@ DA:9,0,FPTWzd68bDx76HN7VHu1wA LF:6 LH:4 - BRDA:0,0,0,1 - BRDA:7,0,1,1 - BRF:2 - BRH:2 + BRF:0 + BRH:0 end_of_record """) actual_result = self.get_lcov_report_content() @@ -252,7 +251,8 @@ line. It will also note the lack of branches, and the checksum for the line. - Although there are no lines found, it will note one line as hit. + Although there are no lines found, it will note one line as hit in + old Pythons, and no lines hit in newer Pythons. """ self.make_file("__init__.py", "") @@ -261,15 +261,27 @@ self.start_import_stop(cov, "__init__") cov.lcov_report() self.assert_exists("coverage.lcov") - expected_result = textwrap.dedent("""\ - TN: - SF:__init__.py - DA:1,1,1B2M2Y8AsgTpgAmY7PhCfg - LF:0 - LH:1 - BRF:0 - BRH:0 - end_of_record - """) + # Newer Pythons have truly empty empty files. + if env.PYBEHAVIOR.empty_is_empty: + expected_result = textwrap.dedent("""\ + TN: + SF:__init__.py + LF:0 + LH:0 + BRF:0 + BRH:0 + end_of_record + """) + else: + expected_result = textwrap.dedent("""\ + TN: + SF:__init__.py + DA:1,1,1B2M2Y8AsgTpgAmY7PhCfg + LF:0 + LH:1 + BRF:0 + BRH:0 + end_of_record + """) actual_result = self.get_lcov_report_content() assert actual_result == expected_result
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_numbits.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_numbits.py
Changed
@@ -13,7 +13,7 @@ from coverage.numbits import ( nums_to_numbits, numbits_to_nums, numbits_union, numbits_intersection, numbits_any_intersection, num_in_numbits, register_sqlite_functions, - ) +) from tests.coveragetest import CoverageTest
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_oddball.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_oddball.py
Changed
@@ -94,7 +94,7 @@ recur(100000) # This is definitely too many frames. """, 1, 2, 3, 5, 7, "" - ) + ) def test_long_recursion_recovery(self): # Test the core of bug 93: https://github.com/nedbat/coveragepy/issues/93 @@ -346,25 +346,25 @@ 'doit.py': 302, 303, 304, 305, 'fly.py': 102, 103, 'oops.py': 2, 3, - }), + }), ("doit catch oops", { 'doit.py': 302, 303, 'catch.py': 202, 203, 204, 206, 207, 'oops.py': 2, 3, - }), + }), ("doit fly catch oops", { 'doit.py': 302, 303, 'fly.py': 102, 103, 104, 'catch.py': 202, 203, 204, 206, 207, 'oops.py': 2, 3, - }), + }), ("doit catch fly oops", { 'doit.py': 302, 303, 'catch.py': 202, 203, 204, 206, 207, 'fly.py': 102, 103, 'oops.py': 2, 3, - }), - + }), + for callnames, lines_expected in runs:
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_parser.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_parser.py
Changed
@@ -14,7 +14,7 @@ from coverage.parser import ast_dump, ast_parse, PythonParser from tests.coveragetest import CoverageTest, TESTS_DIR -from tests.helpers import arcz_to_arcs, re_lines +from tests.helpers import arcz_to_arcs, re_lines, xfail_pypy_3749 class PythonParserTest(CoverageTest): @@ -43,8 +43,8 @@ pass """) assert parser.exit_counts() == { - 2:2, 3:1, 4:2, 5:1, 7:1, 9:2, 10:1 - } + 2:1, 3:1, 4:2, 5:1, 7:1, 9:1, 10:1 + } def test_generator_exit_counts(self): # https://github.com/nedbat/coveragepy/issues/324 @@ -76,7 +76,7 @@ """) assert parser.exit_counts() == { 1: 1, 2:1, 3:2, 4:1, 5:2, 6:1, 7:1, 8:1, 9:1 - } + } def test_excluded_classes(self): parser = self.parse_source("""\ @@ -89,8 +89,8 @@ pass """) assert parser.exit_counts() == { - 1:1, 2:1, 3:1 - } + 1:0, 2:1, 3:1 + } def test_missing_branch_to_excluded_code(self): parser = self.parse_source("""\ @@ -139,10 +139,7 @@ ''' """) - @pytest.mark.xfail( - env.PYPY and env.PYPYVERSION == (7, 3, 0), - reason="https://bitbucket.org/pypy/pypy/issues/3139", - ) + @xfail_pypy_3749 def test_decorator_pragmas(self): parser = self.parse_source("""\ # 1 @@ -178,6 +175,7 @@ assert parser.raw_statements == raw_statements assert parser.statements == {8} + @xfail_pypy_3749 def test_decorator_pragmas_with_colons(self): # A colon in a decorator expression would confuse the parser, # ending the exclusion of the decorated function. @@ -212,6 +210,7 @@ assert parser.raw_statements == {1, 2, 3, 5, 6, 7, 8} assert parser.statements == {1, 2, 3} + @xfail_pypy_3749 def test_empty_decorated_function(self): parser = self.parse_source("""\ def decorator(func): @@ -248,6 +247,15 @@ assert expected_arcs == parser.arcs() assert expected_exits == parser.exit_counts() + def test_fuzzed_double_parse(self): + # https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=50381 + # The second parse used to raise `TypeError: 'NoneType' object is not iterable` + msg = "EOF in multi-line statement" + with pytest.raises(NotPython, match=msg): + self.parse_source("") + with pytest.raises(NotPython, match=msg): + self.parse_source("") + class ParserMissingArcDescriptionTest(CoverageTest): """Tests for PythonParser.missing_arc_description.""" @@ -433,10 +441,10 @@ """) assert parser.missing_arc_description(3, 4) == ( "line 3 didn't jump to line 4, because the pattern on line 3 never matched" - ) + ) assert parser.missing_arc_description(3, 5) == ( "line 3 didn't jump to line 5, because the pattern on line 3 always matched" - ) + ) class ParserFileTest(CoverageTest): @@ -464,7 +472,7 @@ class Bar: pass """ - counts = { 2:2, 3:1, 4:2, 5:1, 7:1, 9:2, 10:1 } + counts = { 2:1, 3:1, 4:2, 5:1, 7:1, 9:1, 10:1 } fname = slug + ".py" self.make_file(fname, text, newline=newline) parser = self.parse_file(fname) @@ -510,8 +518,9 @@ # Run the AST_DUMP code to make sure it doesn't fail, with some light # assertions. Use parser.py as the test code since it is the longest file, # and fitting, since it's the AST_DUMP code. + import coverage.parser files = - os.path.join(TESTS_DIR, "../coverage/parser.py"), + coverage.parser.__file__, os.path.join(TESTS_DIR, "stress_phystoken.tok"), for fname in files:
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_plugins.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_plugins.py
Changed
@@ -196,7 +196,7 @@ cov.set_option("run:plugins", "plugin_sys_info") with swallow_warnings( r"Plugin file tracers \(plugin_sys_info.Plugin\) aren't supported with PyTracer" - ): + ): cov.start() cov.stop() # pragma: nested @@ -210,7 +210,7 @@ "-- sys: plugin_sys_info.Plugin -------------------------------", "hello: world", "-- end -------------------------------------------------------", - + assert expected_end == out_lines-len(expected_end): def test_plugin_with_no_sys_info(self): @@ -236,7 +236,7 @@ expected_end = "-- sys: plugin_no_sys_info.Plugin ----------------------------", "-- end -------------------------------------------------------", - + assert expected_end == out_lines-len(expected_end): def test_local_files_are_importable(self): @@ -426,7 +426,7 @@ 'foo_7.html 7 5 0 0 29% 1-3, 6-7', '--------------------------------------------------------', 'TOTAL 11 7 0 0 36%', - + assert expected == report assert math.isclose(total, 4 / 11 * 100) @@ -525,7 +525,7 @@ 'unsuspecting.py 6 3 50% 2, 4, 6', '-----------------------------------------------', 'TOTAL 6 3 50%', - + assert expected == report assert total == 50
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_process.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_process.py
Changed
@@ -302,7 +302,7 @@ status, out = self.run_command_status("coverage run throw.py") out2 = self.run_command("python throw.py") if env.PYPY: - # Pypy has an extra frame in the traceback for some reason + # PyPy has an extra frame in the traceback for some reason out2 = re_lines_text("toplevel", out2, match=False) assert out == out2 @@ -552,10 +552,6 @@ @pytest.mark.expensive @pytest.mark.skipif(not env.C_TRACER, reason="fullcoverage only works with the C tracer.") @pytest.mark.skipif(env.METACOV, reason="Can't test fullcoverage when measuring ourselves") - @pytest.mark.xfail( - (3, 11, 0, "alpha", 4) <= env.PYVERSION, - reason="avoid 3.11 bug lineno==None: https://bugs.python.org/issue46389", - ) def test_fullcoverage(self): # fullcoverage is a trick to get stdlib modules measured from # the very beginning of the process. Here we import os and @@ -705,14 +701,6 @@ expected = self.run_command("python with_main") actual = self.run_command("coverage run with_main") - - # PyPy includes the current directory in the path when running a - # directory, while CPython and coverage.py do not. Exclude that from - # the comparison also... - if env.PYPY: - ignored = re.escape(os.getcwd()) - expected = re_lines_text(ignored, expected, match=False) - actual = re_lines_text(ignored, actual, match=False) self.assert_tryexecfile_output(expected, actual) def test_coverage_run_dashm_dir_no_init_is_like_python(self): @@ -830,7 +818,7 @@ sys.path0:0 = r'{abc}', '/Users/somebody/temp/something/eggs/something-4.5.1-py2.7-xxx-10.13-x86_64.egg', - + import coverage.cmdline @@ -1080,7 +1068,7 @@ "b = 2\n" * 2000 + "if a > 3:\n" + " c = 4\n" - ) + ) self.make_data_file(lines={abs_file("ninety_nine_plus.py"): range(1, 2002)}) st, out = self.run_command_status("coverage report --fail-under=100") assert st == 2
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_results.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_results.py
Changed
@@ -139,19 +139,19 @@ {1,2,5,10,11,13,14}, (), "1-2, 5-11, 13-14" - ), + ), ( 1,2,3,4,5,10,11,12,13,14,98,99, 1,2,5,10,11,13,14,99, (3, 4), (5, 10, 11), (98, 100, -1), "1-2, 3->4, 5-11, 13-14, 98->100, 98->exit, 99" - ), + ), ( 1,2,3,4,98,99,100,101,102,103,104, 1,2,99,102,103,104, (3, 4), (104, -1), "1-2, 3->4, 99, 102-104" - ), + ), ) def test_format_lines_with_arcs(statements, lines, arcs, result): assert format_lines(statements, lines, arcs) == result
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_setup.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_setup.py
Changed
@@ -23,7 +23,7 @@ def test_metadata(self): status, output = self.run_command_status( "python setup.py --description --version --url --author" - ) + ) assert status == 0 out = output.splitlines() assert "measurement" in out0
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_summary.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_summary.py
Changed
@@ -450,6 +450,7 @@ cov.load() with pytest.raises(NoDataError, match="No data to report."): self.get_report(cov, skip_covered=True) + self.assert_doesnt_exist(".coverage") def test_report_skip_empty(self): self.make_file("main.py", """ @@ -597,7 +598,7 @@ assert_coverage_warnings( warns, re.compile(r"Couldn't parse Python file '.*/\\mycode.py' \(couldnt-parse\)"), - ) + ) def test_dothtml_not_python(self): # We run a .html file, and when reporting, we can't parse it as
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_templite.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_templite.py
Changed
@@ -71,7 +71,7 @@ 'name': 'Ned', 'upper': lambda x: x.upper(), 'second': lambda x: x1, - } + } self.try_render("Hello, {{name|upper}}!", data, "Hello, NED!") # Pipes can be concatenated. @@ -82,7 +82,7 @@ globs = { 'upper': lambda x: x.upper(), 'punct': '!', - } + } template = Templite("This is {{name|upper}}{{punct}}", globs) assert template.render({'name':'Ned'}) == "This is NED!" @@ -118,7 +118,7 @@ "Look: {% for n in nums %}{{n}}, {% endfor %}done.", locals(), "Look: 1, 2, 3, 4, done." - ) + ) # Loop iterables can be filtered. def rev(l): """Return the reverse of `l`.""" @@ -130,21 +130,21 @@ "Look: {% for n in nums|rev %}{{n}}, {% endfor %}done.", locals(), "Look: 4, 3, 2, 1, done." - ) + ) def test_empty_loops(self): self.try_render( "Empty: {% for n in nums %}{{n}}, {% endfor %}done.", {'nums':}, "Empty: done." - ) + ) def test_multiline_loops(self): self.try_render( "Look: \n{% for n in nums %}\n{{n}}, \n{% endfor %}done.", {'nums':1,2,3}, "Look: \n\n1, \n\n2, \n\n3, \ndone." - ) + ) def test_multiple_loops(self): self.try_render( @@ -152,46 +152,46 @@ "{% for n in nums %}{{n}}{% endfor %}", {'nums': 1,2,3}, "123 and 123" - ) + ) def test_comments(self): # Single-line comments work: self.try_render( "Hello, {# Name goes here: #}{{name}}!", {'name':'Ned'}, "Hello, Ned!" - ) + ) # and so do multi-line comments: self.try_render( "Hello, {# Name\ngoes\nhere: #}{{name}}!", {'name':'Ned'}, "Hello, Ned!" - ) + ) def test_if(self): self.try_render( "Hi, {% if ned %}NED{% endif %}{% if ben %}BEN{% endif %}!", {'ned': 1, 'ben': 0}, "Hi, NED!" - ) + ) self.try_render( "Hi, {% if ned %}NED{% endif %}{% if ben %}BEN{% endif %}!", {'ned': 0, 'ben': 1}, "Hi, BEN!" - ) + ) self.try_render( "Hi, {% if ned %}NED{% if ben %}BEN{% endif %}{% endif %}!", {'ned': 0, 'ben': 0}, "Hi, !" - ) + ) self.try_render( "Hi, {% if ned %}NED{% if ben %}BEN{% endif %}{% endif %}!", {'ned': 1, 'ben': 0}, "Hi, NED!" - ) + ) self.try_render( "Hi, {% if ned %}NED{% if ben %}BEN{% endif %}{% endif %}!", {'ned': 1, 'ben': 1}, "Hi, NEDBEN!" - ) + ) def test_complex_if(self): class Complex(AnyOldObject): @@ -208,24 +208,24 @@ "!", { 'obj': obj, 'str': str }, "@XS!" - ) + ) def test_loop_if(self): self.try_render( "@{% for n in nums %}{% if n %}Z{% endif %}{{n}}{% endfor %}!", {'nums': 0,1,2}, "@0Z1Z2!" - ) + ) self.try_render( "X{%if nums%}@{% for n in nums %}{{n}}{% endfor %}{%endif%}!", {'nums': 0,1,2}, "X@012!" - ) + ) self.try_render( "X{%if nums%}@{% for n in nums %}{{n}}{% endfor %}{%endif%}!", {'nums': }, "X!" - ) + ) def test_nested_loops(self): self.try_render( @@ -236,7 +236,7 @@ "!", {'nums': 0,1,2, 'abc': 'a', 'b', 'c'}, "@a0b0c0a1b1c1a2b2c2!" - ) + ) def test_whitespace_handling(self): self.try_render( @@ -245,7 +245,7 @@ "{% endfor %}!\n", {'nums': 0, 1, 2, 'abc': 'a', 'b', 'c'}, "@\n a0b0c0\n\n a1b1c1\n\n a2b2c2\n!\n" - ) + ) self.try_render( "@{% for n in nums -%}\n" + " {% for a in abc -%}\n" + @@ -257,7 +257,7 @@ "{% endfor %}!\n", {'nums': 0, 1, 2, 'abc': 'a', 'b', 'c'}, "@a00b00c00\na11b11c11\na22b22c22\n!\n" - ) + ) self.try_render( "@{% for n in nums -%}\n" + " {{n -}}\n" + @@ -265,7 +265,7 @@ "{% endfor %}!\n", {'nums': 0, 1, 2}, "@0x\n1x\n2x\n!\n" - ) + ) self.try_render(" hello ", {}, " hello ") def test_eat_whitespace(self): @@ -284,7 +284,7 @@ "{% endjoined %}\n", {'nums': 0, 1, 2, 'abc': 'a', 'b', 'c'}, "Hey!\n@XYa0XYb0XYc0XYa1XYb1XYc1XYa2XYb2XYc2!\n" - ) + ) def test_non_ascii(self): self.try_render(
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_testing.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_testing.py
Changed
@@ -357,10 +357,10 @@ def test_without_module(): - toml1 = tomlconfig.tomli - with without_module(tomlconfig, 'tomli'): - toml2 = tomlconfig.tomli - toml3 = tomlconfig.tomli + toml1 = tomlconfig.tomllib + with without_module(tomlconfig, 'tomllib'): + toml2 = tomlconfig.tomllib + toml3 = tomlconfig.tomllib assert toml1 is toml3 is not None assert toml2 is None
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_venv.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_venv.py
Changed
@@ -12,8 +12,8 @@ from coverage import env -from tests.coveragetest import CoverageTest, TESTS_DIR -from tests.helpers import change_dir, make_file, nice_file +from tests.coveragetest import CoverageTest, COVERAGE_INSTALL_ARGS +from tests.helpers import change_dir, make_file from tests.helpers import re_lines, run_command @@ -138,13 +138,12 @@ """) # Install everything. - coverage_src = nice_file(TESTS_DIR, "..") run_in_venv( - "python -m pip install --no-index " + + "python -m pip install " + "./third_pkg " + "-e ./another_pkg " + "-e ./bug888/app -e ./bug888/plugin " + - coverage_src + COVERAGE_INSTALL_ARGS ) shutil.rmtree("third_pkg") @@ -213,12 +212,12 @@ assert re_lines( r"^Not tracing .*\bexecfile.py': inside --source, but is third-party", debug_out, - ) + ) assert re_lines(r"^Tracing .*\bmyproduct.py", debug_out) assert re_lines( r"^Not tracing .*\bcolorsys.py': falls outside the --source spec", debug_out, - ) + ) out = run_in_venv(coverage_command + " report") assert "myproduct.py" in out @@ -237,15 +236,15 @@ r"^Not tracing .*\bexecfile.py': " + "module 'coverage.execfile' falls outside the --source spec", debug_out, - ) + ) assert re_lines( r"^Not tracing .*\bmyproduct.py': module 'myproduct' falls outside the --source spec", debug_out, - ) + ) assert re_lines( r"^Not tracing .*\bcolorsys.py': module 'colorsys' falls outside the --source spec", debug_out, - ) + ) out = run_in_venv(coverage_command + " report") assert "myproduct.py" not in out @@ -301,15 +300,15 @@ r"^Not tracing .*\bexecfile.py': " + "module 'coverage.execfile' falls outside the --source spec", debug_out, - ) + ) assert re_lines( r"^Not tracing .*\bmyproduct.py': module 'myproduct' falls outside the --source spec", debug_out, - ) + ) assert re_lines( r"^Not tracing .*\bcolorsys.py': module 'colorsys' falls outside the --source spec", debug_out, - ) + ) out = run_in_venv(coverage_command + " report") @@ -331,6 +330,6 @@ out = run_in_venv( coverage_command + " run --source=bug888/app,bug888/plugin bug888/app/testcov/main.py" - ) + ) # When the test fails, the output includes "Already imported a file that will be measured" assert out == "Plugin here\n"
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_version.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_version.py
Changed
@@ -21,9 +21,10 @@ assert coverage.version_info3 in 'alpha', 'beta', 'candidate', 'final' def test_make_version(self): - assert _make_version(4, 0, 0, 'alpha', 0) == "4.0a0" - assert _make_version(4, 0, 0, 'alpha', 1) == "4.0a1" - assert _make_version(4, 0, 0, 'final', 0) == "4.0" + assert _make_version(4, 0, 0, 'alpha', 0) == "4.0.0a0" + assert _make_version(4, 0, 0, 'alpha', 1) == "4.0.0a1" + assert _make_version(4, 0, 0, 'final', 0) == "4.0.0" + assert _make_version(4, 1, 0, 'final', 0) == "4.1.0" assert _make_version(4, 1, 2, 'beta', 3) == "4.1.2b3" assert _make_version(4, 1, 2, 'final', 0) == "4.1.2" assert _make_version(5, 10, 2, 'candidate', 7) == "5.10.2rc7"
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tests/test_xml.py -> _service:tar_scm:coverage-6.5.0.tar.gz/tests/test_xml.py
Changed
@@ -139,6 +139,7 @@ with pytest.raises(NoDataError, match="No data to report."): self.run_xml_report() self.assert_doesnt_exist("coverage.xml") + self.assert_doesnt_exist(".coverage") def test_no_source(self): # Written while investigating a bug, might as well keep it. @@ -152,7 +153,7 @@ assert_coverage_warnings( warns, re.compile(r"Couldn't parse '.*innocuous.py'. \(couldnt-parse\)"), - ) + ) self.assert_exists("coverage.xml") def test_filename_format_showing_everything(self): @@ -235,7 +236,7 @@ assert_coverage_warnings( warns, "Module not/really was never imported. (module-not-imported)", - ) + ) dom = ElementTree.parse("coverage.xml") self.assert_source(dom, "src/main") @@ -351,7 +352,7 @@ ('package', {'name': "d0.d0"}), ('class', {'filename': "d0/d0/__init__.py", 'name': "__init__.py"}), ('class', {'filename': "d0/d0/f0.py", 'name': "f0.py"}), - ) + ) def test_package_depth_1(self): self.make_tree(width=1, depth=4) @@ -372,7 +373,7 @@ ('class', {'filename': "d0/d0/d0/f0.py", 'name': "d0/d0/f0.py"}), ('class', {'filename': "d0/d0/f0.py", 'name': "d0/f0.py"}), ('class', {'filename': "d0/f0.py", 'name': "f0.py"}), - ) + ) def test_package_depth_2(self): self.make_tree(width=1, depth=4) @@ -394,7 +395,7 @@ ('class', {'filename': "d0/d0/d0/__init__.py", 'name': "d0/__init__.py"}), ('class', {'filename': "d0/d0/d0/f0.py", 'name': "d0/f0.py"}), ('class', {'filename': "d0/d0/f0.py", 'name': "f0.py"}), - ) + ) def test_package_depth_3(self): self.make_tree(width=1, depth=4) @@ -417,7 +418,7 @@ ('package', {'name': "d0.d0.d0"}), ('class', {'filename': "d0/d0/d0/__init__.py", 'name': "__init__.py"}), ('class', {'filename': "d0/d0/d0/f0.py", 'name': "f0.py"}), - ) + ) def test_source_prefix(self): # https://github.com/nedbat/coveragepy/issues/465 @@ -429,7 +430,7 @@ self.assert_package_and_class_tags(cov, ('package', {'name': "."}), ('class', {'filename': "mod.py", 'name': "mod.py"}), - ) + ) dom = ElementTree.parse("coverage.xml") self.assert_source(dom, "src")
View file
_service:tar_scm:coverage-6.3.2.tar.gz/tox.ini -> _service:tar_scm:coverage-6.5.0.tar.gz/tox.ini
Changed
@@ -62,7 +62,7 @@ commands = # If this command fails, see the comment at the top of doc/cmd.rst python -m cogapp -cP --check --verbosity=1 doc/*.rst - doc8 -q --ignore-path 'doc/_*' doc CHANGES.rst README.rst + #doc8 -q --ignore-path 'doc/_*' doc CHANGES.rst README.rst sphinx-build -b html -aEnqW doc doc/_build/html rst2html.py --strict README.rst doc/_build/trash - sphinx-build -b html -b linkcheck -aEnq doc doc/_build/html @@ -70,8 +70,7 @@ testenv:lint deps = - -r requirements/dev.pip - -r doc/requirements.pip + -r requirements/lint.pip setenv = LINTABLE = coverage tests doc ci igor.py setup.py __main__.py @@ -82,13 +81,13 @@ # If this command fails, see the comment at the top of doc/cmd.rst python -m cogapp -cP --check --verbosity=1 doc/*.rst python -m cogapp -cP --check --verbosity=1 .github/workflows/*.yml - doc8 -q --ignore-path 'doc/_*' doc CHANGES.rst README.rst + #doc8 -q --ignore-path 'doc/_*' doc CHANGES.rst README.rst # If 'build -q' becomes a thing (https://github.com/pypa/build/issues/188), # this can be simplifed: python igor.py quietly "python -m build" twine check dist/* python -m pylint --notes= {env:LINTABLE} - check-manifest --ignore 'perf/*,doc/sample_html/*,.treerc' + check-manifest --ignore 'doc/sample_html/*,.treerc' gh-actions # PYVERSIONS
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2