René's URL Explorer Experiment
Title: Test native Windows on CI by EliahKagan · Pull Request #1745 · gitpython-developers/GitPython · GitHub
Open Graph Title: Test native Windows on CI by EliahKagan · Pull Request #1745 · gitpython-developers/GitPython
X Title: Test native Windows on CI by EliahKagan · Pull Request #1745 · gitpython-developers/GitPython
Description: This expands the CI test matrix in the main test workflow, pythonpackage.yml, so that it is parameterized not only by Python version but also by operating system. Now it tests on both Ubuntu and Windows. It also adds conditional xfail markings with precise conditions and brief descriptions of the expected failures.
Most of the detailed information about specific changes in this pull request is in the commit messages. I give general information here, as well as covering, in some detail, a few areas where I think it is not readily apparent (and maybe I am wrong) what the best approach is, or what changes should be included.
Approach to adding xfail markings
A number of tests were known always to fail on Windows, with some others known to fail on Windows on particular versions or other conditions. As discussed in #1654 (comment), I have not attempted to actually fix the failures. Instead, I have marked each failing test case with a conditional xfail marking with a description of the failure and the exception with which the test fails. I have sought to make the conditions precise. Most of them are simply that a test fails on native Windows, so the condition is os.name == "nt", but some of the conditions are more specific. In some cases there are really multiple independent expected causes of failure, so some have multiple xfail markings. (pytest supports stacking them in this way.)
I have tried to document what is currently known about the failures, including known or suspected information about their causes, in the descriptions, and sometimes in more detail in the commit messages that added them. Sometimes this takes the form of a reference to an existing issue, and for some others there may be an existing issue I did not manage to identify, but it is likely that a few bugs are currently only "reported" in commit messages in this PR. In some cases I anticipate I can fix a bug soon; others might benefit from having an issue opened for them.
(An exception is #1630, for which I added xfail marks in 6e477e3, which I did not document as thoroughly as I could have. I hope to open a PR to remedy #1630 as soon as Windows has CI test jobs--which if this PR is approved would be at that point--so I figured the commit message didn't need much information.)
The WinBashStatus class in test_index
Some more detailed information about this appears in commit messages.
The original motivation for more precise detection of when bash.exe is the WSL wrapper was to fix CI. On the Windows CI runners, running bash.exe in a shell (any kind of shell) runs Git Bash, which is not related to WSL. But Popen finds the WSL-wrapper bash.exe in System32 instead, because the way searching for executables works on Windows differs significantly between the shell and non-shell case. This is an intentional design choice in Windows, not GitPython nor even Python itself. But I think it's accurate to say GitPython must contend with it and, more importantly, some users of GitPython may be relying on it, perhaps even without knowing they are.
When a program is run without using a shell and a search must be performed because just the name of the executable is given, a few directories, including System32, are expected to be (and typically are) searched first, before the PATH environment variable is even used. This keeps a shutil.which-based technique from working. There are other important differences in search behavior of shutil.which and Popen, but that's the difference that's relevant here.
There are three related issues:
One of the tests currently fails on WSL bash, while passing on native bash (like Git Bash).
When bash.exe is found in System32, and it is the WSL wrapper, that does not imply the existence of any installed distributions (i.e., GNU/Linux systems to run in WSL). This is a common situation. Even when some Windows components needed for WSL to work are not yet installed, bash.exe can exist there, yet it does not always. (This is also the situation on CI when WSL is not set up.) Because the tests are xfail when bash.exe is altogether absent, I think it makes sense also to xfail them in the common situation that bash.exe can't run bash in a WSL-hosted distribution because no such distribution is present.
Distinguishing expected and unexpected WSL failures, and failures not related to WSL, is complicated by how, while determining the status of WSL on a machine is usually fairly easy interactively, it seems there is no trivial way to do so programmatically in way that covers all cases, or even all common cases.
But the advantage of doing it seems significant to me: not only does this make it more efficient to interpret and document test failures, it also should be helpful in investigating and debugging possible future design changes that seek to build on #1399, in a sufficiently backward-compatible way, to retain its benefits (see #703, #971), while avoiding unexpected behavior. (If it can be done in a way that is non-breaking for current users of hooks on Windows, perhaps in the future Git Bash can be used as the default way to run hooks, with other approaches, including WSL, available as backup strategies or if specified.)
I wrote WinBashStatus with the intention that, if necessary, it could be retained for an extended time. However, my hope for it is that it will actually disappear (perhaps with some insights from the process making their way into other code). If, in the future, hooks are run on Windows in a way that works on more systems, and has fewer strange edge cases, then there may be no more need for it or anything like it.
I have tried to make it work properly locally as well as on CI. To work locally, it needs to avoid language and locale related limitations other than those those already present. Because some aspects of the approach I used are not obvious, I've included comments about it. They were originally longer, with parenthesized examples of locale-related situations, but that seemed more detailed than necessary, so I removed them in e00fffc. (But I can bring those back if desired.)
Which versions should we test?
This PR currently deviates from the preferences expressed in #1654 (comment) in one significant way, which can be changed if you wish. At the time of that discussion, we both held the view that it would be good to test only the lower and upper bounds of the supported version range for Windows. The process of adding these tests has led me to the view that it may be better, at least for now, to test all six versions on Windows (as is done on Ubuntu).
Initially I had them all enabled for the purpose of developing the changes here and planned to remove some at the end, but the reason I now advocate keeping them all for the time being, are, from most to least significant:
The native Windows tests are much faster than I had feared, running much closer to the speed of the Ubuntu jobs than of the Cygwin job. (This is especially remarkable considering that it holds up even with them installing Debian via WSL in the Windows test runner to run the hook tests in test_index.py. I think there is value in running those tests, but their xfail marks do consider bash.exe being the WSL wrapper, yet no WSL systems being installed, as an expected failure condition. So if necessary, the setup-wsl step can be dropped to gain that minute. As detailed below, I don't know if caching works for the runs in an open PR, so you may observe further delay here.)
The conditions under which tests fail on Windows are weirder than I had expected, in at least one way that specifically benefits from testing more versions: TestSubmodule.test_rename newly fails in 3.12 with a "being used by another process" PermissionError, possibly due to GC changes. Because of the role of such errors in #790 and #1333, it seems to me that easily distinguishing what versions have a failure, before and after code changes that potentially affect the test, might be helpful in the near future. To do this would at least require a 3.11 job.
The lower bound GitPython currently supports is 3.7. There are a number of important changes in 3.8, which so far seem not to have been an issue; most special-casing of 3.7 seems to have been in test suite only. To ensure that changes (including security fixes) are effective on 3.7, it should be tested on Windows. To decide what to do about it when that breaks, 3.8 should be tested as well.
The latest Python build the Cygwin project currently packages is 3.9; for this reason, it is probably the most used on Cygwin, and it makes sense that it is the version tested in the Cygwin job. I had not until recently considered the benefits of being able to compare 3.9 results between native Windows and Cygwin. I think this would avoid situations where one might worry the problem is with 3.9, though that may only be a small boon. However, the stark difference in performance between native Windows and Cygwin makes me think the Cygwin job could be sped up. (For example, it may be possible to use the GitHub Actions caching feature to do I/O in a faster way for installing Cygwin and/or GitPython's dependencies in the Cygwin system.) This is another area where the ability to compare could be helpful.
Most of the benefit could be gotten by testing 3.7, 3.8, 3.11, and 3.12 (the last point above is less compelling than the others, I think). However, this is still much more than the original idea of testing just a couple versions. It seems to me that the additional resource usage of testing two more versions is worthwhile for the benefit of comprehensively testing all the versions GitPython officially supports. I also think other approaches for decreasing undesired load might be preferable, such as removing fail-fast: false (the Ubuntu jobs, if desired, could still be set to continue even if another job has failed), skipping the documentation-building step on some or all Windows jobs, and/or either not installing WSL for the hook tests or switching the distribution to Alpine Linux.
With many pushes over a short time--as for example in this pull request, where I pushed the commits separately with ten second delays in between, to make it easy to inspect intermediate CI results--there can be more jobs queued than immediately available runners. (I believe the number of runners is limited per organization.) It is in that case that the number of tests can be most of an issue. Even if you decide to accept this PR without the number of Windows jobs being decreased, it might turn out later that this is annoying. I accept that you may know now that you want fewer Windows test jobs, but also, I understand that if you accept this as it is now, that doesn't mean all the jobs will be kept forever.
setup-wsl and caching
On my fork, the setup-wsl step seems usually to take between 30 and 90 seconds, and most often near the low end.
I did not disable GitHub Actions caching on setup-wsl. Based on how it works in my fork, I expect it to take up 82 MB. I think this is probably fine, and it can be turned off if desired, but I wanted to mention it just in case. I believe GitHub Actions caching quotas are per-organization. I expect that turning off caching (while still installing WSL) would make things somewhat slower.
I am unsure if caching will actually work on it in the CI jobs run on this repository due to the pull-request trigger. My vague recollection is that caching does not happen for open PRs that introduce it. If that is the case, then the amount by which installing WSL slows down each Windows job, as observed here, may be more than I have observed.
What is not done here
It seemed to me that the bash.exe status classification logic in test_index (described above) was easier to do in this PR than separately, because it facilitates precise xfail markings. However, other substantial changes that could in principle be part of this PR but can be omitted are omitted. Specifically:
I have not merged cygwin-test.yml into pythonpackage.yml. I had hoped to do that while adding native Windows tests, but I now think it is best deferred to a later PR. One reason is for more effective reviewing: if merging them produces conditional logic whose complexity is undesirable, it will be easier to notice the problem after the native Windows tests already exist for comparison. Another reason, though, is that I don't know what it will look like after changes have been made to it to speed it up (see above). If this involves adding caching, including for installing GitPython's dependencies, then that might cause it to diverge sufficiently from pythonpackage.yml that they should no longer be merged.
I have not changed the distribution used for WSL in the tests from Debian to Alpine Linux, even though I suspect this would speed things up (perhaps especially if caching is going to be turned off in the setup-wsl step). This requires either a fix for setup-wsl#50 or a workaround.
I have not added macOS jobs. I think this may be worth doing. I don't currently have the ability to test on Apple hardware. I can virtualize systems I don't regularly use in development, such as OpenIndiana or the Simplified Chinese localized build of Windows Server, on Ubuntu or Windows hosts. But virtualizing macOS is not similarly straightforward. Furthermore, some subtleties of Unix can be revealed by testing regularly on systems that are not GNU/Linux, of which macOS has GitHub Actions runners. (For #1738, the way I tested on macOS was to run a GitHub Actions job on a macOS runner with a tmate debugging step and SSH into it.) However, omitting that here limits scope and allows it to be evaluated separately. Limited testing indicates that, as on Windows, some different expected timings may have to be given in at least one of the performance tests in order to make macOS jobs pass.
I have not reduced the complexity of rmtree and HIDE_WINDOWS_KNOWN_ERRORS tests in test_util. With native Windows CI jobs, some of the behavior that is specific to Windows (especially since #1739) can probably be tested only on Windows, and skipped otherwise. I think there should be a way to make this change in a way that simplifies the tests. (As one example, every os.name == "nt" in a @pytest.mark.parametrize parameter set would just become True.) But it's not at all necessary to do that to achieve the aims here, and it would delay this PR.
I have not converted tests that skip due to unittest.SkipTest being raised in git.util.rmtree into xfail tests, made HIDE_WINDOWS_KNOWN_ERRORS default to False, or decreased its use (though I have made sure not to increase its use). It seems to me that such steps would be good progress toward a solution for #790, but I think they will be easier to do, as well as to review, if done after, and separately from, the addition of native Windows CI jobs.
Open Graph Description: This expands the CI test matrix in the main test workflow, pythonpackage.yml, so that it is parameterized not only by Python version but also by operating system. Now it tests on both Ubuntu and Wi...
X Description: This expands the CI test matrix in the main test workflow, pythonpackage.yml, so that it is parameterized not only by Python version but also by operating system. Now it tests on both Ubuntu and Wi...
Opengraph URL: https://github.com/gitpython-developers/GitPython/pull/1745
X: @github
direct link
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:d1fe357c-ba83-774b-8260-2dabb0b49666 |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | 908C:24A0FE:1071B3:160987:6969C839 |
| html-safe-nonce | 36ae429224b72205ba1d10e4489d34bbff34a6558f61a283f374c8b2ae728b1b |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5MDhDOjI0QTBGRToxMDcxQjM6MTYwOTg3OjY5NjlDODM5IiwidmlzaXRvcl9pZCI6IjU2NzA1Nzg1NzQ1OTA1OTMwODIiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | b58a5f9d7b25ff72aaba1022912f5e4ae802c09c3a1a4ec0a05d2531507e005a |
| hovercard-subject-tag | pull_request:1619320536 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | ///pull_requests/show/files |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/gitpython-developers/GitPython/pull/1745/files |
| twitter:image | https://avatars.githubusercontent.com/u/1771172?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/1771172?s=400&v=4 |
| og:image:alt | This expands the CI test matrix in the main test workflow, pythonpackage.yml, so that it is parameterized not only by Python version but also by operating system. Now it tests on both Ubuntu and Wi... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | acedec8b5f975d9e3d494ddd8f949b0b8a0de59d393901e26f73df9dcba80056 |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/gitpython-developers/GitPython git https://github.com/gitpython-developers/GitPython.git |
| octolytics-dimension-user_id | 503709 |
| octolytics-dimension-user_login | gitpython-developers |
| octolytics-dimension-repository_id | 1126087 |
| octolytics-dimension-repository_nwo | gitpython-developers/GitPython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1126087 |
| octolytics-dimension-repository_network_root_nwo | gitpython-developers/GitPython |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 83c08c21cdda978090dc44364b71aa5bc6dcea79 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
| Skip to content | https://github.com/gitpython-developers/GitPython/pull/1745/files#start-of-content |
|
| https://github.com/ |
|
Sign in
| https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fgitpython-developers%2FGitPython%2Fpull%2F1745%2Ffiles |
| GitHub CopilotWrite better code with AI | https://github.com/features/copilot |
| GitHub SparkBuild and deploy intelligent apps | https://github.com/features/spark |
| GitHub ModelsManage and compare prompts | https://github.com/features/models |
| MCP RegistryNewIntegrate external tools | https://github.com/mcp |
| ActionsAutomate any workflow | https://github.com/features/actions |
| CodespacesInstant dev environments | https://github.com/features/codespaces |
| IssuesPlan and track work | https://github.com/features/issues |
| Code ReviewManage code changes | https://github.com/features/code-review |
| GitHub Advanced SecurityFind and fix vulnerabilities | https://github.com/security/advanced-security |
| Code securitySecure your code as you build | https://github.com/security/advanced-security/code-security |
| Secret protectionStop leaks before they start | https://github.com/security/advanced-security/secret-protection |
| Why GitHub | https://github.com/why-github |
| Documentation | https://docs.github.com |
| Blog | https://github.blog |
| Changelog | https://github.blog/changelog |
| Marketplace | https://github.com/marketplace |
| View all features | https://github.com/features |
| Enterprises | https://github.com/enterprise |
| Small and medium teams | https://github.com/team |
| Startups | https://github.com/enterprise/startups |
| Nonprofits | https://github.com/solutions/industry/nonprofits |
| App Modernization | https://github.com/solutions/use-case/app-modernization |
| DevSecOps | https://github.com/solutions/use-case/devsecops |
| DevOps | https://github.com/solutions/use-case/devops |
| CI/CD | https://github.com/solutions/use-case/ci-cd |
| View all use cases | https://github.com/solutions/use-case |
| Healthcare | https://github.com/solutions/industry/healthcare |
| Financial services | https://github.com/solutions/industry/financial-services |
| Manufacturing | https://github.com/solutions/industry/manufacturing |
| Government | https://github.com/solutions/industry/government |
| View all industries | https://github.com/solutions/industry |
| View all solutions | https://github.com/solutions |
| AI | https://github.com/resources/articles?topic=ai |
| Software Development | https://github.com/resources/articles?topic=software-development |
| DevOps | https://github.com/resources/articles?topic=devops |
| Security | https://github.com/resources/articles?topic=security |
| View all topics | https://github.com/resources/articles |
| Customer stories | https://github.com/customer-stories |
| Events & webinars | https://github.com/resources/events |
| Ebooks & reports | https://github.com/resources/whitepapers |
| Business insights | https://github.com/solutions/executive-insights |
| GitHub Skills | https://skills.github.com |
| Documentation | https://docs.github.com |
| Customer support | https://support.github.com |
| Community forum | https://github.com/orgs/community/discussions |
| Trust center | https://github.com/trust-center |
| Partners | https://github.com/partners |
| GitHub SponsorsFund open source developers | https://github.com/sponsors |
| Security Lab | https://securitylab.github.com |
| Maintainer Community | https://maintainers.github.com |
| Accelerator | https://github.com/accelerator |
| Archive Program | https://archiveprogram.github.com |
| Topics | https://github.com/topics |
| Trending | https://github.com/trending |
| Collections | https://github.com/collections |
| Enterprise platformAI-powered developer platform | https://github.com/enterprise |
| GitHub Advanced SecurityEnterprise-grade security features | https://github.com/security/advanced-security |
| Copilot for BusinessEnterprise-grade AI features | https://github.com/features/copilot/copilot-business |
| Premium SupportEnterprise-grade 24/7 support | https://github.com/premium-support |
| Pricing | https://github.com/pricing |
| Search syntax tips | https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax |
| documentation | https://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%2F1745%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 |
| Reload | https://github.com/gitpython-developers/GitPython/pull/1745/files |
| Reload | https://github.com/gitpython-developers/GitPython/pull/1745/files |
| Reload | https://github.com/gitpython-developers/GitPython/pull/1745/files |
|
gitpython-developers
| https://github.com/gitpython-developers |
| GitPython | https://github.com/gitpython-developers/GitPython |
| Please reload this page | https://github.com/gitpython-developers/GitPython/pull/1745/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 page | https://github.com/gitpython-developers/GitPython/pull/1745/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 service | https://docs.github.com/terms |
| privacy statement | https://docs.github.com/privacy |
| Sign in | https://github.com/login?return_to=%2Fgitpython-developers%2FGitPython%2Fissues%2Fnew%2Fchoose |
| Byron | https://github.com/Byron |
| gitpython-developers:main | https://github.com/gitpython-developers/GitPython/tree/main |
| EliahKagan:ci-windows | https://github.com/EliahKagan/GitPython/tree/ci-windows |
|
Conversation
5
| https://github.com/gitpython-developers/GitPython/pull/1745 |
|
Commits
29
| https://github.com/gitpython-developers/GitPython/pull/1745/commits |
|
Checks
0
| https://github.com/gitpython-developers/GitPython/pull/1745/checks |
|
Files changed
| https://github.com/gitpython-developers/GitPython/pull/1745/files |
| Please reload this page | https://github.com/gitpython-developers/GitPython/pull/1745/files |
|
Test native Windows on CI
| https://github.com/gitpython-developers/GitPython/pull/1745/files#top |
|
Show all changes
29 commits
| https://github.com/gitpython-developers/GitPython/pull/1745/files |
|
2fd79f4
Add native Windows test jobs to CI matrix
EliahKagan Oct 15, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/2fd79f41fe1304be7bcaebec84394ab9e45961c5 |
|
6e477e3
Add xfail marks for IndexFile.from_tree failures
EliahKagan Nov 14, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/6e477e3a06e4b11d43ea118a9f18cae03fa211fd |
|
cd9d7a9
Mark test_clone_command_injection xfail on Windows
EliahKagan Nov 15, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/cd9d7a9d558273a1f82527890a1d69529a3ef1d5 |
|
f72e282
Mark test_diff_submodule xfail on Windows
EliahKagan Nov 15, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/f72e2821a3073c4e87915fe7e721512e16e4fa74 |
|
42a3d74
Mark TestSubmodule.test_rename xfail on Windows
EliahKagan Nov 15, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/42a3d74f529f34382b205c0ada46fb18df80c034 |
|
4abab92
Mark test_conditional_includes_from_git_dir xfail on Windows
EliahKagan Nov 15, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/4abab92cb0f4caf569cc4bd9a8084994a80733ce |
|
799c853
Improve ordering/grouping of a few imports
EliahKagan Nov 16, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/799c8536800e75d7ddaef2b588754234db363245 |
|
b284ad7
Mark test_create_remote_unsafe_url_allowed xfail on Windows
EliahKagan Nov 16, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/b284ad70291d24024b840fa659f54276cf9ceaa5 |
|
61d1fba
Mark unsafe-options "allowed" tests xfail on Windows
EliahKagan Nov 16, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/61d1fba6dd318e7f68b93b0e8b46050db0d03fa8 |
|
ad07ecb
Show PATH on CI
EliahKagan Nov 22, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/ad07ecb0151e64f3fa774099d8c69232df6bda23 |
|
2784e40
Show bash and other WSL-relevant info but not PATH
EliahKagan Nov 22, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/2784e403d6fd812650f29f1842db1e67344170a3 |
|
9717b8d
Install WSL system on CI for hook tests
EliahKagan Nov 17, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/9717b8d847b514f761ecaa423226054c73f2a325 |
|
5d11394
Fix and expand bash.exe xfail marks on hook tests
EliahKagan Nov 23, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/5d113942786b2cc86f5fd7bb228f9f75c8c78beb |
|
b215357
Simplify/clarify bash.exe check for hook tests; do it only once
EliahKagan Nov 24, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/b21535729ca695e47c52086abe390ca4e6792ae3 |
|
cabb572
Temporarily don't install WSL system to test xfail
EliahKagan Nov 24, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/cabb5728e75aab3ed73376702e219bd1514ee615 |
|
2875ffa
Put back WSL on Windows CI; pare down debug info
EliahKagan Nov 24, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/2875ffa083b1e136cd647e6d087a4747aa85a4bc |
|
0f8cd4c
Treat XPASS status as a test failure
EliahKagan Nov 24, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/0f8cd4ce4a7f942d793a8670257f8738ab18b757 |
|
82c361e
Correct TestSubmodule.test_rename xfail condition
EliahKagan Nov 24, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/82c361e7e1a20df96cc9e5c443b2c18fc20b18c9 |
|
0ae5dd1
Revert "Treat XPASS status as a test failure"
EliahKagan Nov 24, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/0ae5dd19d5e7256b0876987948774b48e207f231 |
|
0b7ee17
Refine TestSubmodule.test_rename xfail condition
EliahKagan Nov 25, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/0b7ee17849a48ca691eaa3cc5d3eb81a4e6592b7 |
|
8621e89
Reword comment in _WinBashStatus.check for clarity
EliahKagan Nov 25, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/8621e892ed5ed05b1a304c9ea25a460f376677bb |
|
7ff3cee
Make _WinBashStatus instances carry all their info
EliahKagan Nov 25, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/7ff3cee63c53520650db14bdf6e55551b8848567 |
|
d5ed266
Use bytes in bash.exe check; retest no-distro case
EliahKagan Nov 25, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/d5ed266f2208367e4300c29fa4cbda9cd2db0fb9 |
|
496acaa
Handle multiple encodings for WSL error messages
EliahKagan Nov 26, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/496acaac5d2cfcbe4edf8ace1bfae452f281ff15 |
|
d779a75
Don't assume WSL-related bash.exe error is English
EliahKagan Nov 27, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/d779a7546f4bf69783cf38be4679a0a229578ef9 |
|
9ac2438
Handle encodings better; make the sum type "public"
EliahKagan Nov 27, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/9ac243884ebe2d614f03302104064ef22b2aee0f |
|
b07e5c7
Put back WSL on Windows CI
EliahKagan Nov 28, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/b07e5c7d997b49d980bf3d2d749839726663b274 |
|
3303c74
Improve readability of WinBashStatus class
EliahKagan Nov 28, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/3303c740bd9aae3ec2fa6b0f1a750bba9ad2b60e |
|
e00fffc
Shorten comments on _decode steps
EliahKagan Nov 28, 2023
| https://github.com/gitpython-developers/GitPython/pull/1745/commits/e00fffc918da5cd6c3c749d1d2e59d8ae6835189 |
|
Clear filters
| https://github.com/gitpython-developers/GitPython/pull/1745/files |
| Please reload this page | https://github.com/gitpython-developers/GitPython/pull/1745/files |
| Please reload this page | https://github.com/gitpython-developers/GitPython/pull/1745/files |
|
cygwin-test.yml
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5 |
|
pythonpackage.yml
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0 |
|
test-requirements.txt
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-fac4c6890301d4de5c3f4266837803d5240c84a3d8b6c735bbc6a64c39d2f94e |
|
test_config.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d |
|
test_diff.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-a4c794e0849bb401148549f5efcaa756477ae6f7c2976d2ebf7cb56ff7850139 |
|
test_docs.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-e8640c3e0d2b1139c3e2ac635af5416e976b99fb1e2c5b4745830991dc492723 |
|
test_fun.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
|
test_index.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-21c27b991511d3d0e3a14b4dfb56017689de2fa114c3edf11c577bd1ce744b72 |
|
test_refs.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-0d8f1dff061a372fdf4946776e8277a271774b10c1684d1c28c1abd030340d0c |
|
test_remote.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-8f71eea0871a97cc5c7757598e3ffaeacb8cd38f6f5f1742e21fd07364d3a698 |
|
test_repo.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-f50d635cf31b095a03b42fc1a73681a9c4025bbeb58b81e72588ba37e00cff87 |
|
test_submodule.py
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-78179a32c1d54a6b78b018ee57328d6ea9424fbfbdbb36caf15e290331621024 |
| .github/workflows/cygwin-test.yml | https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5 |
|
View file
| https://github.com/EliahKagan/GitPython/blob/e00fffc918da5cd6c3c749d1d2e59d8ae6835189/.github/workflows/cygwin-test.yml |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/gitpython-developers/GitPython/pull/1745/{{ revealButtonHref }} |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-cf2326c301e0abbc3891bf5c0f476cf05faa2c2ddf165185fe6bffb10bd5aea5 |
| .github/workflows/pythonpackage.yml | https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0 |
|
View file
| https://github.com/EliahKagan/GitPython/blob/e00fffc918da5cd6c3c749d1d2e59d8ae6835189/.github/workflows/pythonpackage.yml |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/gitpython-developers/GitPython/pull/1745/{{ revealButtonHref }} |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-ee68bef8369ed7bc5460a288e72d62152784762ef66851e07bf134c4075a08f0 |
| test-requirements.txt | https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-fac4c6890301d4de5c3f4266837803d5240c84a3d8b6c735bbc6a64c39d2f94e |
|
View file
| https://github.com/EliahKagan/GitPython/blob/e00fffc918da5cd6c3c749d1d2e59d8ae6835189/test-requirements.txt |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/gitpython-developers/GitPython/pull/1745/{{ revealButtonHref }} |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-fac4c6890301d4de5c3f4266837803d5240c84a3d8b6c735bbc6a64c39d2f94e |
| test/test_config.py | https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d |
|
View file
| https://github.com/EliahKagan/GitPython/blob/e00fffc918da5cd6c3c749d1d2e59d8ae6835189/test/test_config.py |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/gitpython-developers/GitPython/pull/1745/{{ revealButtonHref }} |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-45fa5f8530eb815c0cf606032e587adedb04dc70e59b203535d51c44654cfc4d |
| test/test_diff.py | https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-a4c794e0849bb401148549f5efcaa756477ae6f7c2976d2ebf7cb56ff7850139 |
|
View file
| https://github.com/EliahKagan/GitPython/blob/e00fffc918da5cd6c3c749d1d2e59d8ae6835189/test/test_diff.py |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/gitpython-developers/GitPython/pull/1745/{{ revealButtonHref }} |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-a4c794e0849bb401148549f5efcaa756477ae6f7c2976d2ebf7cb56ff7850139 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-a4c794e0849bb401148549f5efcaa756477ae6f7c2976d2ebf7cb56ff7850139 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-a4c794e0849bb401148549f5efcaa756477ae6f7c2976d2ebf7cb56ff7850139 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-a4c794e0849bb401148549f5efcaa756477ae6f7c2976d2ebf7cb56ff7850139 |
| test/test_docs.py | https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-e8640c3e0d2b1139c3e2ac635af5416e976b99fb1e2c5b4745830991dc492723 |
|
View file
| https://github.com/EliahKagan/GitPython/blob/e00fffc918da5cd6c3c749d1d2e59d8ae6835189/test/test_docs.py |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/gitpython-developers/GitPython/pull/1745/{{ revealButtonHref }} |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-e8640c3e0d2b1139c3e2ac635af5416e976b99fb1e2c5b4745830991dc492723 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-e8640c3e0d2b1139c3e2ac635af5416e976b99fb1e2c5b4745830991dc492723 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-e8640c3e0d2b1139c3e2ac635af5416e976b99fb1e2c5b4745830991dc492723 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-e8640c3e0d2b1139c3e2ac635af5416e976b99fb1e2c5b4745830991dc492723 |
| test/test_fun.py | https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
|
View file
| https://github.com/EliahKagan/GitPython/blob/e00fffc918da5cd6c3c749d1d2e59d8ae6835189/test/test_fun.py |
|
Open in desktop
| https://desktop.github.com |
| https://github.co/hiddenchars |
| https://github.com/gitpython-developers/GitPython/pull/1745/{{ revealButtonHref }} |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
|
| https://github.com/gitpython-developers/GitPython/pull/1745/files#diff-5cb2634f8f8900d1066de2a2bcb417aa8acb26f269168a362b2d4e986a216763 |
| Please reload this page | https://github.com/gitpython-developers/GitPython/pull/1745/files |
|
| https://github.com |
| Terms | https://docs.github.com/site-policy/github-terms/github-terms-of-service |
| Privacy | https://docs.github.com/site-policy/privacy-policies/github-privacy-statement |
| Security | https://github.com/security |
| Status | https://www.githubstatus.com/ |
| Community | https://github.community/ |
| Docs | https://docs.github.com/ |
| Contact | https://support.github.com?tags=dotcom-footer |
Viewport: width=device-width
URLs of crawlers that visited me.