Files
mongo/buildscripts/resmokelib/utils/globstar.py
Max Hirschhorn 6552887793 SERVER-69944 Switch to use Python's built-in recursive glob support.
When splitting a path of the form "a/*/b/**", globstar.iglob() would
previously have attempted to walk "a/*" as a literal directory instead
of expanding the glob pattern into a list of directories and walking
each of them.
2022-09-23 22:47:05 +00:00

39 lines
1.2 KiB
Python

"""Filename globbing utility."""
import glob as _glob
import os.path
import re
_CONTAINS_GLOB_PATTERN = re.compile("[*?[]")
def is_glob_pattern(string):
"""Return true if 'string' represents a glob pattern, and false otherwise."""
# Copied from glob.has_magic().
return _CONTAINS_GLOB_PATTERN.search(string) is not None
def glob(globbed_pathname):
"""Return a list of pathnames matching the 'globbed_pathname' pattern.
In addition to containing simple shell-style wildcards a la fnmatch,
the pattern may also contain globstars ("**"), which is recursively
expanded to match zero or more subdirectories.
"""
return list(iglob(globbed_pathname))
def iglob(globbed_pathname):
"""Emit a list of pathnames matching the 'globbed_pathname' pattern.
In addition to containing simple shell-style wildcards a la fnmatch,
the pattern may also contain globstars ("**"), which is recursively
expanded to match zero or more subdirectories.
"""
for pathname in _glob.iglob(globbed_pathname, recursive=True):
# Normalize 'pathname' so exact string comparison can be used later.
yield os.path.normpath(pathname)