diff --git a/Lib/glob.py b/Lib/glob.py index d1a6dddeeb1610..8879eff80415aa 100644 --- a/Lib/glob.py +++ b/Lib/glob.py @@ -320,11 +320,11 @@ def translate(pat, *, recursive=False, include_hidden=False, seps=None): @functools.lru_cache(maxsize=512) -def _compile_pattern(pat, sep, case_sensitive, recursive=True): +def _compile_pattern(pat, seps, case_sensitive, recursive=True): """Compile given glob pattern to a re.Pattern object (observing case sensitivity).""" flags = re.NOFLAG if case_sensitive else re.IGNORECASE - regex = translate(pat, recursive=recursive, include_hidden=True, seps=sep) + regex = translate(pat, recursive=recursive, include_hidden=True, seps=seps) return re.compile(regex, flags=flags).match @@ -360,8 +360,9 @@ def concat_path(path, text): # High-level methods - def compile(self, pat): - return _compile_pattern(pat, self.sep, self.case_sensitive, self.recursive) + def compile(self, pat, altsep=None): + seps = (self.sep, altsep) if altsep else self.sep + return _compile_pattern(pat, seps, self.case_sensitive, self.recursive) def selector(self, parts): """Returns a function that selects from a given path, walking and diff --git a/Lib/pathlib/types.py b/Lib/pathlib/types.py index cfdbc89644a24a..49953ae37c152b 100644 --- a/Lib/pathlib/types.py +++ b/Lib/pathlib/types.py @@ -14,7 +14,7 @@ from glob import _PathGlobber, _no_recurse_symlinks from pathlib import PurePath, Path from pathlib._os import magic_open, ensure_distinct_paths, copy_file -from typing import Protocol, runtime_checkable +from typing import Optional, Protocol, runtime_checkable def _explode_path(path): @@ -44,6 +44,7 @@ class _PathParser(Protocol): """ sep: str + altsep: Optional[str] def split(self, path: str) -> tuple[str, str]: ... def splitext(self, path: str) -> tuple[str, str]: ... def normcase(self, path: str) -> str: ... @@ -223,7 +224,7 @@ def full_match(self, pattern, *, case_sensitive=None): if case_sensitive is None: case_sensitive = self.parser.normcase('Aa') == 'Aa' globber = _PathGlobber(pattern.parser.sep, case_sensitive, recursive=True) - match = globber.compile(str(pattern)) + match = globber.compile(str(pattern), altsep=pattern.parser.altsep) return match(str(self)) is not None