gh-92550: Fix pathlib.Path.rglob() for empty pattern (GH-92604)

(cherry picked from commit 87f849c775)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
This commit is contained in:
Miss Islington (bot) 2022-05-10 22:13:11 -07:00 committed by GitHub
parent 951cfc8e54
commit 5135b6ed73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 7 additions and 1 deletions

View File

@ -960,7 +960,7 @@ class Path(PurePath):
drv, root, pattern_parts = self._flavour.parse_parts((pattern,)) drv, root, pattern_parts = self._flavour.parse_parts((pattern,))
if drv or root: if drv or root:
raise NotImplementedError("Non-relative patterns are unsupported") raise NotImplementedError("Non-relative patterns are unsupported")
if pattern[-1] in (self._flavour.sep, self._flavour.altsep): if pattern and pattern[-1] in (self._flavour.sep, self._flavour.altsep):
pattern_parts.append('') pattern_parts.append('')
selector = _make_selector(("**",) + tuple(pattern_parts), self._flavour) selector = _make_selector(("**",) + tuple(pattern_parts), self._flavour)
for p in selector.select_from(self): for p in selector.select_from(self):

View File

@ -1693,10 +1693,15 @@ class _BasePathTest(object):
"dirA", "dirA/linkC", "dirB", "dirB/linkD", "dirC", "dirA", "dirA/linkC", "dirB", "dirB/linkD", "dirC",
"dirC/dirD", "dirE", "linkB", "dirC/dirD", "dirE", "linkB",
]) ])
_check(p.rglob(""), ["", "dirA", "dirB", "dirC", "dirE", "dirC/dirD"])
p = P(BASE, "dirC") p = P(BASE, "dirC")
_check(p.rglob("*"), ["dirC/fileC", "dirC/novel.txt",
"dirC/dirD", "dirC/dirD/fileD"])
_check(p.rglob("file*"), ["dirC/fileC", "dirC/dirD/fileD"]) _check(p.rglob("file*"), ["dirC/fileC", "dirC/dirD/fileD"])
_check(p.rglob("*/*"), ["dirC/dirD/fileD"]) _check(p.rglob("*/*"), ["dirC/dirD/fileD"])
_check(p.rglob("*/"), ["dirC/dirD"])
_check(p.rglob(""), ["dirC", "dirC/dirD"])
# gh-91616, a re module regression # gh-91616, a re module regression
_check(p.rglob("*.txt"), ["dirC/novel.txt"]) _check(p.rglob("*.txt"), ["dirC/novel.txt"])
_check(p.rglob("*.*"), ["dirC/novel.txt"]) _check(p.rglob("*.*"), ["dirC/novel.txt"])

View File

@ -0,0 +1 @@
Fix :meth:`pathlib.Path.rglob` for empty pattern.