René's URL Explorer Experiment


Title: Make clear every test's status in every CI run by EliahKagan · Pull Request #1679 · gitpython-developers/GitPython · GitHub

Open Graph Title: Make clear every test's status in every CI run by EliahKagan · Pull Request #1679 · gitpython-developers/GitPython

X Title: Make clear every test's status in every CI run by EliahKagan · Pull Request #1679 · gitpython-developers/GitPython

Description: This makes changes so tests give more informative output, both locally and on CI but especially on CI. It comprises several interrelated changes that should help lead up to, but do not include, adding CI jobs for Windows. My motivation for doing this was to make it easier to add those jobs, and to get the most out of those jobs once they are added, but it seems to me that the benefit of these changes is actually largely independent of those goals, and can be reviewed independently of them (and thus before they are done). This description is divided into descriptions of the problems I believe the changes solve, and how they solve them. pytest-sugar output didn't display correctly on CI The pytest-sugar plugin is working very well for local testing, but on CI it has been producing output that is voluminous, yet fairly low in information. This happens because instead of outputting a row of check marks as it does locally (at least when run in most terminals), updating the line creates a new one: test/test_actor.py ✓ 0% test/test_actor.py ✓✓ 0% ▏ test/test_actor.py ✓✓✓ 1% ▏ test/test_actor.py ✓✓✓✓ 1% ▏ Those are four passing tests in test_actor.py, reported with one line per test, yet those lines give no information about the individual tests they represent, not even those tests' names. This happens because, from pytest-sugar's perspective, it is updating a single line in a terminal. The cause of the problem is the progress bar animated on the right side. Passing -v or -vv improves things somewhat, in that it shows specific information about the tests (their names and, where applicable, which in this project is almost everywhere, the test class they appear in). However, the progress bar of that style is still drawn, and extra newlines are still often shown, with the resulting excess blank lines making the output hard to read. I was not able to find a way to get pytest-sugar not to show this progress bar, or to show it in a different style. Fortunately, that turned out not to be necessary. pytest-sugar provides two useful features: its pretty output, and showing each failure immediately. The former is not achieved on CI, for this project, currently. However, the latter is, and may be considered important. But there is another pytest plugin that separately provides just that feature: pytest-instafail. When enabled, pytest-instafail reports each failure with full details immediately. (It does not stop running the tests early or cancel any tests.) So I added pytest-instafail as a development dependency (in the test extra) but did not set things up for it to be used automatically. And I configured pytest to use pytest-sugar by default, but invoked pytest on CI so that it runs with pytest-sugar turned off and pytest-instafail turned on. This plays well with how GitHub Actions handles output, at any level of verbosity. But I have also passed -vv on CI, to solve... CI did not show which tests had which statuses CI is the easiest and also most reliable way to run tests in this project, and probably the most common. Often I found myself wanting to know what tests were actually running, versus being skipped. I often made assumptions about this that were mistaken, and others that were correct but hard to be confident about; see #1657 (comment). Furthermore, it is useful to be able to notice--even when one is not looking for it, so long as it's not too distracting--what tests are passing, skipped, etc. The failing tests are reported in detail at each failure and listed at the end, but tests with other statuses are not listed with those statuses--or, really, at all--without -v or -vv. So I have passed -vv so that, for non-failing tests, each test shows a line indicating the file, the class where applicable, the name of the test case (with @ddt-parameterized tests appearing as separate test cases but listed together, and named in terms of their arguments), and the test's status. This distinguishes tests with pass, skip, xfail, and xpass statuses. It also provides reassurance that particular tests really are running, and allows one to search for tests by name while viewing CI output. The custom pytest configuration was rigid and hid failures Implicit options for pytest are configured in pyproject.toml. It is not immediately obvious, to someone running pytest on the project or inspecting CI output, what these are set to. One was --force-sugar, which appears to have been necessary to get pytest-sugar to run on CI even in spite of its (in this case correct) guess that it does not have a suitable output device when doing so. This made it very difficult to run pytest without pytest-sugar, as is needed on CI (detailed above) and as may also be useful to do locally in some cases. So I removed that. The plugin is still loaded automatically, but it can now be turned off with -p no:sugar (as well as automatically if it detects an unsuitable output device, but I am not relying on that in the CI workflows). Another was --maxfail=10. I have removed this as well. It made pytest stop running tests once the tenth failure occurred, so no more than ten failures would ever be reported. It was possible to notice this by looking carefully at test output, either by noticing the line that warns about it (amongst lots of other output) or by seeing that the total number of tests that are run was lower than the number the runner found, by more than the number of skipped tests. On CI, it is useful to see the output of all tests. Sometimes it makes sense to weaken that, but stopping in the middle of a test run because of a failure in that run (where one may want to know what else does, and what doesn't, also fail), is not, in my view, the best way to do it. Instead, fail-fast could be enabled on the CI test matrix, or some available combinations of platforms and Python versions could even be omitted (for example, when Windows CI jobs are added, fewer than six versions could be tested, depending on how fast they run). The bigger issue, though, is that I thought I was getting only ten test failures in a number of circumstances! Fortunately, I never relied on that, and even on my native Windows system where I was unable to get all tests passing, I ran the tests that seemed most germane to the changes I was making. Since it is more involved--on any operating system--to get all tests passing locally with GitPython than with most codebases, showing only ten failures seems like a stumbling block that is best removed. Finally, removing --maxfail=10 makes it much easier to investigate what fails due to removing @skipIf and related annotations, turning off HIDE_WINDOWS_KNOWN_ERRORS, and the like, because one can see everything that fails. I have retained --disable-warnings, though that should be revisited in the future, since it could be hiding something of value. Delving into that would have been in keeping with the theme of this PR, but I have not done so, in part to limit the scope of the changes (as turning that off would likely lead to the addition of a number of more fine-grained suppressions). The other arguments pertain to code coverage and are fine; code coverage reports are often wanted, especially for full test runs on CI, and they can be turned off easily by passing --no-cov to pytest. It wasn't clear when is_win was true is_win is true only on native Windows systems, but this is not obvious, nor is it in all cases obvious what constitutes a native Windows system. In a couple cases, a test was skipped when is_win and a Cygwin check both hold. Those never happen together--those tests were running on all systems and doing fine (and I removed those @skipIf annotations). is_win, which is provided by GitPython, is true when os.name == "nt". On Cygwin, os.name == "posix". Cygwin can be distinguished from other Unix-like platforms by checking that sys.platform == "cygwin", which also holds on systems like MSYS2 that are derived from Cygwin. However, it does not hold on MinGW builds of Python, which are a native build that is provided with MSYS 2, and which is correctly detected as native Windows with os.name and thus GitPython's is_win. (The "Git Bash" environment also provides MinGW builds, though it does not include Python.) Given this situation, I am unsure if it's really a good idea to have is_win in the project, rather than testing the above conditions directly. However, we do have it, and I believe users are supposed to be able to use it directly (so removing it would be a breaking change). I have certainly not endeavored to remove it here, nor to deprecate it. However, I have extended the part of both of the CI test workflows that output version information such as git and python versions to also output the values of all of the above, so they can be readily checked. Together with being able to see the status of each test by name (by either perusing or searching), I think this should avoid the kind of situation I faced in #1636 and #1650 where I didn't know what platforms my tests were running (or supposed to run) on and couldn't tell by examining CI output. Expected failures were handled by skipping I have not completely addressed this, but I have made significant headway, and the areas where it remains so are either marked or are already known to be especially tricky cases. When the actions a test performs should not be attempted at all, the test should be skipped. However, in testing frameworks with limited support for marking tests as expected to fail, skipping is often used to express this as well. This is best avoided when possible, because it requires that both initiative and manual action be taken to check whether tests that were not working before are still not working, as well as to check that how they are failing remains the same, at least in the general sense of what exception is raised. I replaced most, but not all, @skipIf and similar annotations, in places where they represent expected failure of a test that ought to pass, with @pytest.mark.xfail. Both unittest and pytest provide facilities for expressing expected failure, but unittest.expectedFailure is very limited, not allowing a condition, reason, or expected exception to be passed. In contrast, pytest.mark.xfail supports such arguments (among others), and I have always passed them. The raises argument takes an exception type (or tuple of them) that is expected to be raised, and test failures due to other exceptions will be reported as regular failures. Because tests marked xfail still run (except in limited cases where one prevents this, which I have not done), examining pytest output (when -v or -vv have been passed) reveals, for each test, whether it really did fail as expected (xfail status), or if it unexpectedly passed (xpass status). It is possible to have the xpass status treated as a failure, but I have not done that. An xfailing or xpassing test does not produce full test output with a traceback, so we are still only getting that highly verbose inline failure information (due to pytest-sugar locally and pytest-instafail on CI) if we get an unexpected failure, i.e., one that fails the run. My goal with xfail is that, taken together with other changes in this PR, it should make it unnecessary to take any special action to check whether a test is still unable to pass--or to check whether the system or other condition for its failure, or the way it fails, has remained the same. Instead, one simply takes a look at the xfail output, a key part of the approach articulated there thus being continuously automated. Going along with that, it should be little more obtrusive than the effect of a passing test, so one is not distracted by it. I believe this PR largely achieves both goals, in a way that is worthwhile even though imperfect. But the imperfections are worth noting: I don't believe ddt has its own xfail feature. @pytest.mark.parametrize is made to work together with @pytest.mark.xfail, so generated tests with some arguments can be marked xfail while others generated from the same function/method are not. But @pytest.mark.parametrize cannot be used effectively on a method in a class that inherits directly or indirectly from unittest.TestCase, even if (as in this project) it is only necessary to support the pytest test runner. Most GitPython test classes derive indirectly from TestCase through a custom TestBase class that provides the import rorepo fixture, and I did not want migrate that as part of the work on this PR. But the effect is that there are some xpassing functions already, because I could only mark the whole group (i.e,, defined function) as xfail. The situation is clearly documented with comments and the reason keyword argument. It affects two groups of cygpath tests. test_includes_order contains a few assertions, the last of which is expected to fail, which is handled by placing it in a try block, catching the AssertionError, and reraising it as a SkipTest exception. It is possible to do something analogous to signal that an expected failure has occurred. But without splitting up or otherwise reorganizing the test case, this would not carry the benefit of an xpass status if the assertion unexpectedly starts working. It might still be reasonable to do that, but because I don't want to create the appearance of observability where we don't have it, I have not done so at this point. My hope is that either the test can be reorganized or the underlying problem can be fixed. I have clearly commented the situation. The git module (rather than its unit tests) has three places where unittest.SkipTest is raised from inside it to skip a test (#790). As in test_includes_order, these are situations where, if nothing goes wrong, no indication is given. So for the same reason as there--but also that it would be much harder because I am using xfail from pytest but the git module shouldn't have testing framework dependencies, per #526 and #527--I have not changed that here. Note that, in spite of the connection to the related #525, most occurrences of HIDE_WINDOWS_KNOWN_ERRORS do not straddle git and test in this way, and I have changed then from @skipIf and similar to @pytest.mark.xfail. I have not applied xfail to HIDE_WINDOWS_FREEZE_ERRORS, but that is because I don't think they are expected failures, so I do not class this as an imperfection. (We don't want those tests to run automatically on native Windows systems, but @pytest.mark.xfail supports run=False for such cases, though that forgoes being able to observe an xpass. But I believe these tests usually work on all systems, but freeze occasionally on native Windows. I also think this should be addressed as its own change rather than here; I suspect there is actually a connection to #1676, as I've noted there, and maybe they can be fixed together.) Some expected failures were out of date (or originally erroneous) This is to be expected, and a benefit of the above changes (of xfail and the other changes above it that support seeing and using that output) was to be able to identify these cases and fix the skip and xfail specifications, and most of all to verify that they are fixed. To be clear, I didn't actually fix any bugs in the code under test. The changes to the test code should be evident in the diff (as, if not, then the test code is not as clear as I intend as a result of the changes), but a summary may help in distinguishing these from nearby changes, so in case it helps, here are the main (kinds of) changes of this kind: Removing skips/xfails for tests that had been broken but are now fully working. Fixing a wrong platform (some Cygwin tests were run only on native Windows). Removing skips for an impossible platform (the is_win and Cygwin case mentioned above). Identifying more specific failure conditions (in particular, test_commit_msg_hook_success on native Windows works with some bash interpreters and not others, possibly arising later than #1399). Removing the Cygwin xfail on test_blocking_lock_file, which turned out just to need its time window extended on Cygwin the same as for native Windows. Very old git versions would skip tests needing newer features I think that was the right choice at the time, but now those versions are even older. I've changed the logic to raise RuntimeError to error out those tests as being unable to run if one attempts to run them with extremely old versions of git that don't support them, rather than skipping. Intuitively, people don't expect a bug to be caught if it only affects one platform and they test on another. In contrast, skipping these tests is likely to go unnoticed: just as one does not get a passing test run if one doesn't have any git installed, I think it makes sense for the few specific tests that require a non-ancient git to error out without it, now that new enough versions are so widely available. Some operating systems, such as CentOS 7, that maintain downstream versions of extremely old software for an extremely long time, might have such an old git version that nonetheless has downstream security fixes that make it acceptably safe to use. But I suspect that anyone developing improvements to GitPython on such a system would also have installed a newer git to test with, even if not aware of any specific incompatibilities. The CI test workflows still appeared more different than they are For debugging CI (and also for future efforts in extending it, including in adding native Windows jobs), it is useful to be able to readily identify the fundamental similarities and differences between the two CI test workflows. I had made some progress on this before, but I've taken care of some stuff I missed. Most notably, commands provided by Cygwin are now run with relative paths in the Cygwin workflow (and found), and set -x in the pytest step no longer breaks the tests. There is probably more that could reasonably be done in this area.

Open Graph Description: This makes changes so tests give more informative output, both locally and on CI but especially on CI. It comprises several interrelated changes that should help lead up to, but do not include, add...

X Description: This makes changes so tests give more informative output, both locally and on CI but especially on CI. It comprises several interrelated changes that should help lead up to, but do not include, add...

Opengraph URL: https://github.com/gitpython-developers/GitPython/pull/1679

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:9d131789-94c4-8097-55ec-8e78c10bc398
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idE00A:124CEE:8CD4A8:C1E770:69695457
html-safe-nonced178119e19f7ffe0d2e3e7aca4037d642e74ec6d31a2c20db5ffc7dc6db90ed8
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFMDBBOjEyNENFRTo4Q0Q0QTg6QzFFNzcwOjY5Njk1NDU3IiwidmlzaXRvcl9pZCI6Ijg2NDA1NTA1Mjg5Mzc2ODU1IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmac1cdd34e6f5f0a645f79c78acb195a921f1982ecdc634ff628dce42ecb8672319
hovercard-subject-tagpull_request:1530202041
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/files
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/gitpython-developers/GitPython/pull/1679/files
twitter:imagehttps://avatars.githubusercontent.com/u/1771172?s=400&v=4
twitter:cardsummary_large_image
og:imagehttps://avatars.githubusercontent.com/u/1771172?s=400&v=4
og:image:altThis makes changes so tests give more informative output, both locally and on CI but especially on CI. It comprises several interrelated changes that should help lead up to, but do not include, add...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None9db5f28da7e24035385d7f349f17890cbe016a939ddd7952be0f07b862094f5a
turbo-cache-controlno-preview
diff-viewunified
go-importgithub.com/gitpython-developers/GitPython git https://github.com/gitpython-developers/GitPython.git
octolytics-dimension-user_id503709
octolytics-dimension-user_logingitpython-developers
octolytics-dimension-repository_id1126087
octolytics-dimension-repository_nwogitpython-developers/GitPython
octolytics-dimension-repository_publictrue
octolytics-dimension-repository_is_forkfalse
octolytics-dimension-repository_network_root_id1126087
octolytics-dimension-repository_network_root_nwogitpython-developers/GitPython
turbo-body-classeslogged-out env-production page-responsive full-width
disable-turbotrue
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release4e59fe66217d3c72925af2a341ae3a8f2b5b5b2a
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/gitpython-developers/GitPython/pull/1679/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fgitpython-developers%2FGitPython%2Fpull%2F1679%2Ffiles
GitHub CopilotWrite better code with AIhttps://github.com/features/copilot
GitHub SparkBuild and deploy intelligent appshttps://github.com/features/spark
GitHub ModelsManage and compare promptshttps://github.com/features/models
MCP RegistryNewIntegrate external toolshttps://github.com/mcp
ActionsAutomate any workflowhttps://github.com/features/actions
CodespacesInstant dev environmentshttps://github.com/features/codespaces
IssuesPlan and track workhttps://github.com/features/issues
Code ReviewManage code changeshttps://github.com/features/code-review
GitHub Advanced SecurityFind and fix vulnerabilitieshttps://github.com/security/advanced-security
Code securitySecure your code as you buildhttps://github.com/security/advanced-security/code-security
Secret protectionStop leaks before they starthttps://github.com/security/advanced-security/secret-protection
Why GitHubhttps://github.com/why-github
Documentationhttps://docs.github.com
Bloghttps://github.blog
Changeloghttps://github.blog/changelog
Marketplacehttps://github.com/marketplace
View all featureshttps://github.com/features
Enterpriseshttps://github.com/enterprise
Small and medium teamshttps://github.com/team
Startupshttps://github.com/enterprise/startups
Nonprofitshttps://github.com/solutions/industry/nonprofits
App Modernizationhttps://github.com/solutions/use-case/app-modernization
DevSecOpshttps://github.com/solutions/use-case/devsecops
DevOpshttps://github.com/solutions/use-case/devops
CI/CDhttps://github.com/solutions/use-case/ci-cd
View all use caseshttps://github.com/solutions/use-case
Healthcarehttps://github.com/solutions/industry/healthcare
Financial serviceshttps://github.com/solutions/industry/financial-services
Manufacturinghttps://github.com/solutions/industry/manufacturing
Governmenthttps://github.com/solutions/industry/government
View all industrieshttps://github.com/solutions/industry
View all solutionshttps://github.com/solutions
AIhttps://github.com/resources/articles?topic=ai
Software Developmenthttps://github.com/resources/articles?topic=software-development
DevOpshttps://github.com/resources/articles?topic=devops
Securityhttps://github.com/resources/articles?topic=security
View all topicshttps://github.com/resources/articles
Customer storieshttps://github.com/customer-stories
Events & webinarshttps://github.com/resources/events
Ebooks & reportshttps://github.com/resources/whitepapers
Business insightshttps://github.com/solutions/executive-insights
GitHub Skillshttps://skills.github.com
Documentationhttps://docs.github.com
Customer supporthttps://support.github.com
Community forumhttps://github.com/orgs/community/discussions
Trust centerhttps://github.com/trust-center
Partnershttps://github.com/partners
GitHub SponsorsFund open source developershttps://github.com/sponsors
Security Labhttps://securitylab.github.com
Maintainer Communityhttps://maintainers.github.com
Acceleratorhttps://github.com/accelerator
Archive Programhttps://archiveprogram.github.com
Topicshttps://github.com/topics
Trendinghttps://github.com/trending
Collectionshttps://github.com/collections
Enterprise platformAI-powered developer platformhttps://github.com/enterprise
GitHub Advanced SecurityEnterprise-grade security featureshttps://github.com/security/advanced-security
Copilot for BusinessEnterprise-grade AI featureshttps://github.com/features/copilot/copilot-business
Premium SupportEnterprise-grade 24/7 supporthttps://github.com/premium-support
Pricinghttps://github.com/pricing
Search syntax tipshttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
documentationhttps://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fgitpython-developers%2FGitPython%2Fpull%2F1679%2Ffiles
Sign up https://github.com/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fpull_requests%2Fshow%2Ffiles&source=header-repo&source_repo=gitpython-developers%2FGitPython
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1679/files
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1679/files
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1679/files
gitpython-developers https://github.com/gitpython-developers
GitPythonhttps://github.com/gitpython-developers/GitPython
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1679/files
Notifications https://github.com/login?return_to=%2Fgitpython-developers%2FGitPython
Fork 964 https://github.com/login?return_to=%2Fgitpython-developers%2FGitPython
Star 5k https://github.com/login?return_to=%2Fgitpython-developers%2FGitPython
Code https://github.com/gitpython-developers/GitPython
Issues 169 https://github.com/gitpython-developers/GitPython/issues
Pull requests 8 https://github.com/gitpython-developers/GitPython/pulls
Discussions https://github.com/gitpython-developers/GitPython/discussions
Actions https://github.com/gitpython-developers/GitPython/actions
Security Uh oh! There was an error while loading. Please reload this page. https://github.com/gitpython-developers/GitPython/security
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1679/files
Insights https://github.com/gitpython-developers/GitPython/pulse
Code https://github.com/gitpython-developers/GitPython
Issues https://github.com/gitpython-developers/GitPython/issues
Pull requests https://github.com/gitpython-developers/GitPython/pulls
Discussions https://github.com/gitpython-developers/GitPython/discussions
Actions https://github.com/gitpython-developers/GitPython/actions
Security https://github.com/gitpython-developers/GitPython/security
Insights https://github.com/gitpython-developers/GitPython/pulse
Sign up for GitHub https://github.com/signup?return_to=%2Fgitpython-developers%2FGitPython%2Fissues%2Fnew%2Fchoose
terms of servicehttps://docs.github.com/terms
privacy statementhttps://docs.github.com/privacy
Sign inhttps://github.com/login?return_to=%2Fgitpython-developers%2FGitPython%2Fissues%2Fnew%2Fchoose
Byronhttps://github.com/Byron
gitpython-developers:mainhttps://github.com/gitpython-developers/GitPython/tree/main
EliahKagan:verbose-cihttps://github.com/EliahKagan/GitPython/tree/verbose-ci
Conversation 1 https://github.com/gitpython-developers/GitPython/pull/1679
Commits 32 https://github.com/gitpython-developers/GitPython/pull/1679/commits
Checks 0 https://github.com/gitpython-developers/GitPython/pull/1679/checks
Files changed https://github.com/gitpython-developers/GitPython/pull/1679/files
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1679/files
Make clear every test's status in every CI run https://github.com/gitpython-developers/GitPython/pull/1679/files#top
Show all changes 32 commits https://github.com/gitpython-developers/GitPython/pull/1679/files
45773c2 Instrument workflows to investigate skipped tests EliahKagan Sep 7, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/45773c27fa40fddf72b40970836b3649094cd994
6fbe511 Show version and platform info in one place EliahKagan Sep 13, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/6fbe5118514618d34ea8912e99fbde3fd6d7a557
bd3307a Make "Update PyPA packages" step clearer EliahKagan Sep 13, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/bd3307ad428025e72fb66a9ca4e8231aa0917f9e
680d795 Show all the failures EliahKagan Sep 13, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/680d7957373c6bf193388907e3dbb770f3867ffe
75cf540 Keep sugar for local use, but use instafail on CI EliahKagan Sep 14, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/75cf5402d0d6c6712c1b0f5bd114cc9fd8780edc
eb56e7b Pass -v twice to see full skip reasons EliahKagan Sep 14, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/eb56e7bdf15344739d3c2d671c1ca7dc185b8abe
9c7ff1e Force pytest color output on CI EliahKagan Sep 14, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/9c7ff1e4918128ff28ba02cb2771b440a392644c
0eb38bc Fix test_blocking_lock_file for cygwin EliahKagan Sep 15, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/0eb38bcedf3703c2e3aacae27ea4cbafce33e941
715dba4 Run cygpath tests on Cygwin, not native Windows EliahKagan Sep 14, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/715dba473a202ef3631b6c4bd724b8ff4e6c6d0b
d6a2d28 Mark some cygpath tests xfail EliahKagan Sep 17, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/d6a2d2807de99715ce85887b8992dbcafcefcee9
881456b Run test_commit_msg_hook_success on more systems EliahKagan Sep 17, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/881456bdceb61d51fa84ea286e6ca0e3587e8dc5
c6a586a No longer skip test_index_mutation on Cygwin EliahKagan Sep 17, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/c6a586ab4817a9dcb8c8290a6a3e7071b1834f32
fc02230 Report encoding error in test_add_unicode as error EliahKagan Sep 24, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/fc022304d2f4bc8770f75b0c5fc289dccab0ae5b
203da23 Add a few FIXMEs re: better use of xfail EliahKagan Sep 24, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/203da23e5fe2ae5a0ae13d0f9b2a276ae584ea7b
cf5f1dc Report <2.5.1 in test_linked_worktree_traversal as error EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/cf5f1dca139b809a744badb9f9740dd6d0a70c56
8923236 Change skipIf(not ...) to skipUnless(...) EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/89232365fb0204c32d1f7c23b9eb39fe4401eb7f
b198bf1 Express known test_depth failure with xfail EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/b198bf1e7d9c9d9db675c6c4e94d2f136a0a7923
cd175a5 Remove no-effect `@skipIf` on test_untracked_files EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/cd175a598ed457833bc06adba776e2bbb1d9014b
f38cc00 Make 2 more too-low git version skips into errors EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/f38cc000fe4d51f0f9d1bdedec86f6fcdb57f359
8fd56e7 Update test_root_module Windows skip reason EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/8fd56e78366470e0b07db48daf623b188e7245ea
c1798f5 Change test_root_module Windows skip to xfail EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/c1798f5ead60f74de422732d5229244d00325f24
ba56752 Update test_git_submodules_and_add_sm_with_new_commit skip reason EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/ba567521a5a01b93420cab4021d5663af66231ae
8704d1b Change test_git_submodules_and_add_sm_with_new_commit Windows skip to… EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/8704d1b81ba080cd4baa74968ac4cf84a84e4cbe
1d6abdc Run the tests in test_tree on Windows EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/1d6abdca134082bf0bce2e590a52d8c08bf04d9b
5609faa Add missing raises keyword for test_depth xfail EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/5609faa5a1c22654dfc007f7bf229e1b08087aa8
ed95e8e Consolidate test_repo module import statements EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/ed95e8e72f6aa697c1ec69595335168e717da013
ceb4dd3 Show more CI system information EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/ceb4dd3a7e89ac281a6c0d4d815fc13c00cbdf9f
3276aac Use Cygwin's bash and git for more CI steps EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/3276aac711186a5dd0bd74ba1be8bb6f4ad3d03a
5d40976 Try to work in all LF on Cygwin CI EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/5d4097654c6498d56defcc98dc1611fbfba9b75a
dda4286 Consistent formatting style across all workflows EliahKagan Sep 25, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/dda428640113d6a2c30225ea33f1387e784b7289
3007abc Remove the recently added "Limit $PATH" step EliahKagan Sep 26, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/3007abc6d229bcfe6643963f648597b7e231ab3d
4860f70 Further reduce differences between test workflows EliahKagan Sep 26, 2023 https://github.com/gitpython-developers/GitPython/pull/1679/commits/4860f701b96dc07ac7c489c74c06cae069ae3cd1
Clear filters https://github.com/gitpython-developers/GitPython/pull/1679/files
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1679/files
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1679/files
cygwin-test.yml https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5
lint.yml https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-107e910e9f2ebfb9a741fa10b2aa7100cc1fc4f5f3aca2dfe78b905cbd73c0d2
pythonpackage.yml https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
pyproject.toml https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
test-requirements.txt https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-fac4c6890301d4de5c3f4266837803d5240c84a3d8b6c735bbc6a64c39d2f94e
test_base.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-1a293b58d544ac5f9d384afd0652dc7e9e17ae7564df252dd5a8fc39543ee0e6
test_config.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d
test_fun.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763
test_index.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
test_repo.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
test_submodule.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-78179a32c1d54a6b78b018ee57328d6ea9424fbfbdbb36caf15e290331621024
test_tree.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-7cdd6fb66d4a6f7b0d0dd20479ff5bc7a21988663cf8c80d5d87e26ec2c6c4f2
test_util.py https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-62b93f19eeb2c5ff6e26eaccf3f63ee6641e87f3a6ccfc2ffb0dec86925ae245
.github/workflows/cygwin-test.ymlhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/.github/workflows/cygwin-test.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5
.github/workflows/lint.ymlhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-107e910e9f2ebfb9a741fa10b2aa7100cc1fc4f5f3aca2dfe78b905cbd73c0d2
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/.github/workflows/lint.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-107e910e9f2ebfb9a741fa10b2aa7100cc1fc4f5f3aca2dfe78b905cbd73c0d2
.github/workflows/pythonpackage.ymlhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/.github/workflows/pythonpackage.yml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0
pyproject.tomlhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/pyproject.toml
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-50c86b7ed8ac2cf95bd48334961bf0530cdc77b5a56f852c5c61b89d735fd711
test-requirements.txthttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-fac4c6890301d4de5c3f4266837803d5240c84a3d8b6c735bbc6a64c39d2f94e
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/test-requirements.txt
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-fac4c6890301d4de5c3f4266837803d5240c84a3d8b6c735bbc6a64c39d2f94e
test/test_base.pyhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-1a293b58d544ac5f9d384afd0652dc7e9e17ae7564df252dd5a8fc39543ee0e6
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/test/test_base.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-1a293b58d544ac5f9d384afd0652dc7e9e17ae7564df252dd5a8fc39543ee0e6
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-1a293b58d544ac5f9d384afd0652dc7e9e17ae7564df252dd5a8fc39543ee0e6
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-1a293b58d544ac5f9d384afd0652dc7e9e17ae7564df252dd5a8fc39543ee0e6
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-1a293b58d544ac5f9d384afd0652dc7e9e17ae7564df252dd5a8fc39543ee0e6
test/test_config.pyhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/test/test_config.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d
test/test_fun.pyhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/test/test_fun.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763
test/test_index.pyhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/test/test_index.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72
test/test_repo.pyhttps://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
View file https://github.com/EliahKagan/GitPython/blob/4860f701b96dc07ac7c489c74c06cae069ae3cd1/test/test_repo.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1679/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
https://github.com/gitpython-developers/GitPython/pull/1679/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1679/files
https://github.com
Termshttps://docs.github.com/site-policy/github-terms/github-terms-of-service
Privacyhttps://docs.github.com/site-policy/privacy-policies/github-privacy-statement
Securityhttps://github.com/security
Statushttps://www.githubstatus.com/
Communityhttps://github.community/
Docshttps://docs.github.com/
Contacthttps://support.github.com?tags=dotcom-footer

Viewport: width=device-width


URLs of crawlers that visited me.