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/checks(.:format)
route-controllerpull_requests
route-actionchecks
fetch-noncev2:a51c8cae-336a-93fd-bcb0-a338d424e1af
current-catalog-service-hash87dc3bc62d9b466312751bfd5f889726f4f1337bdff4e8be7da7c93d6c00a25a
request-id9404:1E494A:2B4ED:3B222:6968AFF6
html-safe-nonce7511dd183b00efa6794f8c7fe8d0434bdb178214061e94324c365c69628e87dc
visitor-payloadeyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI5NDA0OjFFNDk0QToyQjRFRDozQjIyMjo2OTY4QUZGNiIsInZpc2l0b3JfaWQiOiIyMjAxNTAwNTkwMTYxODMzOTc0IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0=
visitor-hmace9711f100172559f0bf7d7f5fcfe93e8eb7694e5d1a5e2f354122bfba5bbe875
hovercard-subject-tagpull_request:1599951648
github-keyboard-shortcutsrepository,pull-request-list,pull-request-conversation,pull-request-files-changed,checks,copilot
google-site-verificationApib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I
octolytics-urlhttps://collector.github.com/github/collect
analytics-location///pull_requests/show/checks
fb:app_id1401488693436528
apple-itunes-appapp-id=1477376905, app-argument=https://github.com/gitpython-developers/GitPython/pull/1739/checks
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
Nonefdc7c66bd36a6c12eb8e771e806db863266e573fc299e77f27505a768d4f8a98
turbo-cache-controlno-preview
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 full-width-p-0
disable-turbofalse
browser-stats-urlhttps://api.github.com/_private/browser/stats
browser-errors-urlhttps://api.github.com/_private/browser/errors
release3223a6503d318917691422cdadfbe16cd8fb21e5
ui-targetfull
theme-color#1e2327
color-schemelight dark

Links:

Skip to contenthttps://github.com/gitpython-developers/GitPython/pull/1739/checks#start-of-content
https://github.com/
Sign in https://github.com/login?return_to=https%3A%2F%2Fgithub.com%2Fgitpython-developers%2FGitPython%2Fpull%2F1739%2Fchecks
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%2Fchecks
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%2Fchecks&source=header-repo&source_repo=gitpython-developers%2FGitPython
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1739/checks
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1739/checks
Reloadhttps://github.com/gitpython-developers/GitPython/pull/1739/checks
gitpython-developers https://github.com/gitpython-developers
GitPythonhttps://github.com/gitpython-developers/GitPython
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1739/checks
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/checks
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/checks
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1739/checks
Make the rmtree callback Windows-only https://github.com/gitpython-developers/GitPython/pull/1739/checks#top
Please reload this pagehttps://github.com/gitpython-developers/GitPython/pull/1739/checks
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.