comparison mercurial/util.py @ 742:092937de2ad7

Refactor matchpats and walk Move core match function code to util Add some comments and whitespace Simplify options Use lambdas instead of always and never
author mpm@selenic.com
date Thu, 21 Jul 2005 12:21:33 -0500
parents d2422f10c136
children cdb9e95b2fab 445970ccf57a
comparison
equal deleted inserted replaced
741:156dc2f3be7f 742:092937de2ad7
77 res += '|' 77 res += '|'
78 else: 78 else:
79 res += re.escape(c) 79 res += re.escape(c)
80 return head + res + tail 80 return head + res + tail
81 81
82 def matcher(cwd, pats, inc, exc, head = ''):
83 def regex(name, tail):
84 '''convert a pattern into a regular expression'''
85 if name.startswith('re:'):
86 return name[3:]
87 elif name.startswith('path:'):
88 return '^' + re.escape(name[5:]) + '$'
89 elif name.startswith('glob:'):
90 return head + globre(name[5:], '', tail)
91 return head + globre(name, '', tail)
92
93 def under(fn):
94 """check if fn is under our cwd"""
95 return not cwd or fn.startswith(cwdsep)
96
97 def matchfn(pats, tail):
98 """build a matching function from a set of patterns"""
99 if pats:
100 pat = '(?:%s)' % '|'.join([regex(p, tail) for p in pats])
101 if cwd:
102 pat = re.escape(cwd + os.sep) + pat
103 return re.compile(pat).match
104
105 cwdsep = cwd + os.sep
106 patmatch = matchfn(pats, '$') or (lambda fn: True)
107 incmatch = matchfn(inc, '(?:/|$)') or under
108 excmatch = matchfn(exc, '(?:/|$)') or (lambda fn: False)
109
110 return lambda fn: (incmatch(fn) and not excmatch(fn) and
111 (fn.endswith('/') or patmatch(fn)))
112
82 def system(cmd, errprefix=None): 113 def system(cmd, errprefix=None):
83 """execute a shell command that must succeed""" 114 """execute a shell command that must succeed"""
84 rc = os.system(cmd) 115 rc = os.system(cmd)
85 if rc: 116 if rc:
86 errmsg = "%s %s" % (os.path.basename(cmd.split(None, 1)[0]), 117 errmsg = "%s %s" % (os.path.basename(cmd.split(None, 1)[0]),