https://github.com/python/cpython/commit/1c1088b1da5a7484b7b04e90ccc47aa362e709eb
commit: 1c1088b1da5a7484b7b04e90ccc47aa362e709eb
branch: main
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-07-20T22:46:59Z
summary:

gh-154307: Fix TemporaryDirectory cleanup on DragonFly BSD (GH-154309)

On DragonFly BSD, removing a file or directory with the UF_NOUNLINK flag
fails with EISDIR (IsADirectoryError) instead of EPERM, so the cleanup did
not reset the flags.  Handle IsADirectoryError the same as PermissionError.

Co-authored-by: Claude Opus 4.8 (1M context) <[email protected]>

files:
A Misc/NEWS.d/next/Library/2026-07-21-01-13-39.gh-issue-154307.UNFKL4.rst
M Lib/tempfile.py

diff --git a/Lib/tempfile.py b/Lib/tempfile.py
index 485038417c65c6..b5f799f8d68554 100644
--- a/Lib/tempfile.py
+++ b/Lib/tempfile.py
@@ -929,7 +929,8 @@ def __init__(self, suffix=None, prefix=None, dir=None,
     @classmethod
     def _rmtree(cls, name, ignore_errors=False, repeated=False):
         def onexc(func, path, exc):
-            if isinstance(exc, PermissionError):
+            # On DragonFly BSD, UF_NOUNLINK removal fails with EISDIR, not 
EPERM.
+            if isinstance(exc, (PermissionError, IsADirectoryError)):
                 if repeated and path == name:
                     if ignore_errors:
                         return
diff --git 
a/Misc/NEWS.d/next/Library/2026-07-21-01-13-39.gh-issue-154307.UNFKL4.rst 
b/Misc/NEWS.d/next/Library/2026-07-21-01-13-39.gh-issue-154307.UNFKL4.rst
new file mode 100644
index 00000000000000..fdba0c2940f005
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2026-07-21-01-13-39.gh-issue-154307.UNFKL4.rst
@@ -0,0 +1,3 @@
+Fix :meth:`tempfile.TemporaryDirectory.cleanup` on DragonFly BSD, where 
removing
+a file with the ``UF_NOUNLINK`` flag failed with ``EISDIR`` instead of
+``EPERM``.

_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]

Reply via email to