Mercurial > hg
changeset 8586:347fe1ac4f21
match: add exact flag to match() to unify all match forms
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Sun, 24 May 2009 02:56:20 -0500 |
parents | bbcd0da50e96 |
children | 8f15d54437b9 |
files | mercurial/match.py |
diffstat | 1 files changed, 15 insertions(+), 11 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/match.py Sun May 24 02:56:14 2009 -0500 +++ b/mercurial/match.py Sun May 24 02:56:20 2009 -0500 @@ -37,7 +37,7 @@ class match(_match): def __init__(self, root, cwd, patterns, include=[], exclude=[], - default='glob'): + default='glob', exact=False): """build an object to match a set of file patterns arguments: @@ -47,6 +47,7 @@ include - patterns to include exclude - patterns to exclude default - if a pattern in names has no explicit type, assume this one + exact - patterns are actually literals a pattern is one of: 'glob:<glob>' - a glob relative to cwd @@ -61,17 +62,20 @@ roots = [] anypats = bool(include or exclude) - if patterns: + if include: + im = _buildmatch(_normalize(include, 'glob', root, cwd), '(?:/|$)') + if exclude: + em = _buildmatch(_normalize(exclude, 'glob', root, cwd), '(?:/|$)') + if exact: + roots = patterns + pm = self.exact + elif patterns: pats = _normalize(patterns, default, root, cwd) roots = _roots(pats) anypats = anypats or _anypats(pats) pm = _buildmatch(pats, '$') - if include: - im = _buildmatch(_normalize(include, 'glob', root, cwd), '(?:/|$)') - if exclude: - em = _buildmatch(_normalize(exclude, 'glob', root, cwd), '(?:/|$)') - if patterns: + if patterns or exact: if include: if exclude: m = lambda f: im(f) and not em(f) and pm(f) @@ -96,17 +100,17 @@ _match.__init__(self, root, cwd, roots, m, anypats) -class exact(_match): +class exact(match): def __init__(self, root, cwd, files): - _match.__init__(self, root, cwd, files, self.exact, False) + match.__init__(self, root, cwd, files, exact = True) class always(match): def __init__(self, root, cwd): match.__init__(self, root, cwd, []) -class never(exact): +class never(match): def __init__(self, root, cwd): - exact.__init__(self, root, cwd, []) + match.__init__(self, root, cwd, [], exact = True) def patkind(pat): return _patsplit(pat, None)[0]