mirror of https://github.com/python/cpython
GH-113225: Speed up `pathlib._abc.PathBase.glob()` (#113556)
`PathBase._scandir()` is implemented using `iterdir()`, so we can use its results directly, rather than passing them through `_make_child_relpath()`.
This commit is contained in:
parent
db1c882239
commit
b664d91599
|
@ -299,6 +299,10 @@ class Path(_abc.PathBase, PurePath):
|
|||
def _scandir(self):
|
||||
return os.scandir(self)
|
||||
|
||||
def _make_child_entry(self, entry):
|
||||
# Transform an entry yielded from _scandir() into a path object.
|
||||
return self._make_child_relpath(entry.name)
|
||||
|
||||
def absolute(self):
|
||||
"""Return an absolute version of this path
|
||||
No normalization or symlink resolution is performed.
|
||||
|
|
|
@ -87,9 +87,8 @@ def _select_children(parent_paths, dir_only, follow_symlinks, match):
|
|||
continue
|
||||
except OSError:
|
||||
continue
|
||||
name = entry.name
|
||||
if match(name):
|
||||
yield parent_path._make_child_relpath(name)
|
||||
if match(entry.name):
|
||||
yield parent_path._make_child_entry(entry)
|
||||
|
||||
|
||||
def _select_recursive(parent_paths, dir_only, follow_symlinks):
|
||||
|
@ -112,12 +111,12 @@ def _select_recursive(parent_paths, dir_only, follow_symlinks):
|
|||
for entry in entries:
|
||||
try:
|
||||
if entry.is_dir(follow_symlinks=follow_symlinks):
|
||||
paths.append(path._make_child_relpath(entry.name))
|
||||
paths.append(path._make_child_entry(entry))
|
||||
continue
|
||||
except OSError:
|
||||
pass
|
||||
if not dir_only:
|
||||
yield path._make_child_relpath(entry.name)
|
||||
yield path._make_child_entry(entry)
|
||||
|
||||
|
||||
def _select_unique(paths):
|
||||
|
@ -788,6 +787,10 @@ class PathBase(PurePathBase):
|
|||
from contextlib import nullcontext
|
||||
return nullcontext(self.iterdir())
|
||||
|
||||
def _make_child_entry(self, entry):
|
||||
# Transform an entry yielded from _scandir() into a path object.
|
||||
return entry
|
||||
|
||||
def _make_child_relpath(self, name):
|
||||
path_str = str(self)
|
||||
tail = self._tail
|
||||
|
|
Loading…
Reference in New Issue