bpo-22276: Fix pathlib.Path.glob not to ignore trailing path separator by e-kwsm · Pull Request #10349 · python/cpython
I propose simpler patch:
diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 4763ab54f6..a759db1684 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -281,7 +281,9 @@ def make_uri(self, path): def _make_selector(pattern_parts, flavour): pat = pattern_parts[0] child_parts = pattern_parts[1:] - if pat == '**': + if not pat: + return _TerminatingSelector() + elif pat == '**': cls = _RecursiveWildcardSelector elif '**' in pat: raise ValueError("Invalid pattern: '**' can only be an entire path component") @@ -943,6 +945,8 @@ def glob(self, pattern): drv, root, pattern_parts = self._flavour.parse_parts((pattern,)) if drv or root: raise NotImplementedError("Non-relative patterns are unsupported") + if pattern[-1] in (self._flavour.sep, self._flavour.altsep): + pattern_parts.append('') selector = _make_selector(tuple(pattern_parts), self._flavour) for p in selector.select_from(self): yield p @@ -956,6 +960,8 @@ def rglob(self, pattern): drv, root, pattern_parts = self._flavour.parse_parts((pattern,)) if drv or root: raise NotImplementedError("Non-relative patterns are unsupported") + if pattern[-1] in (self._flavour.sep, self._flavour.altsep): + pattern_parts.append('') selector = _make_selector(("**",) + tuple(pattern_parts), self._flavour) for p in selector.select_from(self): yield p