summaryrefslogtreecommitdiff
path: root/Lib/glob.py
diff options
context:
space:
mode:
authorTim Golden <mail@timgolden.me.uk>2012-11-06 15:33:30 +0000
committerTim Golden <mail@timgolden.me.uk>2012-11-06 15:33:30 +0000
commit9b3fb0c6a00b2ce9e0cd37459b5476e3162c073d (patch)
tree86cf1983ced493513c189f3810b0613c1d1bd33c /Lib/glob.py
parent8f323d9aca1f9de2266684d5bc9ef0b15e786115 (diff)
downloadcpython-git-9b3fb0c6a00b2ce9e0cd37459b5476e3162c073d.tar.gz
Backed out changeset dafca4714298
Diffstat (limited to 'Lib/glob.py')
-rw-r--r--Lib/glob.py65
1 files changed, 18 insertions, 47 deletions
diff --git a/Lib/glob.py b/Lib/glob.py
index 2d3132d1ea..3431a695bb 100644
--- a/Lib/glob.py
+++ b/Lib/glob.py
@@ -14,7 +14,6 @@ def glob(pathname):
"""
return list(iglob(pathname))
-
def iglob(pathname):
"""Return an iterator which yields the paths matching a pathname pattern.
@@ -25,24 +24,21 @@ def iglob(pathname):
if os.path.lexists(pathname):
yield pathname
return
- pathnames = expand_braces(pathname)
- for pathname in pathnames:
- dirname, basename = os.path.split(pathname)
- if not dirname:
- yield from glob1(None, basename)
- return
-
- if has_magic(dirname):
- dirs = iglob(dirname)
- else:
- dirs = [dirname]
- if has_magic(basename):
- glob_in_dir = glob1
- else:
- glob_in_dir = glob0
- for dirname in dirs:
- for name in glob_in_dir(dirname, basename):
- yield os.path.join(dirname, name)
+ dirname, basename = os.path.split(pathname)
+ if not dirname:
+ yield from glob1(None, basename)
+ return
+ if has_magic(dirname):
+ dirs = iglob(dirname)
+ else:
+ dirs = [dirname]
+ if has_magic(basename):
+ glob_in_dir = glob1
+ else:
+ glob_in_dir = glob0
+ for dirname in dirs:
+ for name in glob_in_dir(dirname, basename):
+ yield os.path.join(dirname, name)
# These 2 helper functions non-recursively glob inside a literal directory.
# They return a list of basenames. `glob1` accepts a pattern while `glob0`
@@ -74,37 +70,12 @@ def glob0(dirname, basename):
return []
-magic_check = re.compile('[*?[{]')
-magic_check_bytes = re.compile(b'[*?[{]')
+magic_check = re.compile('[*?[]')
+magic_check_bytes = re.compile(b'[*?[]')
+
def has_magic(s):
if isinstance(s, bytes):
match = magic_check_bytes.search(s)
else:
match = magic_check.search(s)
return match is not None
-
-brace_matcher = re.compile(r'.*(\{.+?[^\\]\})')
-def expand_braces(text):
- """Find the rightmost, innermost set of braces and, if it contains a
- comma-separated list, expand its contents recursively (any of its items
- may itself be a list enclosed in braces).
-
- Return the full set of expanded strings.
- """
- res = set()
-
- match = brace_matcher.search(text)
- if match is not None:
- sub = match.group(1)
- open_brace, close_brace = match.span(1)
- if "," in sub:
- for pat in sub.strip('{}').split(','):
- res.update(expand_braces(text[:open_brace] + pat + text[close_brace:]))
-
- else:
- res.update(expand_braces(text[:open_brace] + sub.replace('}', '\\}') + text[close_brace:]))
-
- else:
- res.add(text.replace('\\}', '}'))
-
- return res