René's URL Explorer Experiment


Title: Make the rmtree callback Windows-only by EliahKagan · Pull Request #1739 · gitpython-developers/GitPython · GitHub

Open Graph Title: Make the rmtree callback Windows-only by EliahKagan · Pull Request #1739 · gitpython-developers/GitPython

X Title: Make the rmtree callback Windows-only by EliahKagan · Pull Request #1739 · gitpython-developers/GitPython

Description: Fixes #1738 Changes Added a test for #1738. Fixed the bug. Updated other tests of rmtree accordingly and improves how they are organized. In addition to failing before the fix and passing afterwards, the test also is run on Windows, where it always passed and continues to pass after the fix, providing further assurance that Windows was never affected. The bug itself, as well as the high-level considerations in fixing it, why this approach is not a breaking change, and why I took this approach rather than doing something else, are presented in #1738, and I think need not be repeated here. There are a few considerations pertaining to the specific code changes here that I think are worth calling attention to briefly: The entire callback is used only on Windows now, since there remains nothing in it that should ever be done on any other system. Because of this, setting HIDE_WINDOWS_KNOWN_ERRORS to True on a non-Windows system, which should never be done (and has fortunately never happened as a result of the same-named environment variable being set), no longer affects the behavior of rmtree. I would consider this a benefit, and I've adjusted the tests for it accordingly. This is part of the gradual improvement and reduction of Windows-specific logic in git.util.rmtree, and reduction in the effect of HIDE_WINDOWS_KNOWN_ERRORS. It is thus a small further step toward #790. The reasoning that this is not a breaking change is based on what the os.chmod call does and does not do. But this also makes a failure not retry deletion (since there is nothing it would do to improve the situation for a retry). One can sometimes relinquish the rest of one's time slice with time.sleep(0) or similar to try to let another process release a resource, which making an ineffective system call and retrying might be a much less reliable way of sometimes doing. But for deleting files that should not be necessary or helpful outside Windows, which didn't have the bug and whose behavior is not changed. Thus I don't think an ineffective system call and a retry can help at all. So this is not a breaking change by that mechanism either. (Separately, and on a separate branch, I did try os.sleep(0) to see if it alleviated the PermissionError problem on Windows that is related to files being open by another process; it did not.) I've taken the opportunity to make some further improvements to other tests of git.util.rmtree in test_util.py. I think they are now somewhat more readable and a bit easier to modify further. We are still testing somewhat more Windows-related behavior on non-Windows systems than I think will ultimately be necessary--due to some previous additions I had made there--but I'm reluctant to try and pare that down until there are Windows CI job. My original motivation for looking at that code, which led to discovering the bug, was to simplify the situation around HIDE_WINDOWS_KNOWN_ERRORS so it would be easier for me to reason about its interaction with and significance to the near-future Windows CI jobs. So this may be considered a step toward that as well.

Open Graph Description: Fixes #1738 Changes Added a test for #1738. Fixed the bug. Updated other tests of rmtree accordingly and improves how they are organized. In addition to failing before the fix and passing afterwa...

X Description: Fixes #1738 Changes Added a test for #1738. Fixed the bug. Updated other tests of rmtree accordingly and improves how they are organized. In addition to failing before the fix and passing afterwa...

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

X: @github

direct link

Domain: github.com

route-pattern/:user_id/:repository/pull/:id/files(.:format)
route-controllerpull_requests
route-actionfiles
fetch-noncev2:6942db91-f29f-23ba-e78c-fcc586d61665
current-catalog-service-hashae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b
request-idD096:182EAE:763C85:A24A06:6968967A
html-safe-nonce14122b36f33b2788749f5fc5bedb7a134b57cb421c7700cf2ddac0755809e715
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMDk2OjE4MkVBRTo3NjNDODU6QTI0QTA2OjY5Njg5NjdBIiwidmlzaXRvcl9pZCI6IjQwNzYzMjAyNjIzMDQ4NjM4NjYiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==
visitor-hmacee9f18a3baaf57e558e148ed58dddf707322850beae0e2aa66b69d806b5d62c9
hovercard-subject-tagpull_request:1599951648
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/1739/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:altFixes #1738 Changes Added a test for #1738. Fixed the bug. Updated other tests of rmtree accordingly and improves how they are organized. In addition to failing before the fix and passing afterwa...
og:site_nameGitHub
og:typeobject
hostnamegithub.com
expected-hostnamegithub.com
None50f46dc2d6192249fd8ebf20e76c800f4f2596d4a5f3ab63dd63a754df154f54
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
releasefef287f17234b4529a4b112a3d47fe8551e32ddd
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/gitpython-developers/GitPython/pull/1739/files#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fgitpython-developers%2FGitPython%2Fpull%2F1739%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%2F1739%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/1739/files
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1739/files
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1739/files
gitpython-developers https://github.com/gitpython-developers
GitPythonhttps://github.com/gitpython-developers/GitPython
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1739/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/1739/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:rmtreehttps://github.com/EliahKagan/GitPython/tree/rmtree
Conversation 1 https://github.com/gitpython-developers/GitPython/pull/1739
Commits 6 https://github.com/gitpython-developers/GitPython/pull/1739/commits
Checks 0 https://github.com/gitpython-developers/GitPython/pull/1739/checks
Files changed https://github.com/gitpython-developers/GitPython/pull/1739/files
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1739/files
Make the rmtree callback Windows-only https://github.com/gitpython-developers/GitPython/pull/1739/files#top
Show all changes 6 commits https://github.com/gitpython-developers/GitPython/pull/1739/files
5335416 Test that rmtree doesn't chmod outside the tree EliahKagan Oct 30, 2023 https://github.com/gitpython-developers/GitPython/pull/1739/commits/53354162f8e785ce39fb5dda85929fdc10e2b1b6
fd78a53 One approach to the symlink-following bug EliahKagan Oct 30, 2023 https://github.com/gitpython-developers/GitPython/pull/1739/commits/fd78a53f70a70c2ce8d891f8eb0692f4ab787e25
6de8e67 Refactor current fix for symlink-following bug EliahKagan Nov 5, 2023 https://github.com/gitpython-developers/GitPython/pull/1739/commits/6de8e676c55170f073b64471e78b606c9c01b757
e8cfae8 Test that PermissionError is only wrapped on Windows EliahKagan Nov 5, 2023 https://github.com/gitpython-developers/GitPython/pull/1739/commits/e8cfae89657b941ffd824afc9c11891d79952624
8a22352 Extract some shared patching code to a helper EliahKagan Nov 5, 2023 https://github.com/gitpython-developers/GitPython/pull/1739/commits/8a22352407638923b9b89be66a30a44b0bb50690
b226f3d Remove demonstration script EliahKagan Nov 6, 2023 https://github.com/gitpython-developers/GitPython/pull/1739/commits/b226f3dd04c16d8fc4ef4044ad81bb72be8683d1
Clear filters https://github.com/gitpython-developers/GitPython/pull/1739/files
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1739/files
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1739/files
util.py https://github.com/gitpython-developers/GitPython/pull/1739/files#diff-cb13395ac36dd593e722ec548880a091f39732af5c934880144d1a95de67944e
test_util.py https://github.com/gitpython-developers/GitPython/pull/1739/files#diff-62b93f19eeb2c5ff6e26eaccf3f63ee6641e87f3a6ccfc2ffb0dec86925ae245
git/util.pyhttps://github.com/gitpython-developers/GitPython/pull/1739/files#diff-cb13395ac36dd593e722ec548880a091f39732af5c934880144d1a95de67944e
View file https://github.com/EliahKagan/GitPython/blob/b226f3dd04c16d8fc4ef4044ad81bb72be8683d1/git/util.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1739/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1739/files#diff-cb13395ac36dd593e722ec548880a091f39732af5c934880144d1a95de67944e
https://github.com/gitpython-developers/GitPython/pull/1739/files#diff-cb13395ac36dd593e722ec548880a091f39732af5c934880144d1a95de67944e
test/test_util.pyhttps://github.com/gitpython-developers/GitPython/pull/1739/files#diff-62b93f19eeb2c5ff6e26eaccf3f63ee6641e87f3a6ccfc2ffb0dec86925ae245
View file https://github.com/EliahKagan/GitPython/blob/b226f3dd04c16d8fc4ef4044ad81bb72be8683d1/test/test_util.py
Open in desktop https://desktop.github.com
https://github.co/hiddenchars
https://github.com/gitpython-developers/GitPython/pull/1739/{{ revealButtonHref }}
https://github.com/gitpython-developers/GitPython/pull/1739/files#diff-62b93f19eeb2c5ff6e26eaccf3f63ee6641e87f3a6ccfc2ffb0dec86925ae245
https://github.com/gitpython-developers/GitPython/pull/1739/files#diff-62b93f19eeb2c5ff6e26eaccf3f63ee6641e87f3a6ccfc2ffb0dec86925ae245
https://github.com/gitpython-developers/GitPython/pull/1739/files#diff-62b93f19eeb2c5ff6e26eaccf3f63ee6641e87f3a6ccfc2ffb0dec86925ae245
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.