summaryrefslogtreecommitdiffstats
path: root/Doc/whatsnew/3.8.rst
diff options
context:
space:
mode:
authorSteve Dower <steve.dower@python.org>2019-08-21 22:27:33 (GMT)
committerGitHub <noreply@github.com>2019-08-21 22:27:33 (GMT)
commitdf2d4a6f3d5da2839c4fc11d31511c8e028daf2c (patch)
treee60154de9e835976aed87ab51ac3d5d9fda7f45f /Doc/whatsnew/3.8.rst
parentbcc446f525421156fe693139140e7051d000592e (diff)
downloadcpython-df2d4a6f3d5da2839c4fc11d31511c8e028daf2c.zip
cpython-df2d4a6f3d5da2839c4fc11d31511c8e028daf2c.tar.gz
cpython-df2d4a6f3d5da2839c4fc11d31511c8e028daf2c.tar.bz2
bpo-37834: Normalise handling of reparse points on Windows (GH-15231)
bpo-37834: Normalise handling of reparse points on Windows * ntpath.realpath() and nt.stat() will traverse all supported reparse points (previously was mixed) * nt.lstat() will let the OS traverse reparse points that are not name surrogates (previously would not traverse any reparse point) * nt.[l]stat() will only set S_IFLNK for symlinks (previous behaviour) * nt.readlink() will read destinations for symlinks and junction points only bpo-1311: os.path.exists('nul') now returns True on Windows * nt.stat('nul').st_mode is now S_IFCHR (previously was an error)
Diffstat (limited to 'Doc/whatsnew/3.8.rst')
-rw-r--r--Doc/whatsnew/3.8.rst21
1 files changed, 21 insertions, 0 deletions
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index 93758e9..0294e9a 100644
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -808,6 +808,21 @@ A new :func:`os.memfd_create` function was added to wrap the
``memfd_create()`` syscall.
(Contributed by Zackery Spytz and Christian Heimes in :issue:`26836`.)
+On Windows, much of the manual logic for handling reparse points (including
+symlinks and directory junctions) has been delegated to the operating system.
+Specifically, :func:`os.stat` will now traverse anything supported by the
+operating system, while :func:`os.lstat` will only open reparse points that
+identify as "name surrogates" while others are opened as for :func:`os.stat`.
+In all cases, :attr:`stat_result.st_mode` will only have ``S_IFLNK`` set for
+symbolic links and not other kinds of reparse points. To identify other kinds
+of reparse point, check the new :attr:`stat_result.st_reparse_tag` attribute.
+
+On Windows, :func:`os.readlink` is now able to read directory junctions. Note
+that :func:`~os.path.islink` will return ``False`` for directory junctions,
+and so code that checks ``islink`` first will continue to treat junctions as
+directories, while code that handles errors from :func:`os.readlink` may now
+treat junctions as links.
+
os.path
-------
@@ -824,6 +839,9 @@ characters or bytes unrepresentable at the OS level.
environment variable and does not use :envvar:`HOME`, which is not normally set
for regular user accounts.
+:func:`~os.path.isdir` on Windows no longer returns true for a link to a
+non-existent directory.
+
:func:`~os.path.realpath` on Windows now resolves reparse points, including
symlinks and directory junctions.
@@ -912,6 +930,9 @@ format for new archives to improve portability and standards conformance,
inherited from the corresponding change to the :mod:`tarfile` module.
(Contributed by C.A.M. Gerlach in :issue:`30661`.)
+:func:`shutil.rmtree` on Windows now removes directory junctions without
+recursively removing their contents first.
+
ssl
---