comparison mercurial/match.py @ 12163:505f64bb58af

match: accept auditor argument This is used when normalizing filenames and patterns.
author Martin Geisler <mg@lazybytes.net>
date Fri, 03 Sep 2010 12:58:51 +0200
parents b046b90c4ae5
children b7fbf24c8a93
comparison
equal deleted inserted replaced
12162:af8c4929931c 12163:505f64bb58af
9 import util 9 import util
10 from i18n import _ 10 from i18n import _
11 11
12 class match(object): 12 class match(object):
13 def __init__(self, root, cwd, patterns, include=[], exclude=[], 13 def __init__(self, root, cwd, patterns, include=[], exclude=[],
14 default='glob', exact=False): 14 default='glob', exact=False, auditor=None):
15 """build an object to match a set of file patterns 15 """build an object to match a set of file patterns
16 16
17 arguments: 17 arguments:
18 root - the canonical root of the tree you're matching against 18 root - the canonical root of the tree you're matching against
19 cwd - the current working directory, if relevant 19 cwd - the current working directory, if relevant
37 self._cwd = cwd 37 self._cwd = cwd
38 self._files = [] 38 self._files = []
39 self._anypats = bool(include or exclude) 39 self._anypats = bool(include or exclude)
40 40
41 if include: 41 if include:
42 im = _buildmatch(_normalize(include, 'glob', root, cwd), '(?:/|$)') 42 im = _buildmatch(_normalize(include, 'glob', root, cwd, auditor),
43 '(?:/|$)')
43 if exclude: 44 if exclude:
44 em = _buildmatch(_normalize(exclude, 'glob', root, cwd), '(?:/|$)') 45 em = _buildmatch(_normalize(exclude, 'glob', root, cwd, auditor),
46 '(?:/|$)')
45 if exact: 47 if exact:
46 self._files = patterns 48 self._files = patterns
47 pm = self.exact 49 pm = self.exact
48 elif patterns: 50 elif patterns:
49 pats = _normalize(patterns, default, root, cwd) 51 pats = _normalize(patterns, default, root, cwd, auditor)
50 self._files = _roots(pats) 52 self._files = _roots(pats)
51 self._anypats = self._anypats or _anypats(pats) 53 self._anypats = self._anypats or _anypats(pats)
52 pm = _buildmatch(pats, '$') 54 pm = _buildmatch(pats, '$')
53 55
54 if patterns or exact: 56 if patterns or exact:
216 re.compile('(?:%s)' % _regex(k, p, tail)) 218 re.compile('(?:%s)' % _regex(k, p, tail))
217 except re.error: 219 except re.error:
218 raise util.Abort(_("invalid pattern (%s): %s") % (k, p)) 220 raise util.Abort(_("invalid pattern (%s): %s") % (k, p))
219 raise util.Abort(_("invalid pattern")) 221 raise util.Abort(_("invalid pattern"))
220 222
221 def _normalize(names, default, root, cwd): 223 def _normalize(names, default, root, cwd, auditor):
222 pats = [] 224 pats = []
223 for kind, name in [_patsplit(p, default) for p in names]: 225 for kind, name in [_patsplit(p, default) for p in names]:
224 if kind in ('glob', 'relpath'): 226 if kind in ('glob', 'relpath'):
225 name = util.canonpath(root, cwd, name) 227 name = util.canonpath(root, cwd, name, auditor)
226 elif kind in ('relglob', 'path'): 228 elif kind in ('relglob', 'path'):
227 name = util.normpath(name) 229 name = util.normpath(name)
228 230
229 pats.append((kind, name)) 231 pats.append((kind, name))
230 return pats 232 return pats