mirror of https://github.com/python/cpython
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:
parent
951cfc8e54
commit
5135b6ed73
|
@ -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):
|
||||||
|
|
|
@ -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"])
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
Fix :meth:`pathlib.Path.rglob` for empty pattern.
|
Loading…
Reference in New Issue