]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
GH-113528: Deoptimise `pathlib._abc.PathBase._make_child_relpath()` (#113532)
authorBarney Gale <barney.gale@gmail.com>
Tue, 9 Jan 2024 19:11:17 +0000 (19:11 +0000)
committerGitHub <noreply@github.com>
Tue, 9 Jan 2024 19:11:17 +0000 (19:11 +0000)
Call straight through to `joinpath()` in `PathBase._make_child_relpath()`.
Move optimised/caching code to `pathlib.Path._make_child_relpath()`

Lib/pathlib/__init__.py
Lib/pathlib/_abc.py

index a432d45bfed3a9850703b0038222058545d5017d..749c68d2999bdc40d8ef25b1f21c0d9e508064c2 100644 (file)
@@ -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.
index be22ecef4d214ef751873b2381c1b5d76ef5ce10..0e442ae4809c363cbbfe472f55e5b1abc5ee19c4 100644 (file)
@@ -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