Skip to content

Commit

Permalink
Merge pull request #12137 from groodt/groodt-fix-deprecation-warning
Browse files Browse the repository at this point in the history
  • Loading branch information
uranusjr authored Jul 14, 2023
2 parents 38a8fb1 + 2c4947d commit e53cf3d
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
1 change: 1 addition & 0 deletions news/11957.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Fix deprecation warnings in Python 3.12 for usage of shutil.rmtree
9 changes: 7 additions & 2 deletions src/pip/_internal/utils/misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,10 +127,15 @@ def get_prog() -> str:
# Tenacity raises RetryError by default, explicitly raise the original exception
@retry(reraise=True, stop=stop_after_delay(3), wait=wait_fixed(0.5))
def rmtree(dir: str, ignore_errors: bool = False) -> None:
shutil.rmtree(dir, ignore_errors=ignore_errors, onerror=rmtree_errorhandler)
if sys.version_info >= (3, 12):
shutil.rmtree(dir, ignore_errors=ignore_errors, onexc=rmtree_errorhandler)
else:
shutil.rmtree(dir, ignore_errors=ignore_errors, onerror=rmtree_errorhandler)


def rmtree_errorhandler(func: Callable[..., Any], path: str, exc_info: ExcInfo) -> None:
def rmtree_errorhandler(
func: Callable[..., Any], path: str, exc_info: Union[ExcInfo, BaseException]
) -> None:
"""On Windows, the files in .svn are read-only, so when rmtree() tries to
remove them, an exception is thrown. We catch that here, remove the
read-only attribute, and hopefully continue without problems."""
Expand Down

0 comments on commit e53cf3d

Please sign in to comment.