Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork944
Runcat_file.py
fixture without site customizations#2052
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
Uh oh!
There was an error while loading.Please reload this page.
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
This fixes a new `TestGit::test_handle_process_output` test failureon Cygwin where a `CoverageWarning` was printed to stderr in thePython interpreter subprocess running the `cat_file.py` fixture.We usually run the test suite with `pytest-cov` enabled. This isconfigured in `pyproject.toml` to happen by default. `pytest-cov`uses the `coverage` module, but it adds some more functionality.This includes instrumenting subprocesses, which is achieved byinstalling its `pytest-cov.pth` file into `site-packages` to be runby all Python interpreter instances. This causes interpeters tocheck for environment variables such as `COV_CORE_SOURCE` andto conditionally initialize `pytest_cov`. For details, see:https://pytest-cov.readthedocs.io/en/latest/subprocess-support.html`coverage` 7.9.0 was recently released. One of the changes is tostart issuing a warning if it can't import the C tracer core. See:https://github.com/nedbat/coveragepy/releases/tag/7.9.0If this warning is issued in the `cat_file.py` subprocess used in`test_handle_process_output`, it causes the test to fail, becausethe subprocess writes two more lines to its standard error stream,which cause the line count to come out as two more than expected: /cygdrive/d/a/GitPython/GitPython/.venv/lib/python3.9/site-packages/coverage/core.py:96: CoverageWarning: Couldn't import C tracer: No module named 'coverage.tracer' (no-ctracer) warn(f"Couldn't import C tracer: {IMPORT_ERROR}", slug="no-ctracer", once=True)On most platforms, there is no failure, because the condition thewarnings describe does not occur, so there are no warnings. But onCygwin it does occur, resulting in a new test failure, showing > self.assertEqual(len(actual_lines[2]), expected_line_count, repr(actual_lines[2])) E AssertionError: 5004 != 5002 : ["/cygdrive/d/a/GitPython/GitPython/.venv/lib/python3.9/site-packages/coverage/core.py:96: CoverageWarning: Couldn't import C tracer: No module named 'coverage.tracer' (no-ctracer)\n", ' warn(f"Couldn\'t import C tracer: {IMPORT_ERROR}", slug="no-ctracer", once=True)\n', 'From github.com:jantman/gitpython_issue_301\n', ' = [up to date] master -> origin/master\n', ' = [up to date] testcommit1 -> origin/testcommit1\n', ' = [up to date] testcommit10 -> origin/testcommit10\n', ...where the first two elements of the list are from the lines of thewarning message, and the others are as expected. (The above is ahighly abridged extract, with the `...` at the end standing formany more list items obtained through the `cat_file.py` fixture.)This new failure is triggered specifically by the new `coverage`package version. It is not due to any recent changes in GitPython.It can be observed by rerunning CI checks that have previouslypassed, or in:https://github.com/EliahKagan/GitPython/actions/runs/15598239952/job/43940156308#step:14:355There is more than one possible way to fix this, including fixingthe underlying condition being warned about on Cygwin, orsanitizing environment variables for the subprocess.The approach taken here instead is based on the idea that the`cat_file.py` fixture is very simple, and that it is conceptuallyjust a standalone Python script that doesn't do anything meant todepend on the current Python environment.Accordingly, this passes the `-S` option to the interpreter for the`cat_file.py` subprocess, so that interpreter refrains from loadingthe `site` module. This includes, among other simplifying effects,that the subprocess performs no `.pth` customizations.
d885bea
intogitpython-developers:main 27 checks passed
Uh oh!
There was an error while loading.Please reload this page.
EliahKagan added a commit to EliahKagan/pytest-cov-test that referenced this pull requestJun 12, 2025
This adds a second test case that passes `-S`, avoiding thewarnings.(Seegitpython-developers/GitPython#2052.)
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading.Please reload this page.
This fixes a new
TestGit::test_handle_process_output
test failure on Cygwin where aCoverageWarning
was printed to stderr in the Python interpreter subprocess running thecat_file.py
fixture.Background
We usually run the test suite with
pytest-cov
enabled. This is configured inpyproject.toml
to happen by default.pytest-cov
uses thecoverage
module, but it adds some more functionality. This includes instrumenting subprocesses, which is achieved by installing itspytest-cov.pth
file intosite-packages
to be run by all Python interpreter instances. This causes interpeters to check for environment variables such asCOV_CORE_SOURCE
and to conditionally initializepytest_cov
. For details, see:https://pytest-cov.readthedocs.io/en/latest/subprocess-support.htmlcoverage
7.9.0 was recently released. One of the changes is to start issuing a warning if it can't import the C tracer core. See:https://github.com/nedbat/coveragepy/releases/tag/7.9.0Interaction with
cat_file.py
If this warning is issued in the
cat_file.py
subprocess used intest_handle_process_output
, it causes the test to fail, because the subprocess writes two more lines to its standard error stream, which cause the line count to come out as two more than expected:The Cygwin failure
On most platforms, there is no failure, because the condition the warnings describe does not occur, so there are no warnings. But on Cygwin it does occur, resulting in a new test failure, showing
where the first two elements of the list are from the lines of the warning message, and the others are as expected. (The above is a highly abridged extract, with the
...
at the end standing for many more list items obtained through thecat_file.py
fixture.)This new failure is triggered specifically by the new
coverage
package version. It is not due to any recent changes in GitPython. It can be observed by rerunning CI checks that have previously passed, or in:https://github.com/EliahKagan/GitPython/actions/runs/15598239952/job/43940156308#step:14:355
The fix
There is more than one possible way to fix this, including fixing the underlying condition being warned about on Cygwin, or sanitizing environment variables for the subprocess.
The approach taken here instead is based on the idea that the
cat_file.py
fixture is very simple, and that it is conceptually just a standalone Python script that doesn't do anything meant to depend on the current Python environment.Accordingly, this passes the
-S
option to the interpreter for thecat_file.py
subprocess, so that interpreter refrains from loading thesite
module. This includes, among other simplifying effects, that the subprocess performs no.pth
customizations.