Mercurial > hg
changeset 8587:8f15d54437b9
match: fold match into _match base class
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 24 May 2009 02:56:22 -0500 |
parents | 347fe1ac4f21 |
children | 2624f485b9bc |
files | mercurial/match.py |
diffstat | 1 files changed, 32 insertions(+), 37 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/match.py Sun May 24 02:56:20 2009 -0500 +++ b/mercurial/match.py Sun May 24 02:56:22 2009 -0500 @@ -7,35 +7,7 @@ import util, re -class _match(object): - def __init__(self, root, cwd, files, mf, ap): - self._root = root - self._cwd = cwd - self._files = files - self._fmap = set(files) - self.matchfn = mf - self._anypats = ap - def __call__(self, fn): - return self.matchfn(fn) - def __iter__(self): - for f in self._files: - yield f - def bad(self, f, msg): - return True - def dir(self, f): - pass - def missing(self, f): - pass - def exact(self, f): - return f in self._fmap - def rel(self, f): - return util.pathto(self._root, self._cwd, f) - def files(self): - return self._files - def anypats(self): - return self._anypats - -class match(_match): +class match(object): def __init__(self, root, cwd, patterns, include=[], exclude=[], default='glob', exact=False): """build an object to match a set of file patterns @@ -55,24 +27,26 @@ 'path:<path>' - a path relative to canonroot 'relglob:<glob>' - an unrooted glob (*.c matches C files in all dirs) 'relpath:<path>' - a path relative to cwd - 'relre:<regexp>' - a regexp that doesn't have to match the start of a name - '<something>' - one of the cases above, selected by the dflt_pat argument + 'relre:<regexp>' - a regexp that needn't match the start of a name + '<something>' - a pattern of the specified default type """ - roots = [] - anypats = bool(include or exclude) + self._root = root + self._cwd = cwd + self._files = [] + self._anypats = bool(include or exclude) if include: im = _buildmatch(_normalize(include, 'glob', root, cwd), '(?:/|$)') if exclude: em = _buildmatch(_normalize(exclude, 'glob', root, cwd), '(?:/|$)') if exact: - roots = patterns + self._files = patterns pm = self.exact elif patterns: pats = _normalize(patterns, default, root, cwd) - roots = _roots(pats) - anypats = anypats or _anypats(pats) + self._files = _roots(pats) + self._anypats = self._anypats or _anypats(pats) pm = _buildmatch(pats, '$') if patterns or exact: @@ -98,7 +72,28 @@ else: m = lambda f: True - _match.__init__(self, root, cwd, roots, m, anypats) + self.matchfn = m + self._fmap = set(self._files) + + def __call__(self, fn): + return self.matchfn(fn) + def __iter__(self): + for f in self._files: + yield f + def bad(self, f, msg): + return True + def dir(self, f): + pass + def missing(self, f): + pass + def exact(self, f): + return f in self._fmap + def rel(self, f): + return util.pathto(self._root, self._cwd, f) + def files(self): + return self._files + def anypats(self): + return self._anypats class exact(match): def __init__(self, root, cwd, files):