Title: HIDE_WINDOWS_*_ERRORS environment variables are interpreted strangely · Issue #1698 · gitpython-developers/GitPython · GitHub
Open Graph Title: HIDE_WINDOWS_*_ERRORS environment variables are interpreted strangely · Issue #1698 · gitpython-developers/GitPython
X Title: HIDE_WINDOWS_*_ERRORS environment variables are interpreted strangely · Issue #1698 · gitpython-developers/GitPython
Description: Summary As noted in #1697: The HIDE_WINDOWS_KNOWN_ERRORS and HIDE_WINDOWS_FREEZE_ERRORS variables are intended to be affected by the same-named environment variables, but this does not work properly. They are True by default, but the onl...
Open Graph Description: Summary As noted in #1697: The HIDE_WINDOWS_KNOWN_ERRORS and HIDE_WINDOWS_FREEZE_ERRORS variables are intended to be affected by the same-named environment variables, but this does not work properl...
X Description: Summary As noted in #1697: The HIDE_WINDOWS_KNOWN_ERRORS and HIDE_WINDOWS_FREEZE_ERRORS variables are intended to be affected by the same-named environment variables, but this does not work properl...
Opengraph URL: https://github.com/gitpython-developers/GitPython/issues/1698
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"HIDE_WINDOWS_*_ERRORS environment variables are interpreted strangely","articleBody":"### Summary\r\n\r\nAs noted in #1697:\r\n\r\n\u003e The `HIDE_WINDOWS_KNOWN_ERRORS` and `HIDE_WINDOWS_FREEZE_ERRORS` variables are intended to be affected by the same-named environment variables, but this does not work properly. They are `True` by default, but the only way to use environment variables to set them to a false value is *to define the environment variable with an empty value* (since everything else, as a string, is truthy). In addition to being very unlikely to have been the intended behavior, this is also hard to do on Windows when using typical shells, because in both `cmd.exe` and PowerShell setting an environment variable as empty actually removes the variable altogether.\r\n\r\n### Details\r\n\r\nThe attributes have type `bool` outside native Windows systems (where they are `False`) and in native Windows systems where the environment variables don't exist (they are `True`):\r\n\r\nhttps://github.com/gitpython-developers/GitPython/blob/8107cbfeb1d56b2587d347c7f3d509ebef079950/git/util.py#L122-L126\r\n\r\nOtherwise they are the `str` values of the same-named environment variables. They are always used as conditions, and as such, the only ways to set them `False` on a native Windows system--besides editing that code, which in practice seems to be what is done--is to write to the attributes with Python code or to set the environment variables to the empty string.\r\n\r\nIn `bash` on Windows, such as Git Bash, this is easy to do, though not at all obvious that it should be done and also very unintuitive. In shells meant for Windows, `cmd.exe` and PowerShell, setting an environment variable to the empty string causes it to be automatically *unset*, and extra effort is required to actually set the empty string.\r\n\r\n### The tricky part\r\n\r\n`HIDE_WINDOWS_KNOWN_ERRORS` is defined in `git.util` [**and listed in `__all__`**](https://github.com/gitpython-developers/GitPython/blob/8107cbfeb1d56b2587d347c7f3d509ebef079950/git/util.py#L114). So it is a breaking change to remove or rename it. Because code that uses the GitPython library is explicitly allowed to assume the attribute will continue to exist, it's worth considering the subjective question of what, if anything, users can reasonably assume *about* it.\r\n\r\nAlthough comments shown above explains its original purpose, its semantics are not really documented anywhere, and nothing makes any statements about how it is set. Furthermore, if people are setting nonempty values that intuitively feel like they express falsehood--such as `0`--then they probably expect that this is setting it to `False` or some falsy value. Therefore, I think it's reasonable to regard the current behavior as a bug and fix it, even though actually removing or even officially deprecating the attribute should wait until later because it currently affects the behavior of `git.util.rmtree`, through [the callback](https://github.com/gitpython-developers/GitPython/blob/8107cbfeb1d56b2587d347c7f3d509ebef079950/git/util.py#L185-L196) it passes to `shutil.rmtree`.\r\n\r\nIn contrast, `HIDE_WINDOWS_FREEZE_ERRORS` is not listed in `__all__` and could be renamed, removed, or arbitrarily changed at any time. But as long as `HIDE_WINDOWS_KNOWN_ERRORS` remains in `git.util`, I don't think the presence `HIDE_WINDOWS_FREEZE_ERRORS` should be seen as any special problem.\r\n\r\nAlthough I don't advocate formally deprecating the `HIDE_WINDOWS_KNOWN_ERRORS` *attribute* just yet, the environment variable is another story. In addition to being parsed differently, the presence of either environment variable could cause a warning to be printed when `git.util` is loaded (which happens when the `git` module is loaded).\r\n\r\n### Context\r\n\r\nThis relates to the deeper issue #790. Fixing this narrower issue won't solve the problem that raising `SkipTest` as a result of failing to delete files can produce unpredictable effects in production--because it signals a condition that would typically be signaled by `PermissionError` or some other exception derived from `OSError`, and would bypass exception handling meant for that--as well as masking bugs in applications or other libraries that use GitPython by causing their automated tests to be skipped. But solving that will carry its own challenge. The main problem is not how to provide the functionality to the test suite, but instead that there may be code using GitPython that has come to rely on exceptions from deleting files being wrapped in `SkipTest`.\r\n\r\nAlthough I definitely think #790 *should* be solved, and there are various approaches to mitigating disruption from doing so, I think it is worth fixing this narrower issue of how the environment variables are interpreted now. I've included such a fix in #1700 (which also would fix #1699).","author":{"url":"https://github.com/EliahKagan","@type":"Person","name":"EliahKagan"},"datePublished":"2023-10-09T11:11:17.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":0},"url":"https://github.com/1698/GitPython/issues/1698"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:97c38826-f6f6-e9b1-b9e5-7ba51223868c |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B09E:12FBBB:9A308:CED8E:69684AFC |
| html-safe-nonce | 3ef22e0448cc6ff4e5dba1afc9332d705d64ad331761bac493c856ad18153471 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCMDlFOjEyRkJCQjo5QTMwODpDRUQ4RTo2OTY4NEFGQyIsInZpc2l0b3JfaWQiOiI3Mzk2ODIyOTQxMjc5MjEwMjM2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | 0e4b20be5b1332d03665128f59c446f69c6a13178761b928f016b7f4002d6b60 |
| hovercard-subject-tag | issue:1932829369 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/gitpython-developers/GitPython/1698/issue_layout |
| twitter:image | https://opengraph.githubassets.com/1afc17c98ae9c5a0c02cd6c1287c15dd0e5422c9445021286c8889c52e58efaf/gitpython-developers/GitPython/issues/1698 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/1afc17c98ae9c5a0c02cd6c1287c15dd0e5422c9445021286c8889c52e58efaf/gitpython-developers/GitPython/issues/1698 |
| og:image:alt | Summary As noted in #1697: The HIDE_WINDOWS_KNOWN_ERRORS and HIDE_WINDOWS_FREEZE_ERRORS variables are intended to be affected by the same-named environment variables, but this does not work properl... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | EliahKagan |
| hostname | github.com |
| expected-hostname | github.com |
| None | f16c57f41ed243e5b4dfe9b9bcd6828bd83080b1b6dbb4ff239bbe9745f12e0c |
| turbo-cache-control | no-preview |
| 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 |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | cfa7062cc6d4fe8fcb156bd33f4c97bd3b2470af |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width