diff -r 13bba4066f90 -r 2941e3ddd1b1 tests/run-tests.py --- a/tests/run-tests.py Wed Sep 22 23:46:57 2010 +0200 +++ b/tests/run-tests.py Thu Sep 23 10:33:58 2010 +0200 @@ -503,14 +503,31 @@ def rematch(el, l): try: - # hack to deal with graphlog, which looks like bogus regexes - if el.startswith('|'): - el = '\\' + el - return re.match(el, l) + # ensure that the regex matches to the end of the string + return re.match(el + r'\Z', l) except re.error: # el is an invalid regex return False + def globmatch(el, l): + # The only supported special characters are * and ?. Escaping is + # supported. + i, n = 0, len(el) + res = '' + while i < n: + c = el[i] + i += 1 + if c == '\\' and el[i] in '*?\\': + res += el[i - 1:i + 1] + i += 1 + elif c == '*': + res += '.*' + elif c == '?': + res += '.' + else: + res += re.escape(c) + return rematch(res, l) + pos = -1 postout = [] ret = 0 @@ -530,10 +547,12 @@ if el == l: # perfect match (fast) postout.append(" " + l) - elif el and rematch(el, l): # fallback regex match - postout.append(" " + el) - else: # mismatch - let diff deal with it - postout.append(" " + l) + elif (el and + (el.endswith(" (re)\n") and rematch(el[:-6] + '\n', l) or + el.endswith(" (glob)\n") and globmatch(el[:-8] + '\n', l))): + postout.append(" " + el) # fallback regex/glob match + else: + postout.append(" " + l) # let diff deal with it if pos in after: postout += after.pop(pos)