in src/buildstream/utils.py [0:0]
def _glob2re(pat):
i, n = 0, len(pat)
res = ""
while i < n:
c = pat[i]
i = i + 1
if c == "*":
# fnmatch.translate() simply uses the '.*' separator here,
# we only want that for double asterisk (bash 'globstar' behavior)
#
if i < n and pat[i] == "*":
res = res + ".*"
i = i + 1
else:
res = res + "[^/]*"
elif c == "?":
# fnmatch.translate() simply uses the '.' wildcard here, but
# we dont want to match path separators here
res = res + "[^/]"
elif c == "[":
j = i
if j < n and pat[j] == "!":
j = j + 1
if j < n and pat[j] == "]":
j = j + 1
while j < n and pat[j] != "]":
j = j + 1
if j >= n:
res = res + "\\["
else:
stuff = pat[i:j].replace("\\", "\\\\")
i = j + 1
if stuff[0] == "!":
stuff = "^" + stuff[1:]
elif stuff[0] == "^":
stuff = "\\" + stuff
res = "{}[{}]".format(res, stuff)
else:
res = res + re.escape(c)
return res + r"\Z"