From: Barney Gale Date: Tue, 9 Jan 2024 19:11:17 +0000 (+0000) Subject: GH-113528: Deoptimise `pathlib._abc.PathBase._make_child_relpath()` (#113532) X-Git-Tag: v3.13.0a3~129 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9100fc407e8c7038e7214b600b4ae568ae5510e3;p=thirdparty%2FPython%2Fcpython.git GH-113528: Deoptimise `pathlib._abc.PathBase._make_child_relpath()` (#113532) Call straight through to `joinpath()` in `PathBase._make_child_relpath()`. Move optimised/caching code to `pathlib.Path._make_child_relpath()` --- diff --git a/Lib/pathlib/__init__.py b/Lib/pathlib/__init__.py index a432d45bfed3..749c68d2999b 100644 --- a/Lib/pathlib/__init__.py +++ b/Lib/pathlib/__init__.py @@ -405,6 +405,22 @@ class Path(_abc.PathBase, PurePath): path._tail_cached = self._tail + [entry.name] return path + def _make_child_relpath(self, name): + path_str = str(self) + tail = self._tail + if tail: + path_str = f'{path_str}{self.pathmod.sep}{name}' + elif path_str != '.': + path_str = f'{path_str}{name}' + else: + path_str = name + path = self.with_segments(path_str) + path._str = path_str + path._drv = self.drive + path._root = self.root + path._tail_cached = tail + [name] + return path + def glob(self, pattern, *, case_sensitive=None, follow_symlinks=None): """Iterate over this subtree and yield all existing files (of any kind, including directories) matching the given relative pattern. diff --git a/Lib/pathlib/_abc.py b/Lib/pathlib/_abc.py index be22ecef4d21..0e442ae4809c 100644 --- a/Lib/pathlib/_abc.py +++ b/Lib/pathlib/_abc.py @@ -753,20 +753,7 @@ class PathBase(PurePathBase): return entry def _make_child_relpath(self, name): - path_str = str(self) - tail = self._tail - if tail: - path_str = f'{path_str}{self.pathmod.sep}{name}' - elif path_str != '.': - path_str = f'{path_str}{name}' - else: - path_str = name - path = self.with_segments(path_str) - path._str = path_str - path._drv = self.drive - path._root = self.root - path._tail_cached = tail + [name] - return path + return self.joinpath(name) def glob(self, pattern, *, case_sensitive=None, follow_symlinks=None): """Iterate over this subtree and yield all existing files (of any