GH-125413: pathlib ABCs: use caching path.info.exists() when globbing (#130422)

Call `ReadablePath.info.exists()` rather than `ReadablePath.exists()` when
globbing so that we use (or populate) the `info` cache.
This commit is contained in:
Barney Gale 2025-02-24 19:07:54 +00:00 committed by GitHub
parent d73d69e232
commit 48c84a400a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 9 additions and 10 deletions

View File

@ -533,7 +533,9 @@ class _PathGlobber(_GlobberBase):
"""Provides shell-style pattern matching and globbing for pathlib paths.
"""
lexists = operator.methodcaller('exists', follow_symlinks=False)
@staticmethod
def lexists(path):
return path.info.exists(follow_symlinks=False)
@staticmethod
def scandir(path):

View File

@ -316,14 +316,11 @@ class ReadablePath(JoinablePath):
paths.append((path, dirnames, filenames))
try:
for child in path.iterdir():
try:
if child.info.is_dir(follow_symlinks=follow_symlinks):
if not top_down:
paths.append(child)
dirnames.append(child.name)
else:
filenames.append(child.name)
except OSError:
if child.info.is_dir(follow_symlinks=follow_symlinks):
if not top_down:
paths.append(child)
dirnames.append(child.name)
else:
filenames.append(child.name)
except OSError as error:
if on_error is not None:

View File

@ -1107,7 +1107,7 @@ class ReadablePathTest(JoinablePathTest):
p = P(self.base)
q = p / "FILEa"
given = set(p.glob("FILEa"))
expect = {q} if q.exists() else set()
expect = {q} if q.info.exists() else set()
self.assertEqual(given, expect)
self.assertEqual(set(p.glob("FILEa*")), set())